[ https://issues.apache.org/jira/browse/DRILL-4728?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15410174#comment-15410174 ]
ASF GitHub Bot commented on DRILL-4728: --------------------------------------- Github user vkorukanti commented on a diff in the pull request: https://github.com/apache/drill/pull/527#discussion_r73767387 --- Diff: exec/java-exec/src/main/java/org/apache/drill/exec/store/SchemaTreeProvider.java --- @@ -0,0 +1,105 @@ +/** + * 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 + * <p/> + * http://www.apache.org/licenses/LICENSE-2.0 + * <p/> + * 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.drill.exec.store; + +import org.apache.calcite.jdbc.SimpleCalciteSchema; +import org.apache.calcite.schema.SchemaPlus; +import org.apache.drill.common.AutoCloseables; +import org.apache.drill.common.exceptions.DrillRuntimeException; +import org.apache.drill.exec.ExecConstants; +import org.apache.drill.exec.server.DrillbitContext; +import org.apache.drill.exec.store.SchemaConfig.SchemaConfigInfoProvider; +import org.apache.drill.exec.util.ImpersonationUtil; + +import com.google.common.collect.Lists; + +import java.io.IOException; +import java.util.List; + +/** + * Class which creates new schema trees. It keeps track of newly created schema trees and closes them safely as + * part of {@link #close()}. + */ +public class SchemaTreeProvider implements AutoCloseable { + private static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(SchemaTreeProvider.class); + + private final DrillbitContext dContext; + private final List<SchemaPlus> schemaTreesToClose; + private final boolean isImpersonationEnabled; + + public SchemaTreeProvider(final DrillbitContext dContext) { + this.dContext = dContext; + schemaTreesToClose = Lists.newArrayList(); + isImpersonationEnabled = dContext.getConfig().getBoolean(ExecConstants.IMPERSONATION_ENABLED); + } + + /** + * Return root schema with schema owner as the given user. + * + * @param userName Name of the user who is accessing the storage sources. + * @param provider {@link SchemaConfigInfoProvider} instance + * @return Root of the schema tree. + */ + public SchemaPlus getRootSchema(final String userName, final SchemaConfigInfoProvider provider) { + final String schemaUser = isImpersonationEnabled ? userName : ImpersonationUtil.getProcessUserName(); + final SchemaConfig schemaConfig = SchemaConfig.newBuilder(schemaUser, provider).build(); + return getRootSchema(schemaConfig); + } + + /** + * Create and return a SchemaTree with given <i>schemaConfig</i>. + * @param schemaConfig + * @return + */ + public SchemaPlus getRootSchema(SchemaConfig schemaConfig) { + try { + final SchemaPlus rootSchema = SimpleCalciteSchema.createRootSchema(false); + dContext.getSchemaFactory().registerSchemas(schemaConfig, rootSchema); + schemaTreesToClose.add(rootSchema); + return rootSchema; + } catch(IOException e) { + // We can't proceed further without a schema, throw a runtime exception. + final String errMsg = String.format("Failed to create schema tree: %s", e.getMessage()); + logger.error(errMsg, e); + throw new DrillRuntimeException(errMsg, e); --- End diff -- updated to use UserException > Add support for new metadata fetch APIs > --------------------------------------- > > Key: DRILL-4728 > URL: https://issues.apache.org/jira/browse/DRILL-4728 > Project: Apache Drill > Issue Type: Sub-task > Components: Metadata > Reporter: Venki Korukanti > Assignee: Venki Korukanti > Fix For: 1.8.0 > > > Please see the doc attached to the parent JIRA DRILL-4714 for details on APIs. > Add support for following APIs (including {{protobuf}} messages, server > handling code and Java client APIs) > {code} > List<Catalog> getCatalogs(Filter catalogNameFilter) > List<Schema> getSchemas( > Filter catalogNameFilter, > Filter schemaNameFilter > ) > List<Table> getTables( > Filter catalogNameFilter, > Filter schemaNameFilter, > Filter tableNameFilter > ) > List<Column> getColumns( > Filter catalogNameFilter, > Filter schemaNameFilter, > Filter tableNameFilter, > Filter columnNameFilter > ) > {code} > Note: native client changes are not going to be included in this patch. Will > file a separate JIRA. -- This message was sent by Atlassian JIRA (v6.3.4#6332)