Search in sources :

Example 31 with Statement

use of com.facebook.presto.sql.tree.Statement in project presto by prestodb.

the class CoordinatorModule method setup.

@Override
protected void setup(Binder binder) {
    httpServerBinder(binder).bindResource("/ui", "webapp").withWelcomeFile("index.html");
    httpServerBinder(binder).bindResource("/tableau", "webapp/tableau");
    // discovery server
    install(installModuleIf(EmbeddedDiscoveryConfig.class, EmbeddedDiscoveryConfig::isEnabled, new EmbeddedDiscoveryModule()));
    // presto coordinator announcement
    discoveryBinder(binder).bindHttpAnnouncement("presto-coordinator");
    // statement resource
    jsonCodecBinder(binder).bindJsonCodec(QueryInfo.class);
    jsonCodecBinder(binder).bindJsonCodec(TaskInfo.class);
    jsonCodecBinder(binder).bindJsonCodec(QueryResults.class);
    jsonCodecBinder(binder).bindJsonCodec(SelectedRole.class);
    jaxrsBinder(binder).bind(QueuedStatementResource.class);
    jaxrsBinder(binder).bind(ExecutingStatementResource.class);
    binder.bind(StatementHttpExecutionMBean.class).in(Scopes.SINGLETON);
    newExporter(binder).export(StatementHttpExecutionMBean.class).withGeneratedName();
    // resource for serving static content
    jaxrsBinder(binder).bind(WebUiResource.class);
    // failure detector
    binder.install(new FailureDetectorModule());
    jaxrsBinder(binder).bind(NodeResource.class);
    jaxrsBinder(binder).bind(WorkerResource.class);
    httpClientBinder(binder).bindHttpClient("workerInfo", ForWorkerInfo.class);
    // query monitor
    jsonCodecBinder(binder).bindJsonCodec(OperatorInfo.class);
    configBinder(binder).bindConfig(QueryMonitorConfig.class);
    binder.bind(QueryMonitor.class).in(Scopes.SINGLETON);
    // query manager
    jaxrsBinder(binder).bind(QueryResource.class);
    jaxrsBinder(binder).bind(StageResource.class);
    jaxrsBinder(binder).bind(QueryStateInfoResource.class);
    jaxrsBinder(binder).bind(ResourceGroupStateInfoResource.class);
    binder.bind(QueryIdGenerator.class).in(Scopes.SINGLETON);
    binder.bind(QueryManager.class).to(SqlQueryManager.class).in(Scopes.SINGLETON);
    newExporter(binder).export(QueryManager.class).withGeneratedName();
    binder.bind(QueryPreparer.class).in(Scopes.SINGLETON);
    binder.bind(SessionSupplier.class).to(QuerySessionSupplier.class).in(Scopes.SINGLETON);
    binder.bind(InternalResourceGroupManager.class).in(Scopes.SINGLETON);
    newExporter(binder).export(InternalResourceGroupManager.class).withGeneratedName();
    binder.bind(ResourceGroupManager.class).to(InternalResourceGroupManager.class);
    binder.bind(LegacyResourceGroupConfigurationManager.class).in(Scopes.SINGLETON);
    binder.bind(RetryCircuitBreaker.class).in(Scopes.SINGLETON);
    newExporter(binder).export(RetryCircuitBreaker.class).withGeneratedName();
    binder.bind(LocalQueryProvider.class).in(Scopes.SINGLETON);
    jaxrsBinder(binder).bind(TaskInfoResource.class);
    // dispatcher
    binder.bind(DispatchManager.class).in(Scopes.SINGLETON);
    binder.bind(FailedDispatchQueryFactory.class).in(Scopes.SINGLETON);
    binder.bind(DispatchExecutor.class).in(Scopes.SINGLETON);
    // local dispatcher
    binder.bind(DispatchQueryFactory.class).to(LocalDispatchQueryFactory.class);
    // cluster memory manager
    binder.bind(ClusterMemoryManager.class).in(Scopes.SINGLETON);
    binder.bind(ClusterMemoryPoolManager.class).to(ClusterMemoryManager.class).in(Scopes.SINGLETON);
    httpClientBinder(binder).bindHttpClient("memoryManager", ForMemoryManager.class).withTracing().withConfigDefaults(config -> {
        config.setRequestTimeout(new Duration(10, SECONDS));
    });
    bindLowMemoryKiller(LowMemoryKillerPolicy.NONE, NoneLowMemoryKiller.class);
    bindLowMemoryKiller(LowMemoryKillerPolicy.TOTAL_RESERVATION, TotalReservationLowMemoryKiller.class);
    bindLowMemoryKiller(LowMemoryKillerPolicy.TOTAL_RESERVATION_ON_BLOCKED_NODES, TotalReservationOnBlockedNodesLowMemoryKiller.class);
    newExporter(binder).export(ClusterMemoryManager.class).withGeneratedName();
    // node monitor
    binder.bind(ClusterSizeMonitor.class).in(Scopes.SINGLETON);
    // statistics calculator
    binder.install(new StatsCalculatorModule());
    // cost calculator
    binder.bind(TaskCountEstimator.class).in(Scopes.SINGLETON);
    binder.bind(CostCalculator.class).to(CostCalculatorUsingExchanges.class).in(Scopes.SINGLETON);
    binder.bind(CostCalculator.class).annotatedWith(EstimatedExchanges.class).to(CostCalculatorWithEstimatedExchanges.class).in(Scopes.SINGLETON);
    binder.bind(CostComparator.class).in(Scopes.SINGLETON);
    // cluster statistics
    jaxrsBinder(binder).bind(ClusterStatsResource.class);
    // planner
    binder.bind(PlanFragmenter.class).in(Scopes.SINGLETON);
    binder.bind(PlanOptimizers.class).in(Scopes.SINGLETON);
    // query explainer
    binder.bind(QueryExplainer.class).in(Scopes.SINGLETON);
    // explain analyze
    binder.bind(ExplainAnalyzeContext.class).in(Scopes.SINGLETON);
    // execution scheduler
    binder.bind(RemoteTaskFactory.class).to(HttpRemoteTaskFactory.class).in(Scopes.SINGLETON);
    newExporter(binder).export(RemoteTaskFactory.class).withGeneratedName();
    binder.bind(RemoteTaskStats.class).in(Scopes.SINGLETON);
    newExporter(binder).export(RemoteTaskStats.class).withGeneratedName();
    httpClientBinder(binder).bindHttpClient("scheduler", ForScheduler.class).withTracing().withFilter(GenerateTraceTokenRequestFilter.class).withConfigDefaults(config -> {
        config.setRequestTimeout(new Duration(10, SECONDS));
        config.setMaxConnectionsPerServer(250);
    });
    binder.bind(ScheduledExecutorService.class).annotatedWith(ForScheduler.class).toInstance(newSingleThreadScheduledExecutor(threadsNamed("stage-scheduler")));
    // query execution
    binder.bind(ExecutorService.class).annotatedWith(ForQueryExecution.class).toInstance(newCachedThreadPool(threadsNamed("query-execution-%s")));
    binder.bind(QueryExecutionMBean.class).in(Scopes.SINGLETON);
    newExporter(binder).export(QueryExecutionMBean.class).as(generatedNameOf(QueryExecution.class));
    MapBinder<Class<? extends Statement>, QueryExecutionFactory<?>> executionBinder = newMapBinder(binder, new TypeLiteral<Class<? extends Statement>>() {
    }, new TypeLiteral<QueryExecution.QueryExecutionFactory<?>>() {
    });
    binder.bind(SplitSchedulerStats.class).in(Scopes.SINGLETON);
    newExporter(binder).export(SplitSchedulerStats.class).withGeneratedName();
    binder.bind(SqlQueryExecutionFactory.class).in(Scopes.SINGLETON);
    binder.bind(SectionExecutionFactory.class).in(Scopes.SINGLETON);
    Set<Map.Entry<Class<? extends Statement>, QueryType>> queryTypes = getAllQueryTypes().entrySet();
    // bind sql query statements to SqlQueryExecutionFactory
    queryTypes.stream().filter(entry -> entry.getValue() != QueryType.DATA_DEFINITION).forEach(entry -> executionBinder.addBinding(entry.getKey()).to(SqlQueryExecutionFactory.class).in(Scopes.SINGLETON));
    binder.bind(PartialResultQueryManager.class).in(Scopes.SINGLETON);
    // bind data definition statements to DataDefinitionExecutionFactory
    queryTypes.stream().filter(entry -> entry.getValue() == QueryType.DATA_DEFINITION && !isSessionTransactionControlStatement(entry.getKey())).forEach(entry -> executionBinder.addBinding(entry.getKey()).to(DDLDefinitionExecutionFactory.class).in(Scopes.SINGLETON));
    binder.bind(DDLDefinitionExecutionFactory.class).in(Scopes.SINGLETON);
    // bind session Control statements to SessionTransactionExecutionFactory
    queryTypes.stream().filter(entry -> (entry.getValue() == QueryType.DATA_DEFINITION && isSessionTransactionControlStatement(entry.getKey()))).forEach(entry -> executionBinder.addBinding(entry.getKey()).to(SessionDefinitionExecutionFactory.class).in(Scopes.SINGLETON));
    binder.bind(SessionDefinitionExecutionFactory.class).in(Scopes.SINGLETON);
    // helper class binding data definition tasks and statements
    PrestoDataDefBindingHelper.bindDDLDefinitionTasks(binder);
    PrestoDataDefBindingHelper.bindTransactionControlDefinitionTasks(binder);
    MapBinder<String, ExecutionPolicy> executionPolicyBinder = newMapBinder(binder, String.class, ExecutionPolicy.class);
    executionPolicyBinder.addBinding("all-at-once").to(AllAtOnceExecutionPolicy.class);
    executionPolicyBinder.addBinding("phased").to(PhasedExecutionPolicy.class);
    configBinder(binder).bindConfig(NodeResourceStatusConfig.class);
    binder.bind(NodeResourceStatusProvider.class).to(NodeResourceStatus.class).in(Scopes.SINGLETON);
    newOptionalBinder(binder, ResourceManagerProxy.class);
    install(installModuleIf(ServerConfig.class, ServerConfig::isResourceManagerEnabled, rmBinder -> {
        httpClientBinder(rmBinder).bindHttpClient("resourceManager", ForResourceManager.class);
        rmBinder.bind(ResourceManagerProxy.class).in(Scopes.SINGLETON);
    }));
    // cleanup
    binder.bind(ExecutorCleanup.class).in(Scopes.SINGLETON);
}
Also used : JaxrsBinder.jaxrsBinder(com.facebook.airlift.jaxrs.JaxrsBinder.jaxrsBinder) QueryExplainer(com.facebook.presto.sql.analyzer.QueryExplainer) QueryPerformanceFetcher(com.facebook.presto.execution.QueryPerformanceFetcher) QueryExecutionFactory(com.facebook.presto.execution.QueryExecution.QueryExecutionFactory) Executors.newSingleThreadScheduledExecutor(java.util.concurrent.Executors.newSingleThreadScheduledExecutor) Executors.newScheduledThreadPool(java.util.concurrent.Executors.newScheduledThreadPool) Map(java.util.Map) SqlQueryExecutionFactory(com.facebook.presto.execution.SqlQueryExecution.SqlQueryExecutionFactory) TaskCountEstimator(com.facebook.presto.cost.TaskCountEstimator) RemoteTaskFactory(com.facebook.presto.execution.RemoteTaskFactory) PhasedExecutionPolicy(com.facebook.presto.execution.scheduler.PhasedExecutionPolicy) Set(java.util.Set) QueryIdGenerator(com.facebook.presto.execution.QueryIdGenerator) ForMemoryManager(com.facebook.presto.memory.ForMemoryManager) RetryCircuitBreaker(com.facebook.presto.server.protocol.RetryCircuitBreaker) QueryExecution(com.facebook.presto.execution.QueryExecution) QueryInfo(com.facebook.presto.execution.QueryInfo) QueryPreparer(com.facebook.presto.execution.QueryPreparer) NodeResourceStatusConfig(com.facebook.presto.execution.NodeResourceStatusConfig) InternalResourceGroupManager(com.facebook.presto.execution.resourceGroups.InternalResourceGroupManager) TypeLiteral(com.google.inject.TypeLiteral) DispatchExecutor(com.facebook.presto.dispatcher.DispatchExecutor) EmbeddedDiscoveryModule(com.facebook.airlift.discovery.server.EmbeddedDiscoveryModule) Binder(com.google.inject.Binder) ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) LocalDispatchQueryFactory(com.facebook.presto.dispatcher.LocalDispatchQueryFactory) NoneLowMemoryKiller(com.facebook.presto.memory.NoneLowMemoryKiller) ExecutingStatementResource(com.facebook.presto.server.protocol.ExecutingStatementResource) RemoteTaskStats(com.facebook.presto.server.remotetask.RemoteTaskStats) TransactionManager(com.facebook.presto.transaction.TransactionManager) ResourceGroupManager(com.facebook.presto.execution.resourceGroups.ResourceGroupManager) DDLDefinitionExecutionFactory(com.facebook.presto.execution.DDLDefinitionExecution.DDLDefinitionExecutionFactory) LegacyResourceGroupConfigurationManager(com.facebook.presto.execution.resourceGroups.LegacyResourceGroupConfigurationManager) ClusterMemoryPoolManager(com.facebook.presto.spi.memory.ClusterMemoryPoolManager) Threads.threadsNamed(com.facebook.airlift.concurrent.Threads.threadsNamed) QueryExecutionMBean(com.facebook.presto.execution.QueryExecutionMBean) AllAtOnceExecutionPolicy(com.facebook.presto.execution.scheduler.AllAtOnceExecutionPolicy) QueryMonitor(com.facebook.presto.event.QueryMonitor) InMemoryTransactionManager(com.facebook.presto.transaction.InMemoryTransactionManager) ForQueryExecution(com.facebook.presto.execution.ForQueryExecution) ClusterSizeMonitor(com.facebook.presto.execution.ClusterSizeMonitor) TaskInfo(com.facebook.presto.execution.TaskInfo) CostCalculatorWithEstimatedExchanges(com.facebook.presto.cost.CostCalculatorWithEstimatedExchanges) ForScheduler(com.facebook.presto.operator.ForScheduler) EstimatedExchanges(com.facebook.presto.cost.CostCalculator.EstimatedExchanges) SectionExecutionFactory(com.facebook.presto.execution.scheduler.SectionExecutionFactory) TaskManagerConfig(com.facebook.presto.execution.TaskManagerConfig) Duration(io.airlift.units.Duration) PreDestroy(javax.annotation.PreDestroy) AbstractConfigurationAwareModule(com.facebook.airlift.configuration.AbstractConfigurationAwareModule) HttpClientBinder.httpClientBinder(com.facebook.airlift.http.client.HttpClientBinder.httpClientBinder) ExportBinder.newExporter(org.weakref.jmx.guice.ExportBinder.newExporter) OperatorInfo(com.facebook.presto.operator.OperatorInfo) MapBinder(com.google.inject.multibindings.MapBinder) ExecutionPolicy(com.facebook.presto.execution.scheduler.ExecutionPolicy) OptionalBinder.newOptionalBinder(com.google.inject.multibindings.OptionalBinder.newOptionalBinder) ForResourceManager(com.facebook.presto.resourcemanager.ForResourceManager) ResourceManagerProxy(com.facebook.presto.resourcemanager.ResourceManagerProxy) StatementUtils.isSessionTransactionControlStatement(com.facebook.presto.util.StatementUtils.isSessionTransactionControlStatement) SplitSchedulerStats(com.facebook.presto.execution.scheduler.SplitSchedulerStats) ConditionalModule.installModuleIf(com.facebook.airlift.configuration.ConditionalModule.installModuleIf) CostCalculatorUsingExchanges(com.facebook.presto.cost.CostCalculatorUsingExchanges) CostCalculator(com.facebook.presto.cost.CostCalculator) LowMemoryKiller(com.facebook.presto.memory.LowMemoryKiller) Threads.daemonThreadsNamed(com.facebook.airlift.concurrent.Threads.daemonThreadsNamed) List(java.util.List) StatementUtils.getAllQueryTypes(com.facebook.presto.util.StatementUtils.getAllQueryTypes) TransactionManagerConfig(com.facebook.presto.transaction.TransactionManagerConfig) PrestoDataDefBindingHelper(com.facebook.presto.util.PrestoDataDefBindingHelper) DispatchQueryFactory(com.facebook.presto.dispatcher.DispatchQueryFactory) HttpRemoteTaskFactory(com.facebook.presto.server.remotetask.HttpRemoteTaskFactory) TotalReservationLowMemoryKiller(com.facebook.presto.memory.TotalReservationLowMemoryKiller) QueryResults(com.facebook.presto.client.QueryResults) ForTransactionManager(com.facebook.presto.transaction.ForTransactionManager) QueryManager(com.facebook.presto.execution.QueryManager) Singleton(javax.inject.Singleton) JsonCodecBinder.jsonCodecBinder(com.facebook.airlift.json.JsonCodecBinder.jsonCodecBinder) StatsCalculatorModule(com.facebook.presto.cost.StatsCalculatorModule) PlanOptimizers(com.facebook.presto.sql.planner.PlanOptimizers) Inject(javax.inject.Inject) BoundedExecutor(com.facebook.airlift.concurrent.BoundedExecutor) ImmutableList(com.google.common.collect.ImmutableList) ExplainAnalyzeContext(com.facebook.presto.execution.ExplainAnalyzeContext) MemoryManagerConfig(com.facebook.presto.memory.MemoryManagerConfig) PlanFragmenter(com.facebook.presto.sql.planner.PlanFragmenter) ExecutorService(java.util.concurrent.ExecutorService) SelectedRole(com.facebook.presto.spi.security.SelectedRole) MapBinder.newMapBinder(com.google.inject.multibindings.MapBinder.newMapBinder) SessionDefinitionExecutionFactory(com.facebook.presto.execution.SessionDefinitionExecution.SessionDefinitionExecutionFactory) ObjectNames.generatedNameOf(org.weakref.jmx.ObjectNames.generatedNameOf) ClusterMemoryManager(com.facebook.presto.memory.ClusterMemoryManager) LocalQueryProvider(com.facebook.presto.server.protocol.LocalQueryProvider) DispatchManager(com.facebook.presto.dispatcher.DispatchManager) LowMemoryKillerPolicy(com.facebook.presto.memory.MemoryManagerConfig.LowMemoryKillerPolicy) Scopes(com.google.inject.Scopes) CatalogManager(com.facebook.presto.metadata.CatalogManager) TotalReservationOnBlockedNodesLowMemoryKiller(com.facebook.presto.memory.TotalReservationOnBlockedNodesLowMemoryKiller) FailureDetectorModule(com.facebook.presto.failureDetector.FailureDetectorModule) Provides(com.google.inject.Provides) QueryMonitorConfig(com.facebook.presto.event.QueryMonitorConfig) QueuedStatementResource(com.facebook.presto.server.protocol.QueuedStatementResource) QueryType(com.facebook.presto.spi.resourceGroups.QueryType) Executors.newCachedThreadPool(java.util.concurrent.Executors.newCachedThreadPool) HttpServerBinder.httpServerBinder(com.facebook.airlift.http.server.HttpServerBinder.httpServerBinder) CostComparator(com.facebook.presto.cost.CostComparator) FailedDispatchQueryFactory(com.facebook.presto.dispatcher.FailedDispatchQueryFactory) SqlQueryManager(com.facebook.presto.execution.SqlQueryManager) ConfigBinder.configBinder(com.facebook.airlift.configuration.ConfigBinder.configBinder) DiscoveryBinder.discoveryBinder(com.facebook.airlift.discovery.client.DiscoveryBinder.discoveryBinder) SECONDS(java.util.concurrent.TimeUnit.SECONDS) PartialResultQueryManager(com.facebook.presto.execution.PartialResultQueryManager) Statement(com.facebook.presto.sql.tree.Statement) QueryIdGenerator(com.facebook.presto.execution.QueryIdGenerator) DispatchManager(com.facebook.presto.dispatcher.DispatchManager) FailureDetectorModule(com.facebook.presto.failureDetector.FailureDetectorModule) RetryCircuitBreaker(com.facebook.presto.server.protocol.RetryCircuitBreaker) QueryPreparer(com.facebook.presto.execution.QueryPreparer) RemoteTaskStats(com.facebook.presto.server.remotetask.RemoteTaskStats) QueryMonitor(com.facebook.presto.event.QueryMonitor) HttpRemoteTaskFactory(com.facebook.presto.server.remotetask.HttpRemoteTaskFactory) QueryExecutionMBean(com.facebook.presto.execution.QueryExecutionMBean) LegacyResourceGroupConfigurationManager(com.facebook.presto.execution.resourceGroups.LegacyResourceGroupConfigurationManager) RemoteTaskFactory(com.facebook.presto.execution.RemoteTaskFactory) HttpRemoteTaskFactory(com.facebook.presto.server.remotetask.HttpRemoteTaskFactory) DDLDefinitionExecutionFactory(com.facebook.presto.execution.DDLDefinitionExecution.DDLDefinitionExecutionFactory) QueryExplainer(com.facebook.presto.sql.analyzer.QueryExplainer) InternalResourceGroupManager(com.facebook.presto.execution.resourceGroups.InternalResourceGroupManager) ResourceGroupManager(com.facebook.presto.execution.resourceGroups.ResourceGroupManager) Duration(io.airlift.units.Duration) PartialResultQueryManager(com.facebook.presto.execution.PartialResultQueryManager) LocalQueryProvider(com.facebook.presto.server.protocol.LocalQueryProvider) SplitSchedulerStats(com.facebook.presto.execution.scheduler.SplitSchedulerStats) QueryExecutionFactory(com.facebook.presto.execution.QueryExecution.QueryExecutionFactory) SqlQueryExecutionFactory(com.facebook.presto.execution.SqlQueryExecution.SqlQueryExecutionFactory) PlanOptimizers(com.facebook.presto.sql.planner.PlanOptimizers) CostCalculatorWithEstimatedExchanges(com.facebook.presto.cost.CostCalculatorWithEstimatedExchanges) ForQueryExecution(com.facebook.presto.execution.ForQueryExecution) SessionDefinitionExecutionFactory(com.facebook.presto.execution.SessionDefinitionExecution.SessionDefinitionExecutionFactory) PlanFragmenter(com.facebook.presto.sql.planner.PlanFragmenter) QueryExecution(com.facebook.presto.execution.QueryExecution) ForQueryExecution(com.facebook.presto.execution.ForQueryExecution) FailedDispatchQueryFactory(com.facebook.presto.dispatcher.FailedDispatchQueryFactory) SqlQueryExecutionFactory(com.facebook.presto.execution.SqlQueryExecution.SqlQueryExecutionFactory) InternalResourceGroupManager(com.facebook.presto.execution.resourceGroups.InternalResourceGroupManager) CostCalculatorUsingExchanges(com.facebook.presto.cost.CostCalculatorUsingExchanges) ForScheduler(com.facebook.presto.operator.ForScheduler) ExplainAnalyzeContext(com.facebook.presto.execution.ExplainAnalyzeContext) ClusterSizeMonitor(com.facebook.presto.execution.ClusterSizeMonitor) StatsCalculatorModule(com.facebook.presto.cost.StatsCalculatorModule) TaskCountEstimator(com.facebook.presto.cost.TaskCountEstimator) CostComparator(com.facebook.presto.cost.CostComparator) ForResourceManager(com.facebook.presto.resourcemanager.ForResourceManager) StatementUtils.isSessionTransactionControlStatement(com.facebook.presto.util.StatementUtils.isSessionTransactionControlStatement) Statement(com.facebook.presto.sql.tree.Statement) EmbeddedDiscoveryModule(com.facebook.airlift.discovery.server.EmbeddedDiscoveryModule) CostCalculator(com.facebook.presto.cost.CostCalculator) LocalDispatchQueryFactory(com.facebook.presto.dispatcher.LocalDispatchQueryFactory) DispatchQueryFactory(com.facebook.presto.dispatcher.DispatchQueryFactory) FailedDispatchQueryFactory(com.facebook.presto.dispatcher.FailedDispatchQueryFactory) PhasedExecutionPolicy(com.facebook.presto.execution.scheduler.PhasedExecutionPolicy) AllAtOnceExecutionPolicy(com.facebook.presto.execution.scheduler.AllAtOnceExecutionPolicy) ExecutionPolicy(com.facebook.presto.execution.scheduler.ExecutionPolicy) ClusterMemoryManager(com.facebook.presto.memory.ClusterMemoryManager) QueryManager(com.facebook.presto.execution.QueryManager) SqlQueryManager(com.facebook.presto.execution.SqlQueryManager) PartialResultQueryManager(com.facebook.presto.execution.PartialResultQueryManager) DispatchExecutor(com.facebook.presto.dispatcher.DispatchExecutor) SectionExecutionFactory(com.facebook.presto.execution.scheduler.SectionExecutionFactory) SqlQueryManager(com.facebook.presto.execution.SqlQueryManager)

Example 32 with Statement

use of com.facebook.presto.sql.tree.Statement in project presto by prestodb.

the class QueryRewriter method rewriteQuery.

public QueryObjectBundle rewriteQuery(@Language("SQL") String query, ClusterType clusterType) {
    checkState(prefixes.containsKey(clusterType), "Unsupported cluster type: %s", clusterType);
    Statement statement = sqlParser.createStatement(query, PARSING_OPTIONS);
    QualifiedName prefix = prefixes.get(clusterType);
    List<Property> properties = tableProperties.get(clusterType);
    if (statement instanceof CreateTableAsSelect) {
        CreateTableAsSelect createTableAsSelect = (CreateTableAsSelect) statement;
        QualifiedName temporaryTableName = generateTemporaryName(Optional.of(createTableAsSelect.getName()), prefix);
        return new QueryObjectBundle(temporaryTableName, ImmutableList.of(), new CreateTableAsSelect(temporaryTableName, createTableAsSelect.getQuery(), createTableAsSelect.isNotExists(), applyPropertyOverride(createTableAsSelect.getProperties(), properties), createTableAsSelect.isWithData(), createTableAsSelect.getColumnAliases(), createTableAsSelect.getComment()), ImmutableList.of(new DropTable(temporaryTableName, true)), clusterType);
    }
    if (statement instanceof Insert) {
        Insert insert = (Insert) statement;
        QualifiedName originalTableName = insert.getTarget();
        QualifiedName temporaryTableName = generateTemporaryName(Optional.of(originalTableName), prefix);
        return new QueryObjectBundle(temporaryTableName, ImmutableList.of(new CreateTable(temporaryTableName, ImmutableList.of(new LikeClause(originalTableName, Optional.of(INCLUDING))), false, properties, Optional.empty())), new Insert(temporaryTableName, insert.getColumns(), insert.getQuery()), ImmutableList.of(new DropTable(temporaryTableName, true)), clusterType);
    }
    if (statement instanceof Query) {
        QualifiedName temporaryTableName = generateTemporaryName(Optional.empty(), prefix);
        ResultSetMetaData metadata = getResultMetadata((Query) statement);
        List<Identifier> columnAliases = generateStorageColumnAliases(metadata);
        Query rewrite = rewriteNonStorableColumns((Query) statement, metadata);
        return new QueryObjectBundle(temporaryTableName, ImmutableList.of(), new CreateTableAsSelect(temporaryTableName, rewrite, false, properties, true, Optional.of(columnAliases), Optional.empty()), ImmutableList.of(new DropTable(temporaryTableName, true)), clusterType);
    }
    if (statement instanceof CreateView) {
        CreateView createView = (CreateView) statement;
        QualifiedName temporaryViewName = generateTemporaryName(Optional.empty(), prefix);
        ImmutableList.Builder<Statement> setupQueries = ImmutableList.builder();
        // Otherwise, do not pre-create temporary view.
        try {
            String createExistingViewQuery = getOnlyElement(prestoAction.execute(new ShowCreate(VIEW, createView.getName()), REWRITE, SHOW_CREATE_VIEW_CONVERTER).getResults());
            CreateView createExistingView = (CreateView) sqlParser.createStatement(createExistingViewQuery, PARSING_OPTIONS);
            setupQueries.add(new CreateView(temporaryViewName, createExistingView.getQuery(), false, createExistingView.getSecurity()));
        } catch (QueryException e) {
        // no-op
        }
        return new QueryObjectBundle(temporaryViewName, setupQueries.build(), new CreateView(temporaryViewName, createView.getQuery(), createView.isReplace(), createView.getSecurity()), ImmutableList.of(new DropView(temporaryViewName, true)), clusterType);
    }
    if (statement instanceof CreateTable) {
        CreateTable createTable = (CreateTable) statement;
        QualifiedName temporaryTableName = generateTemporaryName(Optional.empty(), prefix);
        return new QueryObjectBundle(temporaryTableName, ImmutableList.of(), new CreateTable(temporaryTableName, createTable.getElements(), createTable.isNotExists(), applyPropertyOverride(createTable.getProperties(), properties), createTable.getComment()), ImmutableList.of(new DropTable(temporaryTableName, true)), clusterType);
    }
    throw new IllegalStateException(format("Unsupported query type: %s", statement.getClass()));
}
Also used : LikeClause(com.facebook.presto.sql.tree.LikeClause) Query(com.facebook.presto.sql.tree.Query) Statement(com.facebook.presto.sql.tree.Statement) ImmutableList.toImmutableList(com.google.common.collect.ImmutableList.toImmutableList) ImmutableList(com.google.common.collect.ImmutableList) QualifiedName(com.facebook.presto.sql.tree.QualifiedName) DropView(com.facebook.presto.sql.tree.DropView) CreateTable(com.facebook.presto.sql.tree.CreateTable) DropTable(com.facebook.presto.sql.tree.DropTable) Insert(com.facebook.presto.sql.tree.Insert) CreateView(com.facebook.presto.sql.tree.CreateView) ResultSetMetaData(java.sql.ResultSetMetaData) QueryException(com.facebook.presto.verifier.framework.QueryException) Identifier(com.facebook.presto.sql.tree.Identifier) ShowCreate(com.facebook.presto.sql.tree.ShowCreate) CreateTableAsSelect(com.facebook.presto.sql.tree.CreateTableAsSelect) QueryObjectBundle(com.facebook.presto.verifier.framework.QueryObjectBundle) Property(com.facebook.presto.sql.tree.Property)

Example 33 with Statement

use of com.facebook.presto.sql.tree.Statement in project presto by prestodb.

the class ExplainVerification method getQueryRewrite.

@Override
protected QueryBundle getQueryRewrite(ClusterType clusterType) {
    Statement statement = sqlParser.createStatement(getSourceQuery().getQuery(clusterType), PARSING_OPTIONS);
    Explain explain = new Explain(statement, false, false, ImmutableList.of(new ExplainFormat(JSON)));
    return new QueryBundle(ImmutableList.of(), explain, ImmutableList.of(), clusterType);
}
Also used : ExplainFormat(com.facebook.presto.sql.tree.ExplainFormat) Statement(com.facebook.presto.sql.tree.Statement) Explain(com.facebook.presto.sql.tree.Explain)

Example 34 with Statement

use of com.facebook.presto.sql.tree.Statement in project presto by prestodb.

the class DdlVerification method verify.

@Override
@SuppressWarnings("unchecked")
protected DdlMatchResult verify(QueryObjectBundle control, QueryObjectBundle test, Optional<QueryResult<Void>> controlQueryResult, Optional<QueryResult<Void>> testQueryResult, ChecksumQueryContext controlChecksumQueryContext, ChecksumQueryContext testChecksumQueryContext) {
    Statement controlChecksumQuery = getChecksumQuery(control);
    Statement testChecksumQuery = getChecksumQuery(test);
    controlChecksumQueryContext.setChecksumQuery(formatSql(controlChecksumQuery));
    testChecksumQueryContext.setChecksumQuery(formatSql(testChecksumQuery));
    String controlChecksum = getOnlyElement(callAndConsume(() -> getHelperAction().execute(controlChecksumQuery, CONTROL_CHECKSUM, checksumConverter), stats -> stats.getQueryStats().map(QueryStats::getQueryId).ifPresent(controlChecksumQueryContext::setChecksumQueryId)).getResults());
    String testChecksum = getOnlyElement(callAndConsume(() -> getHelperAction().execute(testChecksumQuery, TEST_CHECKSUM, checksumConverter), stats -> stats.getQueryStats().map(QueryStats::getQueryId).ifPresent(testChecksumQueryContext::setChecksumQueryId)).getResults());
    S controlObject;
    S testObject;
    try {
        controlObject = (S) sqlParser.createStatement(controlChecksum, PARSING_OPTIONS);
    } catch (ParsingException e) {
        return new DdlMatchResult(CONTROL_NOT_PARSABLE, Optional.of(e), controlChecksum, testChecksum);
    }
    try {
        testObject = (S) sqlParser.createStatement(testChecksum, PARSING_OPTIONS);
    } catch (ParsingException e) {
        return new DdlMatchResult(TEST_NOT_PARSABLE, Optional.of(e), controlChecksum, testChecksum);
    }
    return new DdlMatchResult(match(controlObject, testObject, control, test) ? MATCH : MISMATCH, Optional.empty(), controlChecksum, testChecksum);
}
Also used : PARSING_OPTIONS(com.facebook.presto.verifier.framework.VerifierUtil.PARSING_OPTIONS) QueryStats(com.facebook.presto.jdbc.QueryStats) Statement(com.facebook.presto.sql.tree.Statement) ParsingException(com.facebook.presto.sql.parser.ParsingException)

Aggregations

Statement (com.facebook.presto.sql.tree.Statement)34 SqlQueryManager.unwrapExecuteStatement (com.facebook.presto.execution.SqlQueryManager.unwrapExecuteStatement)7 Test (org.testng.annotations.Test)7 Session (com.facebook.presto.Session)6 PrestoException (com.facebook.presto.spi.PrestoException)6 Execute (com.facebook.presto.sql.tree.Execute)5 Expression (com.facebook.presto.sql.tree.Expression)5 Analysis (com.facebook.presto.sql.analyzer.Analysis)4 Analyzer (com.facebook.presto.sql.analyzer.Analyzer)4 ParsingException (com.facebook.presto.sql.parser.ParsingException)4 Explain (com.facebook.presto.sql.tree.Explain)4 FeaturesConfig (com.facebook.presto.sql.analyzer.FeaturesConfig)3 QueryExplainer (com.facebook.presto.sql.analyzer.QueryExplainer)3 CreateView (com.facebook.presto.sql.tree.CreateView)3 TransactionManager (com.facebook.presto.transaction.TransactionManager)3 ImmutableList (com.google.common.collect.ImmutableList)3 QueryPreparer (com.facebook.presto.execution.QueryPreparer)2 SqlQueryExecutionFactory (com.facebook.presto.execution.SqlQueryExecution.SqlQueryExecutionFactory)2 QueryStats (com.facebook.presto.jdbc.QueryStats)2 QueryType (com.facebook.presto.spi.resourceGroups.QueryType)2