/** * 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.tajo.client; import org.apache.tajo.annotation.Nullable; import org.apache.tajo.catalog.Schema; import org.apache.tajo.catalog.TableDesc; import org.apache.tajo.catalog.TableMeta; import org.apache.tajo.catalog.partition.PartitionMethodDesc; import org.apache.tajo.catalog.proto.CatalogProtos; import org.apache.tajo.catalog.proto.CatalogProtos.IndexDescProto; import org.apache.tajo.catalog.proto.CatalogProtos.PartitionDescProto; import org.apache.tajo.exception.*; import java.io.Closeable; import java.net.URI; import java.util.List; public interface CatalogAdminClient extends Closeable { /** * Create a database. * * @param databaseName The database name to be created. This name is case sensitive. * @return True if created successfully. * @throws DuplicateDatabaseException */ void createDatabase(final String databaseName) throws DuplicateDatabaseException; /** * Does the database exist? * * @param databaseName The database name to be checked. This name is case sensitive. * @return True if so. */ boolean existDatabase(final String databaseName); /** * Drop the database * * @param databaseName The database name to be dropped. This name is case sensitive. * @return True if the database is dropped successfully. * @throws UndefinedDatabaseException */ void dropDatabase(final String databaseName) throws UndefinedDatabaseException, InsufficientPrivilegeException, CannotDropCurrentDatabaseException; List<String> getAllDatabaseNames(); /** * Does the table exist? * * @param tableName The table name to be checked. This name is case sensitive. * @return True if so. */ boolean existTable(final String tableName); /** * Create an external table. * * @param tableName The table name to be created. This name is case sensitive. This name can be qualified or not. * If the table name is not qualified, the current database in the session will be used. * @param schema The schema * @param path The external table location * @param meta Table meta * @return the created table description. * @throws DuplicateTableException */ TableDesc createExternalTable(final String tableName, final Schema schema, final URI path, final TableMeta meta) throws DuplicateTableException, UnavailableTableLocationException, InsufficientPrivilegeException; /** * Create an external table. * * @param tableName The table name to be created. This name is case sensitive. This name can be qualified or not. * If the table name is not qualified, the current database in the session will be used. * @param schema The schema * @param path The external table location * @param meta Table meta * @param partitionMethodDesc Table partition description * @return the created table description. * @throws DuplicateTableException */ TableDesc createExternalTable(final String tableName, final Schema schema, final URI path, final TableMeta meta, final PartitionMethodDesc partitionMethodDesc) throws DuplicateTableException, InsufficientPrivilegeException, UnavailableTableLocationException; /** * Drop a table * * @param tableName The table name to be dropped. This name is case sensitive. * @return True if the table is dropped successfully. * @throws InsufficientPrivilegeException */ void dropTable(final String tableName) throws UndefinedTableException, InsufficientPrivilegeException; /** * Drop a table. * * @param tableName The table name to be dropped. This name is case sensitive. * @param purge If purge is true, this call will remove the entry in catalog as well as the table contents. * @return True if the table is dropped successfully. * @throws UndefinedTableException * @throws InsufficientPrivilegeException */ void dropTable(final String tableName, final boolean purge) throws UndefinedTableException, InsufficientPrivilegeException; /** * Get a list of table names. * * @param databaseName The database name to show all tables. This name is case sensitive. * If it is null, this method will show all tables * in the current database of this session. */ List<String> getTableList(@Nullable final String databaseName); /** * Get a table description * * @param tableName The table name to get. This name is case sensitive. * @return Table description * @throws UndefinedTableException */ TableDesc getTableDesc(final String tableName) throws UndefinedTableException; /** * Get all partition lists of specified table. * * @param tableName The table name to get. This name is case sensitive. * @return lists of partitions */ List<PartitionDescProto> getPartitionsOfTable(final String tableName) throws UndefinedDatabaseException, UndefinedTableException, UndefinedPartitionMethodException; List<CatalogProtos.FunctionDescProto> getFunctions(final String functionName); IndexDescProto getIndex(final String indexName); boolean existIndex(final String indexName); List<IndexDescProto> getIndexes(final String tableName); boolean hasIndexes(final String tableName); IndexDescProto getIndex(final String tableName, final String[] columnNames); boolean existIndex(final String tableName, final String[] columnName); boolean dropIndex(final String indexName); }