From pr-return-1587-apmail-cassandra-pr-archive=cassandra.apache.org@cassandra.apache.org Fri Nov 9 16:03:12 2018 Return-Path: X-Original-To: apmail-cassandra-pr-archive@minotaur.apache.org Delivered-To: apmail-cassandra-pr-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id C870118FB2 for ; Fri, 9 Nov 2018 16:03:12 +0000 (UTC) Received: (qmail 19691 invoked by uid 500); 9 Nov 2018 16:03:12 -0000 Delivered-To: apmail-cassandra-pr-archive@cassandra.apache.org Received: (qmail 19662 invoked by uid 500); 9 Nov 2018 16:03:12 -0000 Mailing-List: contact pr-help@cassandra.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: pr@cassandra.apache.org Delivered-To: mailing list pr@cassandra.apache.org Received: (qmail 19651 invoked by uid 99); 9 Nov 2018 16:03:11 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 09 Nov 2018 16:03:11 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 26ECFDFDD7; Fri, 9 Nov 2018 16:03:11 +0000 (UTC) From: JeremiahDJordan To: pr@cassandra.apache.org Reply-To: pr@cassandra.apache.org References: In-Reply-To: Subject: [GitHub] cassandra pull request #284: Expose schema in virtual table for CASSANDRA-14... Content-Type: text/plain Message-Id: <20181109160311.26ECFDFDD7@git1-us-west.apache.org> Date: Fri, 9 Nov 2018 16:03:11 +0000 (UTC) Github user JeremiahDJordan commented on a diff in the pull request: https://github.com/apache/cassandra/pull/284#discussion_r232303844 --- Diff: src/java/org/apache/cassandra/db/virtual/DescribeTables.java --- @@ -0,0 +1,306 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.cassandra.db.virtual; + +import java.nio.ByteBuffer; +import java.util.Collection; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Lists; +import com.google.common.collect.Streams; + +import org.apache.cassandra.cql3.functions.Function; +import org.apache.cassandra.cql3.functions.FunctionName; +import org.apache.cassandra.cql3.functions.UDAggregate; +import org.apache.cassandra.cql3.functions.UDFunction; +import org.apache.cassandra.db.DecoratedKey; +import org.apache.cassandra.db.Keyspace; +import org.apache.cassandra.db.SchemaCQLHelper; +import org.apache.cassandra.db.marshal.CompositeType; +import org.apache.cassandra.db.marshal.UTF8Type; +import org.apache.cassandra.db.marshal.UserType; +import org.apache.cassandra.dht.LocalPartitioner; +import org.apache.cassandra.schema.Functions; +import org.apache.cassandra.schema.IndexMetadata; +import org.apache.cassandra.schema.Schema; +import org.apache.cassandra.schema.TableMetadata; +import org.apache.cassandra.schema.Types; +import org.apache.cassandra.schema.ViewMetadata; +import org.apache.cassandra.utils.ByteBufferUtil; + +public class DescribeTables +{ + private static final String KEYSPACE = "keyspace_name"; + private static final String CQL = "cql"; + + private static final CompositeType utfComposite = CompositeType.getInstance(UTF8Type.instance, UTF8Type.instance); + + public static Collection getAll(String name) + { + return ImmutableList.of(new DescribeKeyspaceTable(name), + new DescribeIndexesTable(name), + new DescribeTypesTable(name), + new DescribeAggregatesTable(name), + new DescribeFunctionsTable(name), + new DescribeViewsTable(name), + new DescribeTablesTable(name)); + } + + static final class DescribeKeyspaceTable extends AbstractVirtualTable + { + DescribeKeyspaceTable(String keyspace) + { + super(TableMetadata.builder(keyspace, "describe_keyspace") + .comment("cql for keyspace metadata") + .kind(TableMetadata.Kind.VIRTUAL) + .partitioner(new LocalPartitioner(UTF8Type.instance)) + .addPartitionKeyColumn(KEYSPACE, UTF8Type.instance) + .addRegularColumn(CQL, UTF8Type.instance) + .build()); + } + + @Override + public DataSet data(DecoratedKey partitionKey) + { + String keyspace = UTF8Type.instance.compose(partitionKey.getKey()); + + SimpleDataSet result = new SimpleDataSet(metadata()); + result.row(keyspace) + .column(CQL, SchemaCQLHelper.getKeyspaceAsCQL(keyspace)); + return result; + } + + public DataSet data() + { + SimpleDataSet result = new SimpleDataSet(metadata()); + for (String keyspace : Schema.instance.getKeyspaces()) + { + result.row(keyspace) + .column(CQL, SchemaCQLHelper.getKeyspaceAsCQL(keyspace)); + } + return result; + } + } + + static abstract class AbstractDescribeTable extends AbstractVirtualTable + { + AbstractDescribeTable(String keyspace, String name) + { + super(TableMetadata.builder(keyspace, "describe_" + name) --- End diff -- Given all these tables will have the same schema, I think it might be more easily used if the “type” was just a column, rather than having to go to a whole new table. So you could just “select * from virtual_schema” and get everything. --- --------------------------------------------------------------------- To unsubscribe, e-mail: pr-unsubscribe@cassandra.apache.org For additional commands, e-mail: pr-help@cassandra.apache.org