From pr-return-1588-archive-asf-public=cust-asf.ponee.io@cassandra.apache.org Fri Nov 9 18:06:35 2018 Return-Path: X-Original-To: archive-asf-public@cust-asf.ponee.io Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx-eu-01.ponee.io (Postfix) with SMTP id 0133A180627 for ; Fri, 9 Nov 2018 18:06:34 +0100 (CET) Received: (qmail 62802 invoked by uid 500); 9 Nov 2018 17:06:34 -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 62790 invoked by uid 99); 9 Nov 2018 17:06:33 -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 17:06:33 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 559F8E0056; Fri, 9 Nov 2018 17:06:33 +0000 (UTC) From: clohfink 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: <20181109170633.559F8E0056@git1-us-west.apache.org> Date: Fri, 9 Nov 2018 17:06:33 +0000 (UTC) Github user clohfink commented on a diff in the pull request: https://github.com/apache/cassandra/pull/284#discussion_r232325693 --- 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 -- complexity there is there are things like having a UDT with same name as a table in the same keyspace. We can have something like ((type), keyspace, name) so that way we can provide uniqueness to everything and it would only be funny for keyspaces. --- --------------------------------------------------------------------- To unsubscribe, e-mail: pr-unsubscribe@cassandra.apache.org For additional commands, e-mail: pr-help@cassandra.apache.org