From 84e3c18b651d2c5cd95cd62999963ef78bc18ba9 Mon Sep 17 00:00:00 2001 From: Rebecca Schlussel Date: Thu, 7 Nov 2024 11:46:57 -0500 Subject: [PATCH] Move Window, Join, SemiJoin, SpatialJoin, MergeJoin to SPI Move the above plan nodes to the SPI so that they can be used by plugin PlanCheckers. --- .../planner/AbstractCostBasedPlanTest.java | 4 +- .../com/facebook/presto/common/Utils.java | 7 ++ .../TestHiveHistoryBasedStatsTracking.java | 6 +- .../hive/TestHiveIntegrationSmokeTest.java | 2 +- .../presto/hive/TestHiveLogicalPlanner.java | 6 +- ...estHiveMaterializedViewLogicalPlanner.java | 10 +- .../iceberg/TestIcebergLogicalPlanner.java | 18 ++-- .../cost/CostCalculatorUsingExchanges.java | 6 +- .../CostCalculatorWithEstimatedExchanges.java | 6 +- .../HistoryBasedPlanStatisticsTracker.java | 8 +- .../facebook/presto/cost/JoinStatsRule.java | 2 +- .../presto/cost/SemiJoinStatsRule.java | 2 +- .../SimpleFilterProjectSemiJoinStatsRule.java | 2 +- .../presto/cost/SpatialJoinStatsRule.java | 2 +- .../scheduler/AllAtOnceExecutionSchedule.java | 8 +- .../scheduler/PhasedExecutionSchedule.java | 8 +- .../execution/scheduler/TableWriteInfo.java | 4 +- .../presto/operator/SpatialJoinOperator.java | 6 +- .../facebook/presto/operator/TaskContext.java | 2 +- .../presto/operator/WindowOperator.java | 6 +- .../presto/operator/window/FrameInfo.java | 4 +- .../operator/window/WindowPartition.java | 16 +-- .../com/facebook/presto/sql/Optimizer.java | 4 +- .../sql/planner/CanonicalPlanGenerator.java | 6 +- .../planner/EffectivePredicateExtractor.java | 24 ++--- .../sql/planner/ExpressionExtractor.java | 2 +- .../sql/planner/GroupedExecutionTagger.java | 6 +- .../presto/sql/planner/InputExtractor.java | 6 +- .../sql/planner/LocalDynamicFilter.java | 2 +- .../sql/planner/LocalExecutionPlanner.java | 15 +-- .../presto/sql/planner/PlannerUtils.java | 24 ++--- .../presto/sql/planner/QueryPlanner.java | 2 +- .../presto/sql/planner/RelationPlanner.java | 2 +- .../sql/planner/SchedulingOrderVisitor.java | 6 +- .../sql/planner/SortExpressionExtractor.java | 7 ++ .../sql/planner/SplitSourceFactory.java | 10 +- .../ConfidenceBasedBroadcastUtil.java | 2 +- .../LogicalPropertiesProviderImpl.java | 4 +- .../rule/AddNotNullFiltersToJoinNode.java | 2 +- ...CrossJoinWithArrayContainsToInnerJoin.java | 2 +- ...ossJoinWithArrayNotContainsToAntiJoin.java | 2 +- .../CrossJoinWithOrFilterToInnerJoin.java | 2 +- .../rule/DetermineJoinDistributionType.java | 2 +- .../DetermineSemiJoinDistributionType.java | 6 +- .../iterative/rule/EliminateCrossJoins.java | 2 +- .../iterative/rule/ExtractSpatialJoins.java | 4 +- .../iterative/rule/GatherAndMergeWindows.java | 2 +- .../iterative/rule/JoinSwappingUtils.java | 2 +- .../rule/LeftJoinNullFilterToSemiJoin.java | 4 +- ...nWithArrayContainsToEquiJoinCondition.java | 2 +- .../iterative/rule/PruneCrossJoinColumns.java | 2 +- .../rule/PruneJoinChildrenColumns.java | 2 +- .../iterative/rule/PruneJoinColumns.java | 2 +- .../iterative/rule/PruneSemiJoinColumns.java | 10 +- .../PruneSemiJoinFilteringSourceColumns.java | 6 +- .../iterative/rule/PruneWindowColumns.java | 2 +- .../rule/PushAggregationThroughOuterJoin.java | 34 +++---- .../iterative/rule/PushDownDereferences.java | 6 +- ...rExpressionEvaluationThroughCrossJoin.java | 2 +- .../rule/PushLimitThroughOuterJoin.java | 2 +- .../rule/PushLimitThroughSemiJoin.java | 2 +- .../PushPartialAggregationThroughJoin.java | 12 +-- .../RemoveCrossJoinWithConstantInput.java | 2 +- ...oveRedundantCastToVarcharInJoinClause.java | 2 +- .../rule/RemoveUnsupportedDynamicFilters.java | 30 +++--- .../planner/iterative/rule/ReorderJoins.java | 2 +- .../rule/RowExpressionRewriteRuleSet.java | 6 +- .../rule/RuntimeReorderJoinSides.java | 2 +- .../TransformCorrelatedInPredicateToJoin.java | 2 +- .../TransformCorrelatedLateralJoinToJoin.java | 2 +- ...rmDistinctInnerJoinToLeftEarlyOutJoin.java | 16 +-- ...mDistinctInnerJoinToRightEarlyOutJoin.java | 14 +-- ...nPredicateSubqueryToDistinctInnerJoin.java | 4 +- ...rrelatedInPredicateSubqueryToSemiJoin.java | 2 +- .../TransformUncorrelatedLateralToJoin.java | 2 +- .../planner/optimizations/AddExchanges.java | 8 +- .../optimizations/AddLocalExchanges.java | 8 +- .../ApplyConnectorOptimization.java | 2 +- .../HashGenerationOptimizer.java | 10 +- ...tisticsEquivalentPlanMarkingOptimizer.java | 4 +- .../optimizations/IndexJoinOptimizer.java | 6 +- .../planner/optimizations/JoinPrefilter.java | 4 +- .../optimizations/KeyBasedSampler.java | 6 +- .../planner/optimizations/LimitPushDown.java | 2 +- .../optimizations/LogicalCteOptimizer.java | 4 +- .../MergeJoinForSortedInputOptimizer.java | 4 +- .../optimizations/PayloadJoinOptimizer.java | 3 +- .../optimizations/PlanNodeDecorrelator.java | 2 +- .../optimizations/PredicatePushDown.java | 48 ++++----- .../PrefilterForLimitingAggregation.java | 12 +-- .../optimizations/PropertyDerivations.java | 10 +- .../PruneUnreferencedOutputs.java | 8 +- .../optimizations/PushdownSubfields.java | 8 +- .../RandomizeNullKeyInOuterJoin.java | 2 +- ...nstantVariableReferencesWithConstants.java | 4 +- .../ReplicateSemiJoinInDelete.java | 4 +- .../ScalarAggregationToJoinRewriter.java | 2 +- .../sql/planner/optimizations/ShardJoins.java | 7 +- .../SimplifyPlanWithEmptyInput.java | 6 +- .../StreamPropertyDerivations.java | 10 +- .../UnaliasSymbolReferences.java | 8 +- .../optimizations/WindowFilterPushDown.java | 2 +- .../planner/optimizations/WindowNodeUtil.java | 22 ++--- .../optimizations/joins/JoinGraph.java | 2 +- .../sql/planner/plan/InternalPlanVisitor.java | 26 +---- .../presto/sql/planner/plan/Patterns.java | 4 + .../sql/planner/plan/TopNRowNumberNode.java | 2 +- .../sql/planner/planPrinter/PlanPrinter.java | 49 +++++----- .../CheckUnsupportedExternalFunctions.java | 2 +- .../CheckUnsupportedPrestissimoTypes.java | 2 +- .../planner/sanity/DynamicFiltersChecker.java | 14 +-- .../sql/planner/sanity/TypeValidator.java | 2 +- .../sanity/ValidateDependenciesChecker.java | 31 ++---- .../sanity/ValidateStreamingJoins.java | 2 +- .../facebook/presto/util/GraphvizPrinter.java | 20 ++-- .../presto/cost/TestCostCalculator.java | 2 +- .../TestPhasedExecutionSchedule.java | 2 +- .../TestSourcePartitionedScheduler.java | 2 +- .../geospatial/TestSpatialJoinOperator.java | 6 +- .../presto/operator/TestWindowOperator.java | 6 +- .../presto/sql/planner/TestCanonicalize.java | 2 +- .../presto/sql/planner/TestDynamicFilter.java | 2 +- .../TestEffectivePredicateExtractor.java | 6 +- .../sql/planner/TestLocalDynamicFilter.java | 2 +- .../sql/planner/TestLogicalPlanner.java | 28 +++--- .../sql/planner/TestPredicatePushdown.java | 2 +- .../sql/planner/TestQuantifiedComparison.java | 2 +- .../presto/sql/planner/TestTypeValidator.java | 8 +- .../sql/planner/TestWindowFrameRange.java | 26 ++--- .../assertions/DynamicFilterMatcher.java | 2 +- .../sql/planner/assertions/JoinMatcher.java | 2 +- .../planner/assertions/MergeJoinMatcher.java | 2 +- .../planner/assertions/PlanMatchPattern.java | 14 +-- .../planner/assertions/SemiJoinMatcher.java | 2 +- .../assertions/SpatialJoinMatcher.java | 4 +- .../assertions/SpecificationProvider.java | 36 +++---- .../assertions/TopNRowNumberMatcher.java | 2 +- .../assertions/WindowFrameProvider.java | 6 +- .../assertions/WindowFunctionMatcher.java | 2 +- .../sql/planner/assertions/WindowMatcher.java | 2 +- ...CrossJoinWithArrayContainsToInnerJoin.java | 30 +++--- ...ossJoinWithArrayNotContainsToAntiJoin.java | 2 +- ...TestDetermineSemiJoinDistributionType.java | 4 +- .../rule/TestEliminateCrossJoins.java | 2 +- .../iterative/rule/TestJoinNodeFlattener.java | 2 +- .../rule/TestLogicalPropertyPropagation.java | 2 +- .../rule/TestMergeAdjacentWindows.java | 14 +-- .../rule/TestPruneWindowColumns.java | 12 +-- ...stSwapAdjacentWindowsBySpecifications.java | 12 +-- ...rrelatedInPredicateSubqueryToSemiJoin.java | 2 +- .../iterative/rule/test/PlanBuilder.java | 6 +- .../optimizations/TestEliminateSorts.java | 2 +- .../optimizations/TestMergeWindows.java | 2 +- .../TestPruneUnreferencedOutputs.java | 8 +- .../TestRemoveUnsupportedDynamicFilters.java | 2 +- .../optimizations/TestReorderWindows.java | 2 +- .../sql/planner/optimizations/TestUnion.java | 2 +- .../TestWindowFilterPushDown.java | 2 +- .../sql/planner/plan/TestWindowNode.java | 7 +- .../presto/sql/query/TestSubqueries.java | 2 +- .../presto/util/TestGraphvizPrinter.java | 2 +- .../core/presto_protocol_core.cpp | 32 +++--- .../core/presto_protocol_core.yml | 30 +++--- .../presto_protocol/presto_protocol.yml | 16 +-- ...estPrestoNativeHistoryBasedStatistics.java | 8 +- .../planner/optimizers/PickJoinSides.java | 2 +- .../TestPrestoSparkHistoryBasedTracking.java | 2 +- .../planner/TestIterativePlanFragmenter.java | 2 +- .../planner/optimizers/TestPickJoinSides.java | 2 +- .../presto/spi}/plan/AbstractJoinNode.java | 6 +- .../facebook/presto/spi}/plan/JoinNode.java | 98 ++++++++++--------- .../presto/spi}/plan/MergeJoinNode.java | 26 ++--- .../facebook/presto/spi/plan/PlanVisitor.java | 25 +++++ .../presto/spi}/plan/SemiJoinNode.java | 26 ++--- .../presto/spi}/plan/SpatialJoinNode.java | 32 +++--- .../facebook/presto/spi}/plan/WindowNode.java | 54 +++++----- .../TestHistoryBasedStatsTracking.java | 6 +- ...stHistoryBasedRedisStatisticsTracking.java | 6 +- 178 files changed, 749 insertions(+), 742 deletions(-) rename {presto-main/src/main/java/com/facebook/presto/sql/planner => presto-spi/src/main/java/com/facebook/presto/spi}/plan/AbstractJoinNode.java (87%) rename {presto-main/src/main/java/com/facebook/presto/sql/planner => presto-spi/src/main/java/com/facebook/presto/spi}/plan/JoinNode.java (79%) rename {presto-main/src/main/java/com/facebook/presto/sql/planner => presto-spi/src/main/java/com/facebook/presto/spi}/plan/MergeJoinNode.java (86%) rename {presto-main/src/main/java/com/facebook/presto/sql/planner => presto-spi/src/main/java/com/facebook/presto/spi}/plan/SemiJoinNode.java (92%) rename {presto-main/src/main/java/com/facebook/presto/sql/planner => presto-spi/src/main/java/com/facebook/presto/spi}/plan/SpatialJoinNode.java (89%) rename {presto-main/src/main/java/com/facebook/presto/sql/planner => presto-spi/src/main/java/com/facebook/presto/spi}/plan/WindowNode.java (89%) diff --git a/presto-benchto-benchmarks/src/test/java/com/facebook/presto/sql/planner/AbstractCostBasedPlanTest.java b/presto-benchto-benchmarks/src/test/java/com/facebook/presto/sql/planner/AbstractCostBasedPlanTest.java index 4053359333107..8a9de21f29e7f 100644 --- a/presto-benchto-benchmarks/src/test/java/com/facebook/presto/sql/planner/AbstractCostBasedPlanTest.java +++ b/presto-benchto-benchmarks/src/test/java/com/facebook/presto/sql/planner/AbstractCostBasedPlanTest.java @@ -18,13 +18,13 @@ import com.facebook.presto.spi.ConnectorTableHandle; import com.facebook.presto.spi.plan.AggregationNode; import com.facebook.presto.spi.plan.JoinDistributionType; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.Partitioning; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.spi.plan.ValuesNode; import com.facebook.presto.sql.planner.assertions.BasePlanTest; import com.facebook.presto.sql.planner.plan.ExchangeNode; -import com.facebook.presto.sql.planner.plan.JoinNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; import com.facebook.presto.tpcds.TpcdsTableHandle; import com.facebook.presto.tpch.TpchTableHandle; import com.google.common.base.Strings; diff --git a/presto-common/src/main/java/com/facebook/presto/common/Utils.java b/presto-common/src/main/java/com/facebook/presto/common/Utils.java index 812c100effbfc..a2b88be85bfca 100644 --- a/presto-common/src/main/java/com/facebook/presto/common/Utils.java +++ b/presto-common/src/main/java/com/facebook/presto/common/Utils.java @@ -55,4 +55,11 @@ public static void checkArgument(boolean expression, String errorMessage) throw new IllegalArgumentException(errorMessage); } } + + public static void checkState(boolean test, String errorMessage) + { + if (!test) { + throw new IllegalStateException(errorMessage); + } + } } diff --git a/presto-hive/src/test/java/com/facebook/presto/hive/TestHiveHistoryBasedStatsTracking.java b/presto-hive/src/test/java/com/facebook/presto/hive/TestHiveHistoryBasedStatsTracking.java index b4b228abf303a..4bed0b39e8b36 100644 --- a/presto-hive/src/test/java/com/facebook/presto/hive/TestHiveHistoryBasedStatsTracking.java +++ b/presto-hive/src/test/java/com/facebook/presto/hive/TestHiveHistoryBasedStatsTracking.java @@ -18,6 +18,7 @@ import com.facebook.presto.spi.Plugin; import com.facebook.presto.spi.plan.AggregationNode; import com.facebook.presto.spi.plan.JoinDistributionType; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.OutputNode; import com.facebook.presto.spi.plan.ProjectNode; import com.facebook.presto.spi.plan.TableScanNode; @@ -25,7 +26,6 @@ import com.facebook.presto.sql.planner.Plan; import com.facebook.presto.sql.planner.assertions.PlanMatchPattern; import com.facebook.presto.sql.planner.optimizations.PlanNodeSearcher; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.TableWriterMergeNode; import com.facebook.presto.testing.InMemoryHistoryBasedPlanStatisticsProvider; import com.facebook.presto.testing.QueryRunner; @@ -263,8 +263,8 @@ public void testBroadcastJoin() // HBO Statistics executeAndTrackHistory("SELECT * FROM " + - "(SELECT * FROM test_orders where ds = '2020-09-01' and substr(CAST(custkey AS VARCHAR), 1, 3) <> '370') t1 JOIN " + - "(SELECT * FROM test_orders where ds = '2020-09-02' and substr(CAST(custkey AS VARCHAR), 1, 3) = '370') t2 ON t1.orderkey = t2.orderkey", + "(SELECT * FROM test_orders where ds = '2020-09-01' and substr(CAST(custkey AS VARCHAR), 1, 3) <> '370') t1 JOIN " + + "(SELECT * FROM test_orders where ds = '2020-09-02' and substr(CAST(custkey AS VARCHAR), 1, 3) = '370') t2 ON t1.orderkey = t2.orderkey", defaultSession()); plan = plan("SELECT * FROM " + diff --git a/presto-hive/src/test/java/com/facebook/presto/hive/TestHiveIntegrationSmokeTest.java b/presto-hive/src/test/java/com/facebook/presto/hive/TestHiveIntegrationSmokeTest.java index 27a1df19f6c16..4b10aa81a45ac 100644 --- a/presto-hive/src/test/java/com/facebook/presto/hive/TestHiveIntegrationSmokeTest.java +++ b/presto-hive/src/test/java/com/facebook/presto/hive/TestHiveIntegrationSmokeTest.java @@ -32,6 +32,7 @@ import com.facebook.presto.spi.TableHandle; import com.facebook.presto.spi.TableMetadata; import com.facebook.presto.spi.plan.MarkDistinctNode; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.security.Identity; import com.facebook.presto.spi.security.SelectedRole; import com.facebook.presto.sql.analyzer.FeaturesConfig.PartialMergePushdownStrategy; @@ -40,7 +41,6 @@ import com.facebook.presto.sql.planner.plan.RowNumberNode; import com.facebook.presto.sql.planner.plan.TableWriterMergeNode; import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; -import com.facebook.presto.sql.planner.plan.WindowNode; import com.facebook.presto.sql.planner.planPrinter.IOPlanPrinter.ColumnConstraint; import com.facebook.presto.sql.planner.planPrinter.IOPlanPrinter.FormattedDomain; import com.facebook.presto.sql.planner.planPrinter.IOPlanPrinter.FormattedMarker; diff --git a/presto-hive/src/test/java/com/facebook/presto/hive/TestHiveLogicalPlanner.java b/presto-hive/src/test/java/com/facebook/presto/hive/TestHiveLogicalPlanner.java index 3388022ded000..3761e8098049c 100644 --- a/presto-hive/src/test/java/com/facebook/presto/hive/TestHiveLogicalPlanner.java +++ b/presto-hive/src/test/java/com/facebook/presto/hive/TestHiveLogicalPlanner.java @@ -35,7 +35,9 @@ import com.facebook.presto.spi.ColumnHandle; import com.facebook.presto.spi.ConnectorTableLayoutHandle; import com.facebook.presto.spi.plan.AggregationNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.PlanNode; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.spi.relation.CallExpression; import com.facebook.presto.spi.relation.ConstantExpression; @@ -48,8 +50,6 @@ import com.facebook.presto.sql.planner.assertions.Matcher; import com.facebook.presto.sql.planner.assertions.PlanMatchPattern; import com.facebook.presto.sql.planner.assertions.SymbolAliases; -import com.facebook.presto.sql.planner.plan.JoinNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; import com.facebook.presto.sql.relational.FunctionResolution; import com.facebook.presto.sql.tree.FunctionCall; import com.facebook.presto.sql.tree.LongLiteral; @@ -1279,7 +1279,7 @@ public void testPushDownSubfieldsFromLambdas() "am array(map(int,row(a1 bigint, a2 double))), " + "aa array(array(row(a1 bigint, a2 double))), " + "z array(array(row(p bigint, e row(e1 bigint, e2 varchar)))))"); - // transform + // transform assertPushdownSubfields("SELECT TRANSFORM(y, x -> x.d.d1) FROM " + tableName, tableName, ImmutableMap.of("y", toSubfields("y[*].d.d1"))); diff --git a/presto-hive/src/test/java/com/facebook/presto/hive/TestHiveMaterializedViewLogicalPlanner.java b/presto-hive/src/test/java/com/facebook/presto/hive/TestHiveMaterializedViewLogicalPlanner.java index 957afcd0297b1..6b53172eff527 100644 --- a/presto-hive/src/test/java/com/facebook/presto/hive/TestHiveMaterializedViewLogicalPlanner.java +++ b/presto-hive/src/test/java/com/facebook/presto/hive/TestHiveMaterializedViewLogicalPlanner.java @@ -19,12 +19,12 @@ import com.facebook.presto.hive.metastore.MetastoreContext; import com.facebook.presto.hive.metastore.PrincipalPrivileges; import com.facebook.presto.hive.metastore.Table; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.ProjectNode; import com.facebook.presto.spi.security.Identity; import com.facebook.presto.sql.analyzer.FeaturesConfig; import com.facebook.presto.sql.planner.assertions.PlanMatchPattern; import com.facebook.presto.sql.planner.plan.ExchangeNode; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.testing.MaterializedResult; import com.facebook.presto.testing.QueryRunner; import com.facebook.presto.tests.AbstractTestQueryFramework; @@ -1802,10 +1802,10 @@ public void TestMaterializedViewForMultiWayJoin() view, table1, table2, table3)); assertQueryFails(format("CREATE MATERIALIZED VIEW should_fail WITH (partitioned_by = ARRAY['ds']) AS " + - "SELECT t1.orderkey AS view_orderkey, t2.totalprice AS view_totalprice, t3.orderstatus AS view_orderstatus, t1.ds " + - "FROM %s t1 INNER JOIN %s t2 ON (t1.ds=t2.ds AND t1.orderkey = t2.orderkey) INNER JOIN %s t3" + - " ON (t1.orderkey = t3.orderkey)", - table1, table2, table3), + "SELECT t1.orderkey AS view_orderkey, t2.totalprice AS view_totalprice, t3.orderstatus AS view_orderstatus, t1.ds " + + "FROM %s t1 INNER JOIN %s t2 ON (t1.ds=t2.ds AND t1.orderkey = t2.orderkey) INNER JOIN %s t3" + + " ON (t1.orderkey = t3.orderkey)", + table1, table2, table3), "Materialized view tpch.should_fail must have at least one partition column" + " that exists in orders_status_partitioned_join as well"); diff --git a/presto-iceberg/src/test/java/com/facebook/presto/iceberg/TestIcebergLogicalPlanner.java b/presto-iceberg/src/test/java/com/facebook/presto/iceberg/TestIcebergLogicalPlanner.java index af5aef01101fc..9617c527ad1c7 100644 --- a/presto-iceberg/src/test/java/com/facebook/presto/iceberg/TestIcebergLogicalPlanner.java +++ b/presto-iceberg/src/test/java/com/facebook/presto/iceberg/TestIcebergLogicalPlanner.java @@ -28,6 +28,7 @@ import com.facebook.presto.spi.ConnectorTableLayoutHandle; import com.facebook.presto.spi.plan.AggregationNode; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.spi.relation.CallExpression; @@ -40,7 +41,6 @@ import com.facebook.presto.sql.planner.assertions.Matcher; import com.facebook.presto.sql.planner.assertions.PlanMatchPattern; import com.facebook.presto.sql.planner.assertions.SymbolAliases; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.relational.FunctionResolution; import com.facebook.presto.sql.tree.LongLiteral; import com.facebook.presto.sql.tree.StringLiteral; @@ -1505,8 +1505,8 @@ public void testFilterPushdown() plan, "lineitem", withColumnDomains(ImmutableMap.of(new Subfield( - "partkey", - ImmutableList.of()), + "partkey", + ImmutableList.of()), singleValue(BIGINT, 10L))), TRUE_CONSTANT, ImmutableSet.of("partkey"))); @@ -1519,8 +1519,8 @@ public void testFilterPushdown() plan, "lineitem", withColumnDomains(ImmutableMap.of(new Subfield( - "partkey", - ImmutableList.of()), + "partkey", + ImmutableList.of()), singleValue(BIGINT, 10L))), TRUE_CONSTANT, ImmutableSet.of("partkey"))); @@ -1648,8 +1648,8 @@ public void testFilterPushdown() plan, "lineitem", withColumnDomains(ImmutableMap.of(new Subfield( - "partkey", - ImmutableList.of()), + "partkey", + ImmutableList.of()), singleValue(BIGINT, 10L))), remainingPredicate, ImmutableSet.of("partkey", "orderkey"))); @@ -1662,8 +1662,8 @@ public void testFilterPushdown() plan, "lineitem", withColumnDomains(ImmutableMap.of(new Subfield( - "partkey", - ImmutableList.of()), + "partkey", + ImmutableList.of()), singleValue(BIGINT, 10L))), remainingPredicate, ImmutableSet.of("partkey", "orderkey"))); diff --git a/presto-main/src/main/java/com/facebook/presto/cost/CostCalculatorUsingExchanges.java b/presto-main/src/main/java/com/facebook/presto/cost/CostCalculatorUsingExchanges.java index 8ad2e38b59193..18c84c8ad9dac 100644 --- a/presto-main/src/main/java/com/facebook/presto/cost/CostCalculatorUsingExchanges.java +++ b/presto-main/src/main/java/com/facebook/presto/cost/CostCalculatorUsingExchanges.java @@ -21,11 +21,14 @@ import com.facebook.presto.spi.plan.CteReferenceNode; import com.facebook.presto.spi.plan.FilterNode; import com.facebook.presto.spi.plan.JoinDistributionType; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.LimitNode; import com.facebook.presto.spi.plan.OutputNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.ProjectNode; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.spi.plan.SortNode; +import com.facebook.presto.spi.plan.SpatialJoinNode; import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.spi.plan.UnionNode; import com.facebook.presto.spi.plan.ValuesNode; @@ -35,12 +38,9 @@ import com.facebook.presto.sql.planner.plan.EnforceSingleRowNode; import com.facebook.presto.sql.planner.plan.ExchangeNode; import com.facebook.presto.sql.planner.plan.InternalPlanVisitor; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.RowNumberNode; import com.facebook.presto.sql.planner.plan.SampleNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; import com.facebook.presto.sql.planner.plan.SequenceNode; -import com.facebook.presto.sql.planner.plan.SpatialJoinNode; import com.google.common.collect.ImmutableList; import javax.annotation.concurrent.ThreadSafe; diff --git a/presto-main/src/main/java/com/facebook/presto/cost/CostCalculatorWithEstimatedExchanges.java b/presto-main/src/main/java/com/facebook/presto/cost/CostCalculatorWithEstimatedExchanges.java index e7cd654f5bd2c..16856a4755e18 100644 --- a/presto-main/src/main/java/com/facebook/presto/cost/CostCalculatorWithEstimatedExchanges.java +++ b/presto-main/src/main/java/com/facebook/presto/cost/CostCalculatorWithEstimatedExchanges.java @@ -18,16 +18,16 @@ import com.facebook.presto.spi.plan.AggregationNode; import com.facebook.presto.spi.plan.IntersectNode; import com.facebook.presto.spi.plan.JoinDistributionType; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.PlanNode; +import com.facebook.presto.spi.plan.SemiJoinNode; +import com.facebook.presto.spi.plan.SpatialJoinNode; import com.facebook.presto.spi.plan.UnionNode; import com.facebook.presto.sql.planner.iterative.GroupReference; import com.facebook.presto.sql.planner.iterative.rule.DetermineJoinDistributionType; import com.facebook.presto.sql.planner.iterative.rule.ReorderJoins; import com.facebook.presto.sql.planner.plan.InternalPlanVisitor; -import com.facebook.presto.sql.planner.plan.JoinNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; import com.facebook.presto.sql.planner.plan.SequenceNode; -import com.facebook.presto.sql.planner.plan.SpatialJoinNode; import javax.annotation.concurrent.ThreadSafe; import javax.inject.Inject; diff --git a/presto-main/src/main/java/com/facebook/presto/cost/HistoryBasedPlanStatisticsTracker.java b/presto-main/src/main/java/com/facebook/presto/cost/HistoryBasedPlanStatisticsTracker.java index aca925ea2fe27..20aeb989ffaf7 100644 --- a/presto-main/src/main/java/com/facebook/presto/cost/HistoryBasedPlanStatisticsTracker.java +++ b/presto-main/src/main/java/com/facebook/presto/cost/HistoryBasedPlanStatisticsTracker.java @@ -25,6 +25,7 @@ import com.facebook.presto.metadata.SessionPropertyManager; import com.facebook.presto.spi.QueryId; import com.facebook.presto.spi.plan.AggregationNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeId; import com.facebook.presto.spi.plan.PlanNodeWithHash; @@ -41,7 +42,6 @@ import com.facebook.presto.spi.statistics.TableWriterNodeStatistics; import com.facebook.presto.sql.planner.CanonicalPlan; import com.facebook.presto.sql.planner.PlanNodeCanonicalInfo; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.TableWriterNode; import com.facebook.presto.sql.planner.planPrinter.PlanNodeStats; import com.google.common.annotations.VisibleForTesting; @@ -324,9 +324,9 @@ private static void updatePartialAggregationStatistics( planStatisticsMap.put( finalAggregationStatsInfo.getPlanNodeWithHash(), new PlanStatisticsWithSourceInfo( - planStatisticsWithSourceInfo.getId(), - planStatisticsFinalAgg, - planStatisticsWithSourceInfo.getSourceInfo())); + planStatisticsWithSourceInfo.getId(), + planStatisticsFinalAgg, + planStatisticsWithSourceInfo.getSourceInfo())); } private PartialAggregationStatistics constructAggregationNodeStatistics(PlanNode planNode, Map planNodeStatsMap, double outputBytes, double outputPositions) diff --git a/presto-main/src/main/java/com/facebook/presto/cost/JoinStatsRule.java b/presto-main/src/main/java/com/facebook/presto/cost/JoinStatsRule.java index 6547c0b463e1c..77e0b487a79d1 100644 --- a/presto-main/src/main/java/com/facebook/presto/cost/JoinStatsRule.java +++ b/presto-main/src/main/java/com/facebook/presto/cost/JoinStatsRule.java @@ -16,11 +16,11 @@ import com.facebook.presto.Session; import com.facebook.presto.matching.Pattern; import com.facebook.presto.spi.plan.EquiJoinClause; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.relation.RowExpression; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.TypeProvider; import com.facebook.presto.sql.planner.iterative.Lookup; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.tree.ComparisonExpression; import com.facebook.presto.sql.tree.SymbolReference; import com.facebook.presto.util.MoreMath; diff --git a/presto-main/src/main/java/com/facebook/presto/cost/SemiJoinStatsRule.java b/presto-main/src/main/java/com/facebook/presto/cost/SemiJoinStatsRule.java index 93376612b5eeb..ae898fee7a068 100644 --- a/presto-main/src/main/java/com/facebook/presto/cost/SemiJoinStatsRule.java +++ b/presto-main/src/main/java/com/facebook/presto/cost/SemiJoinStatsRule.java @@ -16,9 +16,9 @@ import com.facebook.presto.Session; import com.facebook.presto.cost.ComposableStatsCalculator.Rule; import com.facebook.presto.matching.Pattern; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.sql.planner.TypeProvider; import com.facebook.presto.sql.planner.iterative.Lookup; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; import java.util.Optional; diff --git a/presto-main/src/main/java/com/facebook/presto/cost/SimpleFilterProjectSemiJoinStatsRule.java b/presto-main/src/main/java/com/facebook/presto/cost/SimpleFilterProjectSemiJoinStatsRule.java index ddcb584ef89a6..6337bd064db26 100644 --- a/presto-main/src/main/java/com/facebook/presto/cost/SimpleFilterProjectSemiJoinStatsRule.java +++ b/presto-main/src/main/java/com/facebook/presto/cost/SimpleFilterProjectSemiJoinStatsRule.java @@ -20,12 +20,12 @@ import com.facebook.presto.spi.plan.FilterNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.ProjectNode; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.spi.relation.CallExpression; import com.facebook.presto.spi.relation.RowExpression; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.TypeProvider; import com.facebook.presto.sql.planner.iterative.Lookup; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; import com.facebook.presto.sql.relational.FunctionResolution; import com.facebook.presto.sql.relational.RowExpressionDeterminismEvaluator; import com.google.common.collect.Iterables; diff --git a/presto-main/src/main/java/com/facebook/presto/cost/SpatialJoinStatsRule.java b/presto-main/src/main/java/com/facebook/presto/cost/SpatialJoinStatsRule.java index cff9abd3bc9c9..6c81b4283232c 100644 --- a/presto-main/src/main/java/com/facebook/presto/cost/SpatialJoinStatsRule.java +++ b/presto-main/src/main/java/com/facebook/presto/cost/SpatialJoinStatsRule.java @@ -15,9 +15,9 @@ import com.facebook.presto.Session; import com.facebook.presto.matching.Pattern; +import com.facebook.presto.spi.plan.SpatialJoinNode; import com.facebook.presto.sql.planner.TypeProvider; import com.facebook.presto.sql.planner.iterative.Lookup; -import com.facebook.presto.sql.planner.plan.SpatialJoinNode; import java.util.Optional; diff --git a/presto-main/src/main/java/com/facebook/presto/execution/scheduler/AllAtOnceExecutionSchedule.java b/presto-main/src/main/java/com/facebook/presto/execution/scheduler/AllAtOnceExecutionSchedule.java index 89c5267ecf9ba..98ece04e5ad83 100644 --- a/presto-main/src/main/java/com/facebook/presto/execution/scheduler/AllAtOnceExecutionSchedule.java +++ b/presto-main/src/main/java/com/facebook/presto/execution/scheduler/AllAtOnceExecutionSchedule.java @@ -15,18 +15,18 @@ import com.facebook.presto.execution.SqlStageExecution; import com.facebook.presto.execution.StageExecutionState; +import com.facebook.presto.spi.plan.JoinNode; +import com.facebook.presto.spi.plan.MergeJoinNode; import com.facebook.presto.spi.plan.PlanFragmentId; import com.facebook.presto.spi.plan.PlanNode; +import com.facebook.presto.spi.plan.SemiJoinNode; +import com.facebook.presto.spi.plan.SpatialJoinNode; import com.facebook.presto.spi.plan.UnionNode; import com.facebook.presto.sql.planner.PlanFragment; import com.facebook.presto.sql.planner.plan.ExchangeNode; import com.facebook.presto.sql.planner.plan.IndexJoinNode; import com.facebook.presto.sql.planner.plan.InternalPlanVisitor; -import com.facebook.presto.sql.planner.plan.JoinNode; -import com.facebook.presto.sql.planner.plan.MergeJoinNode; import com.facebook.presto.sql.planner.plan.RemoteSourceNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; -import com.facebook.presto.sql.planner.plan.SpatialJoinNode; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; diff --git a/presto-main/src/main/java/com/facebook/presto/execution/scheduler/PhasedExecutionSchedule.java b/presto-main/src/main/java/com/facebook/presto/execution/scheduler/PhasedExecutionSchedule.java index 458d951645366..05c8d2789a6d9 100644 --- a/presto-main/src/main/java/com/facebook/presto/execution/scheduler/PhasedExecutionSchedule.java +++ b/presto-main/src/main/java/com/facebook/presto/execution/scheduler/PhasedExecutionSchedule.java @@ -15,18 +15,18 @@ import com.facebook.presto.execution.SqlStageExecution; import com.facebook.presto.execution.StageExecutionState; +import com.facebook.presto.spi.plan.JoinNode; +import com.facebook.presto.spi.plan.MergeJoinNode; import com.facebook.presto.spi.plan.PlanFragmentId; import com.facebook.presto.spi.plan.PlanNode; +import com.facebook.presto.spi.plan.SemiJoinNode; +import com.facebook.presto.spi.plan.SpatialJoinNode; import com.facebook.presto.spi.plan.UnionNode; import com.facebook.presto.sql.planner.PlanFragment; import com.facebook.presto.sql.planner.plan.ExchangeNode; import com.facebook.presto.sql.planner.plan.IndexJoinNode; import com.facebook.presto.sql.planner.plan.InternalPlanVisitor; -import com.facebook.presto.sql.planner.plan.JoinNode; -import com.facebook.presto.sql.planner.plan.MergeJoinNode; import com.facebook.presto.sql.planner.plan.RemoteSourceNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; -import com.facebook.presto.sql.planner.plan.SpatialJoinNode; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; diff --git a/presto-main/src/main/java/com/facebook/presto/execution/scheduler/TableWriteInfo.java b/presto-main/src/main/java/com/facebook/presto/execution/scheduler/TableWriteInfo.java index 5dd75ce2bb46d..34f168ec5e32b 100644 --- a/presto-main/src/main/java/com/facebook/presto/execution/scheduler/TableWriteInfo.java +++ b/presto-main/src/main/java/com/facebook/presto/execution/scheduler/TableWriteInfo.java @@ -23,14 +23,14 @@ import com.facebook.presto.spi.Constraint; import com.facebook.presto.spi.TableHandle; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeId; import com.facebook.presto.spi.plan.ProjectNode; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.sql.planner.optimizations.PlanNodeSearcher; import com.facebook.presto.sql.planner.plan.DeleteNode; -import com.facebook.presto.sql.planner.plan.JoinNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; import com.facebook.presto.sql.planner.plan.StatisticsWriterNode; import com.facebook.presto.sql.planner.plan.TableFinishNode; import com.facebook.presto.sql.planner.plan.TableWriterNode; diff --git a/presto-main/src/main/java/com/facebook/presto/operator/SpatialJoinOperator.java b/presto-main/src/main/java/com/facebook/presto/operator/SpatialJoinOperator.java index 2604de406a50e..e8970ffd90105 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/SpatialJoinOperator.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/SpatialJoinOperator.java @@ -19,7 +19,7 @@ import com.facebook.presto.common.type.Type; import com.facebook.presto.memory.context.LocalMemoryContext; import com.facebook.presto.spi.plan.PlanNodeId; -import com.facebook.presto.sql.planner.plan.SpatialJoinNode; +import com.facebook.presto.spi.plan.SpatialJoinNode; import com.google.common.collect.ImmutableList; import com.google.common.util.concurrent.ListenableFuture; @@ -29,8 +29,8 @@ import java.util.Optional; import static com.facebook.airlift.concurrent.MoreFutures.getDone; -import static com.facebook.presto.sql.planner.plan.SpatialJoinNode.Type.INNER; -import static com.facebook.presto.sql.planner.plan.SpatialJoinNode.Type.LEFT; +import static com.facebook.presto.spi.plan.SpatialJoinNode.Type.INNER; +import static com.facebook.presto.spi.plan.SpatialJoinNode.Type.LEFT; import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkState; import static com.google.common.base.Verify.verify; diff --git a/presto-main/src/main/java/com/facebook/presto/operator/TaskContext.java b/presto-main/src/main/java/com/facebook/presto/operator/TaskContext.java index ac212ee4e5c4a..578bbfb3327d4 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/TaskContext.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/TaskContext.java @@ -29,9 +29,9 @@ import com.facebook.presto.memory.context.LocalMemoryContext; import com.facebook.presto.memory.context.MemoryTrackingContext; import com.facebook.presto.spi.plan.AggregationNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeId; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ImmutableList; diff --git a/presto-main/src/main/java/com/facebook/presto/operator/WindowOperator.java b/presto-main/src/main/java/com/facebook/presto/operator/WindowOperator.java index 688e919de1f34..6688002d64dfe 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/WindowOperator.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/WindowOperator.java @@ -51,9 +51,9 @@ import static com.facebook.presto.common.block.SortOrder.ASC_NULLS_LAST; import static com.facebook.presto.operator.SpillingUtils.checkSpillSucceeded; import static com.facebook.presto.operator.WorkProcessor.TransformationState.needsMoreData; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.BoundType.FOLLOWING; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.BoundType.PRECEDING; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.WindowType.RANGE; +import static com.facebook.presto.spi.plan.WindowNode.Frame.BoundType.FOLLOWING; +import static com.facebook.presto.spi.plan.WindowNode.Frame.BoundType.PRECEDING; +import static com.facebook.presto.spi.plan.WindowNode.Frame.WindowType.RANGE; import static com.facebook.presto.util.MergeSortedPages.mergeSortedPages; import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkPositionIndex; diff --git a/presto-main/src/main/java/com/facebook/presto/operator/window/FrameInfo.java b/presto-main/src/main/java/com/facebook/presto/operator/window/FrameInfo.java index 97a3eeb7f8883..f54af99ec41c9 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/window/FrameInfo.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/window/FrameInfo.java @@ -13,8 +13,8 @@ */ package com.facebook.presto.operator.window; -import com.facebook.presto.sql.planner.plan.WindowNode.Frame.BoundType; -import com.facebook.presto.sql.planner.plan.WindowNode.Frame.WindowType; +import com.facebook.presto.spi.plan.WindowNode.Frame.BoundType; +import com.facebook.presto.spi.plan.WindowNode.Frame.WindowType; import com.facebook.presto.sql.tree.SortItem.Ordering; import java.util.Objects; diff --git a/presto-main/src/main/java/com/facebook/presto/operator/window/WindowPartition.java b/presto-main/src/main/java/com/facebook/presto/operator/window/WindowPartition.java index faea5ed4aaae1..48c1b81703eaf 100644 --- a/presto-main/src/main/java/com/facebook/presto/operator/window/WindowPartition.java +++ b/presto-main/src/main/java/com/facebook/presto/operator/window/WindowPartition.java @@ -19,7 +19,7 @@ import com.facebook.presto.operator.PagesIndexComparator; import com.facebook.presto.operator.WindowOperator.FrameBoundKey; import com.facebook.presto.spi.function.WindowIndex; -import com.facebook.presto.sql.planner.plan.WindowNode.Frame.BoundType; +import com.facebook.presto.spi.plan.WindowNode.Frame.BoundType; import com.facebook.presto.sql.tree.SortItem.Ordering; import com.google.common.collect.ImmutableList; @@ -32,13 +32,13 @@ import static com.facebook.presto.operator.WindowOperator.FrameBoundKey.Type.END; import static com.facebook.presto.operator.WindowOperator.FrameBoundKey.Type.START; import static com.facebook.presto.spi.StandardErrorCode.INVALID_WINDOW_FRAME; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.BoundType.CURRENT_ROW; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.BoundType.FOLLOWING; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.BoundType.PRECEDING; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.BoundType.UNBOUNDED_FOLLOWING; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.BoundType.UNBOUNDED_PRECEDING; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.WindowType.GROUPS; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.WindowType.RANGE; +import static com.facebook.presto.spi.plan.WindowNode.Frame.BoundType.CURRENT_ROW; +import static com.facebook.presto.spi.plan.WindowNode.Frame.BoundType.FOLLOWING; +import static com.facebook.presto.spi.plan.WindowNode.Frame.BoundType.PRECEDING; +import static com.facebook.presto.spi.plan.WindowNode.Frame.BoundType.UNBOUNDED_FOLLOWING; +import static com.facebook.presto.spi.plan.WindowNode.Frame.BoundType.UNBOUNDED_PRECEDING; +import static com.facebook.presto.spi.plan.WindowNode.Frame.WindowType.GROUPS; +import static com.facebook.presto.spi.plan.WindowNode.Frame.WindowType.RANGE; import static com.facebook.presto.sql.tree.SortItem.Ordering.ASCENDING; import static com.facebook.presto.sql.tree.SortItem.Ordering.DESCENDING; import static com.facebook.presto.util.Failures.checkCondition; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/Optimizer.java b/presto-main/src/main/java/com/facebook/presto/sql/Optimizer.java index 4b5a7f5fdb6f7..7356b7d464acf 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/Optimizer.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/Optimizer.java @@ -27,8 +27,10 @@ import com.facebook.presto.spi.VariableAllocator; import com.facebook.presto.spi.WarningCollector; import com.facebook.presto.spi.eventlistener.PlanOptimizerInformation; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeIdAllocator; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.sql.planner.Plan; import com.facebook.presto.sql.planner.PlannerUtils; import com.facebook.presto.sql.planner.TypeProvider; @@ -36,8 +38,6 @@ import com.facebook.presto.sql.planner.optimizations.PlanNodeSearcher; import com.facebook.presto.sql.planner.optimizations.PlanOptimizer; import com.facebook.presto.sql.planner.optimizations.PlanOptimizerResult; -import com.facebook.presto.sql.planner.plan.JoinNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; import com.facebook.presto.sql.planner.sanity.PlanChecker; import java.util.List; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/CanonicalPlanGenerator.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/CanonicalPlanGenerator.java index 19f0c51486368..044b821f91c1d 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/CanonicalPlanGenerator.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/CanonicalPlanGenerator.java @@ -30,6 +30,7 @@ import com.facebook.presto.spi.plan.DistinctLimitNode; import com.facebook.presto.spi.plan.EquiJoinClause; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.JoinType; import com.facebook.presto.spi.plan.LimitNode; import com.facebook.presto.spi.plan.MarkDistinctNode; @@ -41,11 +42,13 @@ import com.facebook.presto.spi.plan.PlanNodeId; import com.facebook.presto.spi.plan.PlanNodeIdAllocator; import com.facebook.presto.spi.plan.ProjectNode; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.spi.plan.SortNode; import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.spi.plan.TopNNode; import com.facebook.presto.spi.plan.UnionNode; import com.facebook.presto.spi.plan.ValuesNode; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.relation.CallExpression; import com.facebook.presto.spi.relation.RowExpression; import com.facebook.presto.spi.relation.VariableReferenceExpression; @@ -54,15 +57,12 @@ import com.facebook.presto.sql.planner.plan.EnforceSingleRowNode; import com.facebook.presto.sql.planner.plan.GroupIdNode; import com.facebook.presto.sql.planner.plan.InternalPlanVisitor; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.RowNumberNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; import com.facebook.presto.sql.planner.plan.SequenceNode; import com.facebook.presto.sql.planner.plan.TableFinishNode; import com.facebook.presto.sql.planner.plan.TableWriterNode; import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; import com.facebook.presto.sql.planner.plan.UnnestNode; -import com.facebook.presto.sql.planner.plan.WindowNode; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonProcessingException; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/EffectivePredicateExtractor.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/EffectivePredicateExtractor.java index a59b64b09f856..26a7305c96521 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/EffectivePredicateExtractor.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/EffectivePredicateExtractor.java @@ -21,13 +21,17 @@ import com.facebook.presto.spi.plan.DistinctLimitNode; import com.facebook.presto.spi.plan.EquiJoinClause; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.LimitNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.ProjectNode; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.spi.plan.SortNode; +import com.facebook.presto.spi.plan.SpatialJoinNode; import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.spi.plan.TopNNode; import com.facebook.presto.spi.plan.UnionNode; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.relation.CallExpression; import com.facebook.presto.spi.relation.RowExpression; import com.facebook.presto.spi.relation.VariableReferenceExpression; @@ -35,10 +39,6 @@ import com.facebook.presto.sql.planner.plan.EnforceSingleRowNode; import com.facebook.presto.sql.planner.plan.ExchangeNode; import com.facebook.presto.sql.planner.plan.InternalPlanVisitor; -import com.facebook.presto.sql.planner.plan.JoinNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; -import com.facebook.presto.sql.planner.plan.SpatialJoinNode; -import com.facebook.presto.sql.planner.plan.WindowNode; import com.facebook.presto.sql.relational.FunctionResolution; import com.facebook.presto.sql.relational.RowExpressionDeterminismEvaluator; import com.facebook.presto.sql.relational.RowExpressionDomainTranslator; @@ -177,10 +177,10 @@ public RowExpression visitProject(ProjectNode node, Void context) .collect(toImmutableList()); return pullExpressionThroughVariables(logicalRowExpressions.combineConjuncts( - ImmutableList.builder() - .addAll(projectionEqualities) - .add(underlyingPredicate) - .build()), + ImmutableList.builder() + .addAll(projectionEqualities) + .add(underlyingPredicate) + .build()), node.getOutputVariables()); } @@ -359,10 +359,10 @@ private RowExpression deriveCommonPredicates(PlanNode node, Functionbuilder() - .addAll(equalities) - .add(underlyingPredicate) - .build()), + ImmutableList.builder() + .addAll(equalities) + .add(underlyingPredicate) + .build()), node.getOutputVariables())))); } diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/ExpressionExtractor.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/ExpressionExtractor.java index 0feaea4d2c63d..eb2c0cd120474 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/ExpressionExtractor.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/ExpressionExtractor.java @@ -15,6 +15,7 @@ import com.facebook.presto.spi.plan.AggregationNode; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.OrderingScheme; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.ProjectNode; @@ -23,7 +24,6 @@ import com.facebook.presto.sql.planner.iterative.GroupReference; import com.facebook.presto.sql.planner.iterative.Lookup; import com.facebook.presto.sql.planner.plan.ApplyNode; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.google.common.collect.ImmutableList; import java.util.List; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/GroupedExecutionTagger.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/GroupedExecutionTagger.java index c13c5b8b6e81c..59d4a233d6be7 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/GroupedExecutionTagger.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/GroupedExecutionTagger.java @@ -19,18 +19,18 @@ import com.facebook.presto.spi.PrestoException; import com.facebook.presto.spi.connector.ConnectorPartitionHandle; import com.facebook.presto.spi.plan.AggregationNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.JoinType; import com.facebook.presto.spi.plan.MarkDistinctNode; +import com.facebook.presto.spi.plan.MergeJoinNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeId; import com.facebook.presto.spi.plan.TableScanNode; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.sql.planner.plan.InternalPlanVisitor; -import com.facebook.presto.sql.planner.plan.JoinNode; -import com.facebook.presto.sql.planner.plan.MergeJoinNode; import com.facebook.presto.sql.planner.plan.RowNumberNode; import com.facebook.presto.sql.planner.plan.TableWriterNode; import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; -import com.facebook.presto.sql.planner.plan.WindowNode; import com.google.common.base.VerifyException; import com.google.common.collect.ImmutableList; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/InputExtractor.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/InputExtractor.java index 5ee8b49d4fe97..28f07cd5d0a3f 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/InputExtractor.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/InputExtractor.java @@ -23,14 +23,14 @@ import com.facebook.presto.spi.SchemaTableName; import com.facebook.presto.spi.TableHandle; import com.facebook.presto.spi.TableMetadata; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.PlanNode; +import com.facebook.presto.spi.plan.SemiJoinNode; +import com.facebook.presto.spi.plan.SpatialJoinNode; import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.spi.statistics.TableStatistics; import com.facebook.presto.sql.planner.plan.IndexSourceNode; import com.facebook.presto.sql.planner.plan.InternalPlanVisitor; -import com.facebook.presto.sql.planner.plan.JoinNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; -import com.facebook.presto.sql.planner.plan.SpatialJoinNode; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/LocalDynamicFilter.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/LocalDynamicFilter.java index 80e38d95a9656..6390014f964ad 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/LocalDynamicFilter.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/LocalDynamicFilter.java @@ -17,11 +17,11 @@ import com.facebook.presto.common.predicate.TupleDomain; import com.facebook.presto.expressions.DynamicFilters.DynamicFilterExtractResult; import com.facebook.presto.expressions.DynamicFilters.DynamicFilterPlaceholder; +import com.facebook.presto.spi.plan.AbstractJoinNode; import com.facebook.presto.spi.plan.FilterNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.optimizations.PlanNodeSearcher; -import com.facebook.presto.sql.planner.plan.AbstractJoinNode; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMultimap; import com.google.common.collect.Multimap; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/LocalExecutionPlanner.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/LocalExecutionPlanner.java index 3b511ecf2ac31..403875db37908 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/LocalExecutionPlanner.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/LocalExecutionPlanner.java @@ -140,6 +140,7 @@ import com.facebook.presto.spi.function.SqlFunctionId; import com.facebook.presto.spi.function.SqlInvokedFunction; import com.facebook.presto.spi.function.aggregation.LambdaProvider; +import com.facebook.presto.spi.plan.AbstractJoinNode; import com.facebook.presto.spi.plan.AggregationNode; import com.facebook.presto.spi.plan.AggregationNode.Aggregation; import com.facebook.presto.spi.plan.AggregationNode.Step; @@ -148,6 +149,7 @@ import com.facebook.presto.spi.plan.EquiJoinClause; import com.facebook.presto.spi.plan.FilterNode; import com.facebook.presto.spi.plan.JoinDistributionType; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.LimitNode; import com.facebook.presto.spi.plan.MarkDistinctNode; import com.facebook.presto.spi.plan.OrderingScheme; @@ -157,12 +159,16 @@ import com.facebook.presto.spi.plan.PlanNodeId; import com.facebook.presto.spi.plan.ProjectNode; import com.facebook.presto.spi.plan.ProjectNode.Locality; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.spi.plan.SortNode; +import com.facebook.presto.spi.plan.SpatialJoinNode; import com.facebook.presto.spi.plan.StageExecutionDescriptor; import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.spi.plan.TopNNode; import com.facebook.presto.spi.plan.UnionNode; import com.facebook.presto.spi.plan.ValuesNode; +import com.facebook.presto.spi.plan.WindowNode; +import com.facebook.presto.spi.plan.WindowNode.Frame; import com.facebook.presto.spi.relation.CallExpression; import com.facebook.presto.spi.relation.ConstantExpression; import com.facebook.presto.spi.relation.DeterminismEvaluator; @@ -185,7 +191,6 @@ import com.facebook.presto.sql.gen.OrderingCompiler; import com.facebook.presto.sql.gen.PageFunctionCompiler; import com.facebook.presto.sql.planner.optimizations.IndexJoinOptimizer; -import com.facebook.presto.sql.planner.plan.AbstractJoinNode; import com.facebook.presto.sql.planner.plan.AssignUniqueId; import com.facebook.presto.sql.planner.plan.DeleteNode; import com.facebook.presto.sql.planner.plan.EnforceSingleRowNode; @@ -195,13 +200,10 @@ import com.facebook.presto.sql.planner.plan.IndexJoinNode; import com.facebook.presto.sql.planner.plan.IndexSourceNode; import com.facebook.presto.sql.planner.plan.InternalPlanVisitor; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.MetadataDeleteNode; import com.facebook.presto.sql.planner.plan.RemoteSourceNode; import com.facebook.presto.sql.planner.plan.RowNumberNode; import com.facebook.presto.sql.planner.plan.SampleNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; -import com.facebook.presto.sql.planner.plan.SpatialJoinNode; import com.facebook.presto.sql.planner.plan.StatisticAggregationsDescriptor; import com.facebook.presto.sql.planner.plan.StatisticsWriterNode; import com.facebook.presto.sql.planner.plan.TableFinishNode; @@ -210,8 +212,6 @@ import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; import com.facebook.presto.sql.planner.plan.UnnestNode; import com.facebook.presto.sql.planner.plan.UpdateNode; -import com.facebook.presto.sql.planner.plan.WindowNode; -import com.facebook.presto.sql.planner.plan.WindowNode.Frame; import com.facebook.presto.sql.relational.FunctionResolution; import com.facebook.presto.sql.relational.VariableToChannelTranslator; import com.facebook.presto.sql.tree.SortItem; @@ -324,6 +324,7 @@ import static com.facebook.presto.sql.analyzer.ExpressionTreeUtils.createSymbolReference; import static com.facebook.presto.sql.gen.LambdaBytecodeGenerator.compileLambdaProvider; import static com.facebook.presto.sql.planner.RowExpressionInterpreter.rowExpressionInterpreter; +import static com.facebook.presto.sql.planner.SortExpressionExtractor.getSortExpressionContext; import static com.facebook.presto.sql.planner.plan.AssignmentUtils.identityAssignments; import static com.facebook.presto.sql.relational.Expressions.constant; import static com.facebook.presto.sql.tree.SortItem.Ordering.ASCENDING; @@ -2376,7 +2377,7 @@ private JoinBridgeManager createLookupSourceFact probeSource.getLayout(), buildSource.getLayout())); - Optional sortExpressionContext = node.getSortExpressionContext(metadata.getFunctionAndTypeManager()); + Optional sortExpressionContext = getSortExpressionContext(node, metadata.getFunctionAndTypeManager()); Optional sortChannel = sortExpressionContext .map(SortExpressionContext::getSortExpression) diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/PlannerUtils.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/PlannerUtils.java index 18cc39bff431e..bd21f4234b272 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/PlannerUtils.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/PlannerUtils.java @@ -31,6 +31,7 @@ import com.facebook.presto.spi.plan.AggregationNode; import com.facebook.presto.spi.plan.Assignments; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.Ordering; import com.facebook.presto.spi.plan.OrderingScheme; import com.facebook.presto.spi.plan.PlanNode; @@ -44,7 +45,6 @@ import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.analyzer.Field; import com.facebook.presto.sql.planner.iterative.Lookup; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.planPrinter.PlanPrinter; import com.facebook.presto.sql.relational.FunctionResolution; import com.facebook.presto.sql.tree.ComparisonExpression; @@ -277,16 +277,16 @@ public static PlanNode addAggregation(PlanNode planNode, FunctionAndTypeManager AggregationNode.GroupingSetDescriptor groupingSetDescriptor = new AggregationNode.GroupingSetDescriptor(groupingKeys, 1, ImmutableSet.of(1)); return projectExpressions( new AggregationNode( - Optional.empty(), - planNodeIdAllocator.getNextId(), - planNode, - aggregationMap, - groupingSetDescriptor, - ImmutableList.of(), - AggregationNode.Step.SINGLE, - Optional.empty(), - Optional.empty(), - Optional.empty()), + Optional.empty(), + planNodeIdAllocator.getNextId(), + planNode, + aggregationMap, + groupingSetDescriptor, + ImmutableList.of(), + AggregationNode.Step.SINGLE, + Optional.empty(), + Optional.empty(), + Optional.empty()), planNodeIdAllocator, variableAllocator, ImmutableList.of(resultVariable), @@ -455,7 +455,7 @@ public static boolean isProjectAboveTableScan(PlanNode node) public static boolean isScanFilterProject(PlanNode node) { return node instanceof TableScanNode || - node instanceof ProjectNode && isScanFilterProject(((ProjectNode) node).getSource()) || + node instanceof ProjectNode && isScanFilterProject(((ProjectNode) node).getSource()) || node instanceof FilterNode && isScanFilterProject(((FilterNode) node).getSource()); } diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/QueryPlanner.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/QueryPlanner.java index 908bd7b5c3bbb..bf257e0f7a59f 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/QueryPlanner.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/QueryPlanner.java @@ -40,6 +40,7 @@ import com.facebook.presto.spi.plan.SortNode; import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.spi.plan.ValuesNode; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.relation.CallExpression; import com.facebook.presto.spi.relation.RowExpression; import com.facebook.presto.spi.relation.VariableReferenceExpression; @@ -55,7 +56,6 @@ import com.facebook.presto.sql.planner.plan.GroupIdNode; import com.facebook.presto.sql.planner.plan.OffsetNode; import com.facebook.presto.sql.planner.plan.UpdateNode; -import com.facebook.presto.sql.planner.plan.WindowNode; import com.facebook.presto.sql.tree.Cast; import com.facebook.presto.sql.tree.ComparisonExpression; import com.facebook.presto.sql.tree.Delete; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/RelationPlanner.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/RelationPlanner.java index a88e3bc586aed..1fb46f320c931 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/RelationPlanner.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/RelationPlanner.java @@ -33,6 +33,7 @@ import com.facebook.presto.spi.plan.ExceptNode; import com.facebook.presto.spi.plan.FilterNode; import com.facebook.presto.spi.plan.IntersectNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeIdAllocator; import com.facebook.presto.spi.plan.ProjectNode; @@ -51,7 +52,6 @@ import com.facebook.presto.sql.parser.SqlParser; import com.facebook.presto.sql.planner.optimizations.JoinNodeUtils; import com.facebook.presto.sql.planner.optimizations.SampleNodeUtil; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.LateralJoinNode; import com.facebook.presto.sql.planner.plan.SampleNode; import com.facebook.presto.sql.planner.plan.UnnestNode; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/SchedulingOrderVisitor.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/SchedulingOrderVisitor.java index a3ae4a60152c2..d34e01cda201a 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/SchedulingOrderVisitor.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/SchedulingOrderVisitor.java @@ -14,14 +14,14 @@ package com.facebook.presto.sql.planner; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeId; +import com.facebook.presto.spi.plan.SemiJoinNode; +import com.facebook.presto.spi.plan.SpatialJoinNode; import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.sql.planner.plan.IndexJoinNode; import com.facebook.presto.sql.planner.plan.InternalPlanVisitor; -import com.facebook.presto.sql.planner.plan.JoinNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; -import com.facebook.presto.sql.planner.plan.SpatialJoinNode; import com.google.common.collect.ImmutableList; import java.util.List; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/SortExpressionExtractor.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/SortExpressionExtractor.java index ba5ed697733e6..c5799c12c44d2 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/SortExpressionExtractor.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/SortExpressionExtractor.java @@ -17,6 +17,7 @@ import com.facebook.presto.expressions.LogicalRowExpressions; import com.facebook.presto.metadata.FunctionAndTypeManager; import com.facebook.presto.spi.function.FunctionMetadata; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.relation.CallExpression; import com.facebook.presto.spi.relation.ConstantExpression; import com.facebook.presto.spi.relation.DeterminismEvaluator; @@ -65,6 +66,12 @@ by sorting position links according to the result of f(...) function. */ private SortExpressionExtractor() {} + public static Optional getSortExpressionContext(JoinNode joinNode, FunctionAndTypeManager functionAndTypeManager) + { + return joinNode.getFilter() + .flatMap(filter -> SortExpressionExtractor.extractSortExpression(ImmutableSet.copyOf(joinNode.getRight().getOutputVariables()), filter, functionAndTypeManager)); + } + public static Optional extractSortExpression(Set buildVariables, RowExpression filter, FunctionAndTypeManager functionAndTypeManager) { List filterConjuncts = LogicalRowExpressions.extractConjuncts(filter); diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/SplitSourceFactory.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/SplitSourceFactory.java index f1a33190ac109..bdf96975c74ef 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/SplitSourceFactory.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/SplitSourceFactory.java @@ -23,18 +23,23 @@ import com.facebook.presto.spi.plan.AggregationNode; import com.facebook.presto.spi.plan.DistinctLimitNode; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.LimitNode; import com.facebook.presto.spi.plan.MarkDistinctNode; +import com.facebook.presto.spi.plan.MergeJoinNode; import com.facebook.presto.spi.plan.OutputNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeId; import com.facebook.presto.spi.plan.ProjectNode; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.spi.plan.SortNode; +import com.facebook.presto.spi.plan.SpatialJoinNode; import com.facebook.presto.spi.plan.StageExecutionDescriptor; import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.spi.plan.TopNNode; import com.facebook.presto.spi.plan.UnionNode; import com.facebook.presto.spi.plan.ValuesNode; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.split.SampledSplitSource; import com.facebook.presto.split.SplitSource; import com.facebook.presto.split.SplitSourceProvider; @@ -46,21 +51,16 @@ import com.facebook.presto.sql.planner.plan.GroupIdNode; import com.facebook.presto.sql.planner.plan.IndexJoinNode; import com.facebook.presto.sql.planner.plan.InternalPlanVisitor; -import com.facebook.presto.sql.planner.plan.JoinNode; -import com.facebook.presto.sql.planner.plan.MergeJoinNode; import com.facebook.presto.sql.planner.plan.MetadataDeleteNode; import com.facebook.presto.sql.planner.plan.RemoteSourceNode; import com.facebook.presto.sql.planner.plan.RowNumberNode; import com.facebook.presto.sql.planner.plan.SampleNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; -import com.facebook.presto.sql.planner.plan.SpatialJoinNode; import com.facebook.presto.sql.planner.plan.StatisticsWriterNode; import com.facebook.presto.sql.planner.plan.TableFinishNode; import com.facebook.presto.sql.planner.plan.TableWriterMergeNode; import com.facebook.presto.sql.planner.plan.TableWriterNode; import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; import com.facebook.presto.sql.planner.plan.UnnestNode; -import com.facebook.presto.sql.planner.plan.WindowNode; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/ConfidenceBasedBroadcastUtil.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/ConfidenceBasedBroadcastUtil.java index 4169b193c20ad..75fa4dbc5ae03 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/ConfidenceBasedBroadcastUtil.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/ConfidenceBasedBroadcastUtil.java @@ -13,8 +13,8 @@ */ package com.facebook.presto.sql.planner.iterative; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.statistics.SourceInfo.ConfidenceLevel; -import com.facebook.presto.sql.planner.plan.JoinNode; import java.util.Optional; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/properties/LogicalPropertiesProviderImpl.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/properties/LogicalPropertiesProviderImpl.java index 7c53bdba43c90..a3a2f20e3bc32 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/properties/LogicalPropertiesProviderImpl.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/properties/LogicalPropertiesProviderImpl.java @@ -19,11 +19,13 @@ import com.facebook.presto.spi.plan.AggregationNode; import com.facebook.presto.spi.plan.DistinctLimitNode; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.LimitNode; import com.facebook.presto.spi.plan.LogicalProperties; import com.facebook.presto.spi.plan.LogicalPropertiesProvider; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.ProjectNode; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.spi.plan.SortNode; import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.spi.plan.TopNNode; @@ -31,8 +33,6 @@ import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.iterative.GroupReference; import com.facebook.presto.sql.planner.plan.AssignUniqueId; -import com.facebook.presto.sql.planner.plan.JoinNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; import com.facebook.presto.sql.relational.FunctionResolution; import java.util.ArrayList; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/AddNotNullFiltersToJoinNode.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/AddNotNullFiltersToJoinNode.java index 71d1f25852663..5789e5e571e04 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/AddNotNullFiltersToJoinNode.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/AddNotNullFiltersToJoinNode.java @@ -22,6 +22,7 @@ import com.facebook.presto.spi.function.FunctionHandle; import com.facebook.presto.spi.function.FunctionMetadata; import com.facebook.presto.spi.plan.EquiJoinClause; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.relation.CallExpression; import com.facebook.presto.spi.relation.IntermediateFormExpression; import com.facebook.presto.spi.relation.RowExpression; @@ -29,7 +30,6 @@ import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.analyzer.FeaturesConfig.JoinNotNullInferenceStrategy; import com.facebook.presto.sql.planner.iterative.Rule; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.relational.FunctionResolution; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableSet; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/CrossJoinWithArrayContainsToInnerJoin.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/CrossJoinWithArrayContainsToInnerJoin.java index 4ee94f2f6fb35..5234be3cc6e40 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/CrossJoinWithArrayContainsToInnerJoin.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/CrossJoinWithArrayContainsToInnerJoin.java @@ -21,6 +21,7 @@ import com.facebook.presto.metadata.FunctionAndTypeManager; import com.facebook.presto.spi.plan.EquiJoinClause; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.JoinType; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.relation.CallExpression; @@ -28,7 +29,6 @@ import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.PlannerUtils; import com.facebook.presto.sql.planner.iterative.Rule; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.UnnestNode; import com.facebook.presto.sql.relational.FunctionResolution; import com.google.common.collect.ImmutableList; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/CrossJoinWithArrayNotContainsToAntiJoin.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/CrossJoinWithArrayNotContainsToAntiJoin.java index 01e5d51f49cc4..f4060837c4c2d 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/CrossJoinWithArrayNotContainsToAntiJoin.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/CrossJoinWithArrayNotContainsToAntiJoin.java @@ -23,6 +23,7 @@ import com.facebook.presto.metadata.Metadata; import com.facebook.presto.spi.plan.EquiJoinClause; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.JoinType; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.ProjectNode; @@ -32,7 +33,6 @@ import com.facebook.presto.sql.planner.PlannerUtils; import com.facebook.presto.sql.planner.iterative.Rule; import com.facebook.presto.sql.planner.plan.EnforceSingleRowNode; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.UnnestNode; import com.facebook.presto.sql.relational.FunctionResolution; import com.google.common.collect.ImmutableList; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/CrossJoinWithOrFilterToInnerJoin.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/CrossJoinWithOrFilterToInnerJoin.java index a219a986507de..220347d826a27 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/CrossJoinWithOrFilterToInnerJoin.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/CrossJoinWithOrFilterToInnerJoin.java @@ -25,6 +25,7 @@ import com.facebook.presto.spi.plan.Assignments; import com.facebook.presto.spi.plan.EquiJoinClause; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.JoinType; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeIdAllocator; @@ -35,7 +36,6 @@ import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.PlannerUtils; import com.facebook.presto.sql.planner.iterative.Rule; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.UnnestNode; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/DetermineJoinDistributionType.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/DetermineJoinDistributionType.java index e852558a7a672..683755bb5da2e 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/DetermineJoinDistributionType.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/DetermineJoinDistributionType.java @@ -23,6 +23,7 @@ import com.facebook.presto.matching.Captures; import com.facebook.presto.matching.Pattern; import com.facebook.presto.spi.plan.CteConsumerNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.spi.plan.ValuesNode; @@ -31,7 +32,6 @@ import com.facebook.presto.sql.planner.iterative.Lookup; import com.facebook.presto.sql.planner.iterative.Rule; import com.facebook.presto.sql.planner.optimizations.PlanNodeSearcher; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.RemoteSourceNode; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableList; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/DetermineSemiJoinDistributionType.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/DetermineSemiJoinDistributionType.java index 085b80129095b..34cf06d392872 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/DetermineSemiJoinDistributionType.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/DetermineSemiJoinDistributionType.java @@ -36,10 +36,10 @@ import com.facebook.presto.matching.Captures; import com.facebook.presto.matching.Pattern; import com.facebook.presto.spi.plan.PlanNode; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.spi.statistics.HistoryBasedSourceInfo; import com.facebook.presto.sql.analyzer.FeaturesConfig.JoinDistributionType; import com.facebook.presto.sql.planner.iterative.Rule; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; import com.google.common.collect.Ordering; import io.airlift.units.DataSize; @@ -51,10 +51,10 @@ import static com.facebook.presto.SystemSessionProperties.isSizeBasedJoinDistributionTypeEnabled; import static com.facebook.presto.SystemSessionProperties.isUseBroadcastJoinWhenBuildSizeSmallProbeSizeUnknownEnabled; import static com.facebook.presto.cost.CostCalculatorWithEstimatedExchanges.calculateJoinCostWithoutOutput; +import static com.facebook.presto.spi.plan.SemiJoinNode.DistributionType.PARTITIONED; +import static com.facebook.presto.spi.plan.SemiJoinNode.DistributionType.REPLICATED; import static com.facebook.presto.sql.planner.iterative.rule.DetermineJoinDistributionType.getSourceTablesSizeInBytes; import static com.facebook.presto.sql.planner.plan.Patterns.semiJoin; -import static com.facebook.presto.sql.planner.plan.SemiJoinNode.DistributionType.PARTITIONED; -import static com.facebook.presto.sql.planner.plan.SemiJoinNode.DistributionType.REPLICATED; import static com.google.common.collect.ImmutableList.toImmutableList; import static com.google.common.collect.Iterables.getOnlyElement; import static java.util.Objects.requireNonNull; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/EliminateCrossJoins.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/EliminateCrossJoins.java index f94c42c2d5665..9aef6da40338e 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/EliminateCrossJoins.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/EliminateCrossJoins.java @@ -19,6 +19,7 @@ import com.facebook.presto.spi.plan.Assignments; import com.facebook.presto.spi.plan.EquiJoinClause; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.JoinType; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeId; @@ -29,7 +30,6 @@ import com.facebook.presto.sql.analyzer.FeaturesConfig.JoinReorderingStrategy; import com.facebook.presto.sql.planner.iterative.Rule; import com.facebook.presto.sql.planner.optimizations.joins.JoinGraph; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/ExtractSpatialJoins.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/ExtractSpatialJoins.java index acd3c2a6ab576..acf09957821b5 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/ExtractSpatialJoins.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/ExtractSpatialJoins.java @@ -41,9 +41,11 @@ import com.facebook.presto.spi.function.FunctionMetadata; import com.facebook.presto.spi.plan.Assignments; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeId; import com.facebook.presto.spi.plan.ProjectNode; +import com.facebook.presto.spi.plan.SpatialJoinNode; import com.facebook.presto.spi.relation.CallExpression; import com.facebook.presto.spi.relation.RowExpression; import com.facebook.presto.spi.relation.VariableReferenceExpression; @@ -54,8 +56,6 @@ import com.facebook.presto.sql.planner.iterative.Rule; import com.facebook.presto.sql.planner.iterative.Rule.Context; import com.facebook.presto.sql.planner.iterative.Rule.Result; -import com.facebook.presto.sql.planner.plan.JoinNode; -import com.facebook.presto.sql.planner.plan.SpatialJoinNode; import com.facebook.presto.sql.planner.plan.UnnestNode; import com.facebook.presto.sql.relational.Expressions; import com.google.common.annotations.VisibleForTesting; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/GatherAndMergeWindows.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/GatherAndMergeWindows.java index cf24222e7b4e5..1163a6ef3dd50 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/GatherAndMergeWindows.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/GatherAndMergeWindows.java @@ -21,11 +21,11 @@ import com.facebook.presto.spi.plan.OrderingScheme; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.ProjectNode; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.relation.RowExpression; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.VariablesExtractor; import com.facebook.presto.sql.planner.iterative.Rule; -import com.facebook.presto.sql.planner.plan.WindowNode; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/JoinSwappingUtils.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/JoinSwappingUtils.java index 1b4d7394006a2..670ce15d9a344 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/JoinSwappingUtils.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/JoinSwappingUtils.java @@ -18,6 +18,7 @@ import com.facebook.presto.cost.StatsProvider; import com.facebook.presto.metadata.Metadata; import com.facebook.presto.spi.plan.EquiJoinClause; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeIdAllocator; import com.facebook.presto.spi.relation.VariableReferenceExpression; @@ -27,7 +28,6 @@ import com.facebook.presto.sql.planner.optimizations.StreamPreferredProperties; import com.facebook.presto.sql.planner.optimizations.StreamPropertyDerivations; import com.facebook.presto.sql.planner.plan.ExchangeNode; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.UnnestNode; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableList; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/LeftJoinNullFilterToSemiJoin.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/LeftJoinNullFilterToSemiJoin.java index 31aa5cbea0bff..b252f7c8845fd 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/LeftJoinNullFilterToSemiJoin.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/LeftJoinNullFilterToSemiJoin.java @@ -20,15 +20,15 @@ import com.facebook.presto.metadata.FunctionAndTypeManager; import com.facebook.presto.spi.plan.Assignments; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.JoinType; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.ProjectNode; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.spi.relation.RowExpression; import com.facebook.presto.spi.relation.SpecialFormExpression; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.iterative.Rule; -import com.facebook.presto.sql.planner.plan.JoinNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; import com.google.common.collect.ImmutableMap; import java.util.List; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/LeftJoinWithArrayContainsToEquiJoinCondition.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/LeftJoinWithArrayContainsToEquiJoinCondition.java index 8b90cbfa0ec68..9cc6a3674a771 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/LeftJoinWithArrayContainsToEquiJoinCondition.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/LeftJoinWithArrayContainsToEquiJoinCondition.java @@ -19,6 +19,7 @@ import com.facebook.presto.matching.Pattern; import com.facebook.presto.metadata.FunctionAndTypeManager; import com.facebook.presto.spi.plan.EquiJoinClause; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.JoinType; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.relation.CallExpression; @@ -27,7 +28,6 @@ import com.facebook.presto.sql.analyzer.FeaturesConfig.LeftJoinArrayContainsToInnerJoinStrategy; import com.facebook.presto.sql.planner.PlannerUtils; import com.facebook.presto.sql.planner.iterative.Rule; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.UnnestNode; import com.facebook.presto.sql.relational.FunctionResolution; import com.facebook.presto.sql.relational.RowExpressionDeterminismEvaluator; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PruneCrossJoinColumns.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PruneCrossJoinColumns.java index d7adaa4a53499..27241a06f11a1 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PruneCrossJoinColumns.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PruneCrossJoinColumns.java @@ -14,10 +14,10 @@ package com.facebook.presto.sql.planner.iterative.rule; import com.facebook.presto.spi.VariableAllocator; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeIdAllocator; import com.facebook.presto.spi.relation.VariableReferenceExpression; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.google.common.collect.ImmutableList; import java.util.Optional; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PruneJoinChildrenColumns.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PruneJoinChildrenColumns.java index ee4b5928ff9d5..d869f38bea8e9 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PruneJoinChildrenColumns.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PruneJoinChildrenColumns.java @@ -16,9 +16,9 @@ import com.facebook.presto.matching.Captures; import com.facebook.presto.matching.Pattern; import com.facebook.presto.spi.plan.EquiJoinClause; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.iterative.Rule; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.google.common.collect.ImmutableSet; import java.util.Set; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PruneJoinColumns.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PruneJoinColumns.java index 7e37fe5b96c00..b5a77e4868199 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PruneJoinColumns.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PruneJoinColumns.java @@ -14,10 +14,10 @@ package com.facebook.presto.sql.planner.iterative.rule; import com.facebook.presto.spi.VariableAllocator; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeIdAllocator; import com.facebook.presto.spi.relation.VariableReferenceExpression; -import com.facebook.presto.sql.planner.plan.JoinNode; import java.util.Optional; import java.util.Set; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PruneSemiJoinColumns.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PruneSemiJoinColumns.java index 5c3f9000a09d0..6b32a40579e15 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PruneSemiJoinColumns.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PruneSemiJoinColumns.java @@ -16,8 +16,8 @@ import com.facebook.presto.spi.VariableAllocator; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeIdAllocator; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.spi.relation.VariableReferenceExpression; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; import com.google.common.collect.ImmutableList; import com.google.common.collect.Streams; @@ -45,10 +45,10 @@ protected Optional pushDownProjectOff(PlanNodeIdAllocator idAllocator, } Set requiredSourceInputs = Streams.concat( - referencedOutputs.stream() - .filter(variable -> !variable.equals(semiJoinNode.getSemiJoinOutput())), - Stream.of(semiJoinNode.getSourceJoinVariable()), - semiJoinNode.getSourceHashVariable().map(Stream::of).orElse(Stream.empty())) + referencedOutputs.stream() + .filter(variable -> !variable.equals(semiJoinNode.getSemiJoinOutput())), + Stream.of(semiJoinNode.getSourceJoinVariable()), + semiJoinNode.getSourceHashVariable().map(Stream::of).orElse(Stream.empty())) .collect(toImmutableSet()); return restrictOutputs(idAllocator, semiJoinNode.getSource(), requiredSourceInputs) diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PruneSemiJoinFilteringSourceColumns.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PruneSemiJoinFilteringSourceColumns.java index 8bf59de11b132..eb09aa06359f3 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PruneSemiJoinFilteringSourceColumns.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PruneSemiJoinFilteringSourceColumns.java @@ -15,9 +15,9 @@ import com.facebook.presto.matching.Captures; import com.facebook.presto.matching.Pattern; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.iterative.Rule; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; import com.google.common.collect.ImmutableList; import com.google.common.collect.Streams; @@ -47,8 +47,8 @@ public Pattern getPattern() public Result apply(SemiJoinNode semiJoinNode, Captures captures, Context context) { Set requiredFilteringSourceInputs = Streams.concat( - Stream.of(semiJoinNode.getFilteringSourceJoinVariable()), - semiJoinNode.getFilteringSourceHashVariable().map(Stream::of).orElse(Stream.empty())) + Stream.of(semiJoinNode.getFilteringSourceJoinVariable()), + semiJoinNode.getFilteringSourceHashVariable().map(Stream::of).orElse(Stream.empty())) .collect(toImmutableSet()); return restrictOutputs(context.getIdAllocator(), semiJoinNode.getFilteringSource(), requiredFilteringSourceInputs) diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PruneWindowColumns.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PruneWindowColumns.java index 8c09b3658888f..a3c3b9e8aab77 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PruneWindowColumns.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PruneWindowColumns.java @@ -16,9 +16,9 @@ import com.facebook.presto.spi.VariableAllocator; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeIdAllocator; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.optimizations.WindowNodeUtil; -import com.facebook.presto.sql.planner.plan.WindowNode; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Maps; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PushAggregationThroughOuterJoin.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PushAggregationThroughOuterJoin.java index b0d204395cae1..e354fe6bcf0c2 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PushAggregationThroughOuterJoin.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PushAggregationThroughOuterJoin.java @@ -25,6 +25,7 @@ import com.facebook.presto.spi.plan.AggregationNode; import com.facebook.presto.spi.plan.Assignments; import com.facebook.presto.spi.plan.EquiJoinClause; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.JoinType; import com.facebook.presto.spi.plan.Ordering; import com.facebook.presto.spi.plan.OrderingScheme; @@ -37,7 +38,6 @@ import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.iterative.Lookup; import com.facebook.presto.sql.planner.iterative.Rule; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.relational.FunctionResolution; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; @@ -280,23 +280,23 @@ else if (!functionAndTypeManager.getFunctionMetadata(functionHandle).isCalledOnN PlanNode finalJoinNode = outerJoin; if (literalMap.size() < aggregationNode.getAggregations().size()) { - // Do a cross join with the aggregation over null + // Do a cross join with the aggregation over null finalJoinNode = new JoinNode( - outerJoin.getSourceLocation(), - idAllocator.getNextId(), - JoinType.INNER, - outerJoin, - aggregationOverNull, - ImmutableList.of(), - ImmutableList.builder() - .addAll(outerJoin.getOutputVariables()) - .addAll(aggregationOverNull.getOutputVariables()) - .build(), - Optional.empty(), - Optional.empty(), - Optional.empty(), - Optional.empty(), - ImmutableMap.of()); + outerJoin.getSourceLocation(), + idAllocator.getNextId(), + JoinType.INNER, + outerJoin, + aggregationOverNull, + ImmutableList.of(), + ImmutableList.builder() + .addAll(outerJoin.getOutputVariables()) + .addAll(aggregationOverNull.getOutputVariables()) + .build(), + Optional.empty(), + Optional.empty(), + Optional.empty(), + Optional.empty(), + ImmutableMap.of()); } // Add coalesce expressions for all aggregation functions diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PushDownDereferences.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PushDownDereferences.java index d3341f12673a8..d948bad21bdbf 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PushDownDereferences.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PushDownDereferences.java @@ -23,24 +23,24 @@ import com.facebook.presto.metadata.Metadata; import com.facebook.presto.spi.plan.Assignments; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.LimitNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeIdAllocator; import com.facebook.presto.spi.plan.ProjectNode; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.spi.plan.SortNode; import com.facebook.presto.spi.plan.TopNNode; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.relation.RowExpression; import com.facebook.presto.spi.relation.SpecialFormExpression; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.iterative.Rule; import com.facebook.presto.sql.planner.iterative.Rule.Context; import com.facebook.presto.sql.planner.plan.AssignUniqueId; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.RowNumberNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; import com.facebook.presto.sql.planner.plan.UnnestNode; -import com.facebook.presto.sql.planner.plan.WindowNode; import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; import com.google.common.collect.ImmutableList; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PushDownFilterExpressionEvaluationThroughCrossJoin.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PushDownFilterExpressionEvaluationThroughCrossJoin.java index 4caec2cf5e560..ab6d22e7d8698 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PushDownFilterExpressionEvaluationThroughCrossJoin.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PushDownFilterExpressionEvaluationThroughCrossJoin.java @@ -20,6 +20,7 @@ import com.facebook.presto.metadata.FunctionAndTypeManager; import com.facebook.presto.spi.plan.Assignments; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.JoinType; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.ProjectNode; @@ -28,7 +29,6 @@ import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.PlannerUtils; import com.facebook.presto.sql.planner.iterative.Rule; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.relational.FunctionResolution; import com.facebook.presto.sql.relational.RowExpressionDeterminismEvaluator; import com.google.common.collect.ImmutableList; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PushLimitThroughOuterJoin.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PushLimitThroughOuterJoin.java index 917ba1e679dfe..f97638b8619ec 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PushLimitThroughOuterJoin.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PushLimitThroughOuterJoin.java @@ -16,11 +16,11 @@ import com.facebook.presto.matching.Capture; import com.facebook.presto.matching.Captures; import com.facebook.presto.matching.Pattern; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.LimitNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.sql.planner.iterative.Lookup; import com.facebook.presto.sql.planner.iterative.Rule; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.google.common.collect.ImmutableList; import com.google.common.collect.Range; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PushLimitThroughSemiJoin.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PushLimitThroughSemiJoin.java index 3bc94429d0abc..840c8d313c831 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PushLimitThroughSemiJoin.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PushLimitThroughSemiJoin.java @@ -17,8 +17,8 @@ import com.facebook.presto.matching.Captures; import com.facebook.presto.matching.Pattern; import com.facebook.presto.spi.plan.LimitNode; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.sql.planner.iterative.Rule; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; import static com.facebook.presto.matching.Capture.newCapture; import static com.facebook.presto.sql.planner.iterative.rule.Util.transpose; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PushPartialAggregationThroughJoin.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PushPartialAggregationThroughJoin.java index 9cbd9469c0185..31b1b67682649 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PushPartialAggregationThroughJoin.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PushPartialAggregationThroughJoin.java @@ -19,13 +19,13 @@ import com.facebook.presto.matching.Pattern; import com.facebook.presto.spi.plan.AggregationNode; import com.facebook.presto.spi.plan.EquiJoinClause; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.JoinType; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.TypeProvider; import com.facebook.presto.sql.planner.VariablesExtractor; import com.facebook.presto.sql.planner.iterative.Rule; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Streams; @@ -133,11 +133,11 @@ private PlanNode pushPartialToRightChild(AggregationNode node, JoinNode child, C private Set getJoinRequiredVariables(JoinNode node) { return Streams.concat( - node.getCriteria().stream().map(EquiJoinClause::getLeft), - node.getCriteria().stream().map(EquiJoinClause::getRight), - node.getFilter().map(expression -> VariablesExtractor.extractUnique(expression)).orElse(ImmutableSet.of()).stream(), - node.getLeftHashVariable().map(ImmutableSet::of).orElse(ImmutableSet.of()).stream(), - node.getRightHashVariable().map(ImmutableSet::of).orElse(ImmutableSet.of()).stream()) + node.getCriteria().stream().map(EquiJoinClause::getLeft), + node.getCriteria().stream().map(EquiJoinClause::getRight), + node.getFilter().map(expression -> VariablesExtractor.extractUnique(expression)).orElse(ImmutableSet.of()).stream(), + node.getLeftHashVariable().map(ImmutableSet::of).orElse(ImmutableSet.of()).stream(), + node.getRightHashVariable().map(ImmutableSet::of).orElse(ImmutableSet.of()).stream()) .collect(toImmutableSet()); } diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/RemoveCrossJoinWithConstantInput.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/RemoveCrossJoinWithConstantInput.java index 59aad65e4deb8..a297fe0b6cd82 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/RemoveCrossJoinWithConstantInput.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/RemoveCrossJoinWithConstantInput.java @@ -18,6 +18,7 @@ import com.facebook.presto.matching.Pattern; import com.facebook.presto.metadata.FunctionAndTypeManager; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.JoinType; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.ProjectNode; @@ -26,7 +27,6 @@ import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.RowExpressionVariableInliner; import com.facebook.presto.sql.planner.iterative.Rule; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.relational.RowExpressionDeterminismEvaluator; import java.util.List; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/RemoveRedundantCastToVarcharInJoinClause.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/RemoveRedundantCastToVarcharInJoinClause.java index 18fd658c31bea..dcb4c4ff579e6 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/RemoveRedundantCastToVarcharInJoinClause.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/RemoveRedundantCastToVarcharInJoinClause.java @@ -20,13 +20,13 @@ import com.facebook.presto.matching.Pattern; import com.facebook.presto.metadata.FunctionAndTypeManager; import com.facebook.presto.spi.plan.EquiJoinClause; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.ProjectNode; import com.facebook.presto.spi.relation.CallExpression; import com.facebook.presto.spi.relation.RowExpression; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.iterative.Rule; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.relational.FunctionResolution; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/RemoveUnsupportedDynamicFilters.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/RemoveUnsupportedDynamicFilters.java index 18806a6ec2010..274f6841afe4e 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/RemoveUnsupportedDynamicFilters.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/RemoveUnsupportedDynamicFilters.java @@ -20,19 +20,19 @@ import com.facebook.presto.metadata.FunctionAndTypeManager; import com.facebook.presto.spi.VariableAllocator; import com.facebook.presto.spi.WarningCollector; +import com.facebook.presto.spi.plan.AbstractJoinNode; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeIdAllocator; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.spi.relation.RowExpression; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.TypeProvider; import com.facebook.presto.sql.planner.optimizations.PlanOptimizer; import com.facebook.presto.sql.planner.optimizations.PlanOptimizerResult; -import com.facebook.presto.sql.planner.plan.AbstractJoinNode; import com.facebook.presto.sql.planner.plan.InternalPlanVisitor; -import com.facebook.presto.sql.planner.plan.JoinNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; import com.facebook.presto.sql.relational.FunctionResolution; import com.facebook.presto.sql.relational.RowExpressionDeterminismEvaluator; import com.google.common.collect.ImmutableMap; @@ -129,18 +129,18 @@ public PlanWithConsumedDynamicFilters visitJoin(JoinNode node, Set allow .filter(expression -> !expression.equals(TRUE_CONSTANT)); return new PlanWithConsumedDynamicFilters( new JoinNode( - node.getSourceLocation(), - node.getId(), - node.getType(), - joinDynamicFilterResult.getProbe(), - joinDynamicFilterResult.getBuild(), - node.getCriteria(), - node.getOutputVariables(), - filter, - node.getLeftHashVariable(), - node.getRightHashVariable(), - node.getDistributionType(), - joinDynamicFilterResult.getDynamicFilters()), + node.getSourceLocation(), + node.getId(), + node.getType(), + joinDynamicFilterResult.getProbe(), + joinDynamicFilterResult.getBuild(), + node.getCriteria(), + node.getOutputVariables(), + filter, + node.getLeftHashVariable(), + node.getRightHashVariable(), + node.getDistributionType(), + joinDynamicFilterResult.getDynamicFilters()), ImmutableSet.copyOf(joinDynamicFilterResult.getConsumed())); } return new PlanWithConsumedDynamicFilters(node, ImmutableSet.copyOf(joinDynamicFilterResult.getConsumed())); diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/ReorderJoins.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/ReorderJoins.java index 56036fc5e2d1a..f8dd1f9c6d85b 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/ReorderJoins.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/ReorderJoins.java @@ -27,6 +27,7 @@ import com.facebook.presto.spi.plan.Assignments; import com.facebook.presto.spi.plan.EquiJoinClause; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeId; import com.facebook.presto.spi.plan.PlanNodeIdAllocator; @@ -40,7 +41,6 @@ import com.facebook.presto.sql.planner.EqualityInference; import com.facebook.presto.sql.planner.iterative.Lookup; import com.facebook.presto.sql.planner.iterative.Rule; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.relational.FunctionResolution; import com.facebook.presto.sql.relational.RowExpressionDeterminismEvaluator; import com.google.common.annotations.VisibleForTesting; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/RowExpressionRewriteRuleSet.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/RowExpressionRewriteRuleSet.java index 378eebf2ed906..925c11a7e7547 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/RowExpressionRewriteRuleSet.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/RowExpressionRewriteRuleSet.java @@ -19,19 +19,19 @@ import com.facebook.presto.spi.plan.AggregationNode; import com.facebook.presto.spi.plan.Assignments; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.ProjectNode; +import com.facebook.presto.spi.plan.SpatialJoinNode; import com.facebook.presto.spi.plan.ValuesNode; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.relation.CallExpression; import com.facebook.presto.spi.relation.RowExpression; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.iterative.Rule; import com.facebook.presto.sql.planner.plan.ApplyNode; -import com.facebook.presto.sql.planner.plan.JoinNode; -import com.facebook.presto.sql.planner.plan.SpatialJoinNode; import com.facebook.presto.sql.planner.plan.StatisticAggregations; import com.facebook.presto.sql.planner.plan.TableFinishNode; import com.facebook.presto.sql.planner.plan.TableWriterNode; -import com.facebook.presto.sql.planner.plan.WindowNode; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/RuntimeReorderJoinSides.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/RuntimeReorderJoinSides.java index c51e72480300d..923350ad74774 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/RuntimeReorderJoinSides.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/RuntimeReorderJoinSides.java @@ -19,10 +19,10 @@ import com.facebook.presto.matching.Captures; import com.facebook.presto.matching.Pattern; import com.facebook.presto.metadata.Metadata; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.sql.planner.iterative.Rule; import com.facebook.presto.sql.planner.plan.ExchangeNode; -import com.facebook.presto.sql.planner.plan.JoinNode; import java.util.Optional; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/TransformCorrelatedInPredicateToJoin.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/TransformCorrelatedInPredicateToJoin.java index 592445259fd33..7fc432d1ff61d 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/TransformCorrelatedInPredicateToJoin.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/TransformCorrelatedInPredicateToJoin.java @@ -20,6 +20,7 @@ import com.facebook.presto.spi.plan.AggregationNode; import com.facebook.presto.spi.plan.Assignments; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.JoinType; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeIdAllocator; @@ -37,7 +38,6 @@ import com.facebook.presto.sql.planner.plan.AssignUniqueId; import com.facebook.presto.sql.planner.plan.AssignmentUtils; import com.facebook.presto.sql.planner.plan.InternalPlanVisitor; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.relational.FunctionResolution; import com.facebook.presto.sql.tree.ComparisonExpression; import com.google.common.collect.ImmutableList; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/TransformCorrelatedLateralJoinToJoin.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/TransformCorrelatedLateralJoinToJoin.java index d4dee9cab27f8..b9839e7f11e3d 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/TransformCorrelatedLateralJoinToJoin.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/TransformCorrelatedLateralJoinToJoin.java @@ -17,11 +17,11 @@ import com.facebook.presto.matching.Captures; import com.facebook.presto.matching.Pattern; import com.facebook.presto.metadata.FunctionAndTypeManager; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.sql.planner.iterative.Rule; import com.facebook.presto.sql.planner.optimizations.PlanNodeDecorrelator; import com.facebook.presto.sql.planner.optimizations.PlanNodeDecorrelator.DecorrelatedNode; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.LateralJoinNode; import com.facebook.presto.sql.relational.FunctionResolution; import com.facebook.presto.sql.relational.RowExpressionDeterminismEvaluator; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/TransformDistinctInnerJoinToLeftEarlyOutJoin.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/TransformDistinctInnerJoinToLeftEarlyOutJoin.java index 0250daed9e42d..bef39bbe97bdb 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/TransformDistinctInnerJoinToLeftEarlyOutJoin.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/TransformDistinctInnerJoinToLeftEarlyOutJoin.java @@ -21,12 +21,12 @@ import com.facebook.presto.spi.plan.Assignments; import com.facebook.presto.spi.plan.EquiJoinClause; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.LogicalProperties; import com.facebook.presto.spi.plan.ProjectNode; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.iterative.Rule; -import com.facebook.presto.sql.planner.plan.JoinNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; @@ -76,12 +76,12 @@ public class TransformDistinctInnerJoinToLeftEarlyOutJoin { private static final Capture JOIN = newCapture(); private static final Pattern PATTERN = aggregation() - .matching(AggregationNode::isDistinct) - .with(source().matching( - join() - .capturedAs(JOIN) - .with(type() - .matching(type -> type == INNER)))); + .matching(AggregationNode::isDistinct) + .with(source().matching( + join() + .capturedAs(JOIN) + .with(type() + .matching(type -> type == INNER)))); @Override public Pattern getPattern() diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/TransformDistinctInnerJoinToRightEarlyOutJoin.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/TransformDistinctInnerJoinToRightEarlyOutJoin.java index 158632a228fa9..2013f53fb2833 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/TransformDistinctInnerJoinToRightEarlyOutJoin.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/TransformDistinctInnerJoinToRightEarlyOutJoin.java @@ -20,11 +20,11 @@ import com.facebook.presto.matching.Captures; import com.facebook.presto.matching.Pattern; import com.facebook.presto.spi.plan.AggregationNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.LogicalProperties; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.iterative.GroupReference; import com.facebook.presto.sql.planner.iterative.Rule; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; @@ -72,12 +72,12 @@ public class TransformDistinctInnerJoinToRightEarlyOutJoin { private static final Capture JOIN = newCapture(); private static final Pattern PATTERN = aggregation() - .matching(AggregationNode::isDistinct) - .with(source().matching( - join() - .capturedAs(JOIN) - .with(type() - .matching(type -> type == INNER)))); + .matching(AggregationNode::isDistinct) + .with(source().matching( + join() + .capturedAs(JOIN) + .with(type() + .matching(type -> type == INNER)))); @Override public Pattern getPattern() diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/TransformUncorrelatedInPredicateSubqueryToDistinctInnerJoin.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/TransformUncorrelatedInPredicateSubqueryToDistinctInnerJoin.java index 7acc9ce23c359..da639ce7cd6f9 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/TransformUncorrelatedInPredicateSubqueryToDistinctInnerJoin.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/TransformUncorrelatedInPredicateSubqueryToDistinctInnerJoin.java @@ -19,6 +19,7 @@ import com.facebook.presto.spi.plan.AggregationNode; import com.facebook.presto.spi.plan.Assignments; import com.facebook.presto.spi.plan.EquiJoinClause; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.JoinType; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.ProjectNode; @@ -29,7 +30,6 @@ import com.facebook.presto.sql.planner.iterative.Rule; import com.facebook.presto.sql.planner.plan.ApplyNode; import com.facebook.presto.sql.planner.plan.AssignUniqueId; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; @@ -74,7 +74,7 @@ public class TransformUncorrelatedInPredicateSubqueryToDistinctInnerJoin implements Rule { private static final Pattern PATTERN = applyNode() - .with(empty(correlation())); + .with(empty(correlation())); @Override public Pattern getPattern() diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/TransformUncorrelatedInPredicateSubqueryToSemiJoin.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/TransformUncorrelatedInPredicateSubqueryToSemiJoin.java index cd06a08b17e2a..a7a924bc556a5 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/TransformUncorrelatedInPredicateSubqueryToSemiJoin.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/TransformUncorrelatedInPredicateSubqueryToSemiJoin.java @@ -15,12 +15,12 @@ import com.facebook.presto.matching.Captures; import com.facebook.presto.matching.Pattern; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.spi.relation.InSubqueryExpression; import com.facebook.presto.spi.relation.RowExpression; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.iterative.Rule; import com.facebook.presto.sql.planner.plan.ApplyNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; import com.google.common.collect.ImmutableMap; import java.util.Optional; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/TransformUncorrelatedLateralToJoin.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/TransformUncorrelatedLateralToJoin.java index e2439fd2fe004..6a536928442bc 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/TransformUncorrelatedLateralToJoin.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/TransformUncorrelatedLateralToJoin.java @@ -15,10 +15,10 @@ import com.facebook.presto.matching.Captures; import com.facebook.presto.matching.Pattern; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.JoinType; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.iterative.Rule; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.LateralJoinNode; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/AddExchanges.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/AddExchanges.java index d06d3561aba5a..ec6da969b1185 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/AddExchanges.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/AddExchanges.java @@ -32,6 +32,7 @@ import com.facebook.presto.spi.plan.EquiJoinClause; import com.facebook.presto.spi.plan.FilterNode; import com.facebook.presto.spi.plan.JoinDistributionType; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.LimitNode; import com.facebook.presto.spi.plan.MarkDistinctNode; import com.facebook.presto.spi.plan.OutputNode; @@ -41,11 +42,14 @@ import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeIdAllocator; import com.facebook.presto.spi.plan.ProjectNode; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.spi.plan.SortNode; +import com.facebook.presto.spi.plan.SpatialJoinNode; import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.spi.plan.TopNNode; import com.facebook.presto.spi.plan.UnionNode; import com.facebook.presto.spi.plan.ValuesNode; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.relation.RowExpression; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.analyzer.FeaturesConfig.AggregationPartitioningMergingStrategy; @@ -63,18 +67,14 @@ import com.facebook.presto.sql.planner.plan.IndexJoinNode; import com.facebook.presto.sql.planner.plan.IndexSourceNode; import com.facebook.presto.sql.planner.plan.InternalPlanVisitor; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.LateralJoinNode; import com.facebook.presto.sql.planner.plan.RowNumberNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; import com.facebook.presto.sql.planner.plan.SequenceNode; -import com.facebook.presto.sql.planner.plan.SpatialJoinNode; import com.facebook.presto.sql.planner.plan.StatisticsWriterNode; import com.facebook.presto.sql.planner.plan.TableFinishNode; import com.facebook.presto.sql.planner.plan.TableWriterNode; import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; import com.facebook.presto.sql.planner.plan.UnnestNode; -import com.facebook.presto.sql.planner.plan.WindowNode; import com.google.common.annotations.VisibleForTesting; import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/AddLocalExchanges.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/AddLocalExchanges.java index 9ba87d5dfab7a..c714022eb8749 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/AddLocalExchanges.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/AddLocalExchanges.java @@ -24,6 +24,7 @@ import com.facebook.presto.spi.plan.AggregationNode; import com.facebook.presto.spi.plan.DistinctLimitNode; import com.facebook.presto.spi.plan.EquiJoinClause; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.LimitNode; import com.facebook.presto.spi.plan.MarkDistinctNode; import com.facebook.presto.spi.plan.OrderingScheme; @@ -32,9 +33,12 @@ import com.facebook.presto.spi.plan.PartitioningScheme; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeIdAllocator; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.spi.plan.SortNode; +import com.facebook.presto.spi.plan.SpatialJoinNode; import com.facebook.presto.spi.plan.TopNNode; import com.facebook.presto.spi.plan.UnionNode; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.TypeProvider; import com.facebook.presto.sql.planner.optimizations.StreamPropertyDerivations.StreamProperties; @@ -44,18 +48,14 @@ import com.facebook.presto.sql.planner.plan.ExplainAnalyzeNode; import com.facebook.presto.sql.planner.plan.IndexJoinNode; import com.facebook.presto.sql.planner.plan.InternalPlanVisitor; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.LateralJoinNode; import com.facebook.presto.sql.planner.plan.RowNumberNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; -import com.facebook.presto.sql.planner.plan.SpatialJoinNode; import com.facebook.presto.sql.planner.plan.StatisticAggregations; import com.facebook.presto.sql.planner.plan.StatisticsWriterNode; import com.facebook.presto.sql.planner.plan.TableFinishNode; import com.facebook.presto.sql.planner.plan.TableWriterMergeNode; import com.facebook.presto.sql.planner.plan.TableWriterNode; import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; -import com.facebook.presto.sql.planner.plan.WindowNode; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/ApplyConnectorOptimization.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/ApplyConnectorOptimization.java index 18c0ffb668771..d3119c51ba67d 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/ApplyConnectorOptimization.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/ApplyConnectorOptimization.java @@ -40,7 +40,7 @@ import com.facebook.presto.spi.plan.UnionNode; import com.facebook.presto.spi.plan.ValuesNode; import com.facebook.presto.sql.planner.TypeProvider; -import com.facebook.presto.sql.planner.plan.JoinNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.sql.planner.plan.SimplePlanRewriter; import com.google.common.base.Supplier; import com.google.common.collect.ImmutableList; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/HashGenerationOptimizer.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/HashGenerationOptimizer.java index ca693e3301ce4..995a687c98b2c 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/HashGenerationOptimizer.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/HashGenerationOptimizer.java @@ -22,13 +22,18 @@ import com.facebook.presto.spi.plan.Assignments; import com.facebook.presto.spi.plan.DistinctLimitNode; import com.facebook.presto.spi.plan.EquiJoinClause; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.MarkDistinctNode; +import com.facebook.presto.spi.plan.MergeJoinNode; import com.facebook.presto.spi.plan.PartitioningScheme; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeIdAllocator; import com.facebook.presto.spi.plan.ProjectNode; +import com.facebook.presto.spi.plan.SemiJoinNode; +import com.facebook.presto.spi.plan.SpatialJoinNode; import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.spi.plan.UnionNode; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.relation.CallExpression; import com.facebook.presto.spi.relation.RowExpression; import com.facebook.presto.spi.relation.VariableReferenceExpression; @@ -39,16 +44,11 @@ import com.facebook.presto.sql.planner.plan.GroupIdNode; import com.facebook.presto.sql.planner.plan.IndexJoinNode; import com.facebook.presto.sql.planner.plan.InternalPlanVisitor; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.LateralJoinNode; -import com.facebook.presto.sql.planner.plan.MergeJoinNode; import com.facebook.presto.sql.planner.plan.RowNumberNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; import com.facebook.presto.sql.planner.plan.SequenceNode; -import com.facebook.presto.sql.planner.plan.SpatialJoinNode; import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; import com.facebook.presto.sql.planner.plan.UnnestNode; -import com.facebook.presto.sql.planner.plan.WindowNode; import com.google.common.collect.BiMap; import com.google.common.collect.ImmutableBiMap; import com.google.common.collect.ImmutableList; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/HistoricalStatisticsEquivalentPlanMarkingOptimizer.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/HistoricalStatisticsEquivalentPlanMarkingOptimizer.java index 729d80f9e386e..185bee6925035 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/HistoricalStatisticsEquivalentPlanMarkingOptimizer.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/HistoricalStatisticsEquivalentPlanMarkingOptimizer.java @@ -20,14 +20,14 @@ import com.facebook.presto.spi.eventlistener.PlanOptimizerInformation; import com.facebook.presto.spi.plan.AggregationNode; import com.facebook.presto.spi.plan.DistinctLimitNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.LimitNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeIdAllocator; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.spi.plan.TopNNode; import com.facebook.presto.sql.planner.StatsEquivalentPlanNodeWithLimit; import com.facebook.presto.sql.planner.TypeProvider; -import com.facebook.presto.sql.planner.plan.JoinNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; import com.facebook.presto.sql.planner.plan.SimplePlanRewriter; import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; import com.google.common.collect.ImmutableList; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/IndexJoinOptimizer.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/IndexJoinOptimizer.java index 77e6c08bf9171..9ebe5c6c7b1b4 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/IndexJoinOptimizer.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/IndexJoinOptimizer.java @@ -24,11 +24,13 @@ import com.facebook.presto.spi.plan.AggregationNode; import com.facebook.presto.spi.plan.EquiJoinClause; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeIdAllocator; import com.facebook.presto.spi.plan.ProjectNode; import com.facebook.presto.spi.plan.SortNode; import com.facebook.presto.spi.plan.TableScanNode; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.relation.DomainTranslator.ExtractionResult; import com.facebook.presto.spi.relation.RowExpression; import com.facebook.presto.spi.relation.VariableReferenceExpression; @@ -36,9 +38,7 @@ import com.facebook.presto.sql.planner.plan.IndexJoinNode; import com.facebook.presto.sql.planner.plan.IndexSourceNode; import com.facebook.presto.sql.planner.plan.InternalPlanVisitor; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.SimplePlanRewriter; -import com.facebook.presto.sql.planner.plan.WindowNode; import com.facebook.presto.sql.relational.FunctionResolution; import com.facebook.presto.sql.relational.RowExpressionDeterminismEvaluator; import com.facebook.presto.sql.relational.RowExpressionDomainTranslator; @@ -57,8 +57,8 @@ import static com.facebook.presto.expressions.LogicalRowExpressions.TRUE_CONSTANT; import static com.facebook.presto.spi.function.FunctionKind.AGGREGATE; +import static com.facebook.presto.spi.plan.WindowNode.Frame.WindowType.RANGE; import static com.facebook.presto.sql.planner.plan.AssignmentUtils.identityAssignments; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.WindowType.RANGE; import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkState; import static com.google.common.base.Predicates.in; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/JoinPrefilter.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/JoinPrefilter.java index 29d5f766c6c5b..c590bf6a6cb1f 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/JoinPrefilter.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/JoinPrefilter.java @@ -23,14 +23,14 @@ import com.facebook.presto.spi.plan.AggregationNode; import com.facebook.presto.spi.plan.EquiJoinClause; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeIdAllocator; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.spi.relation.CallExpression; import com.facebook.presto.spi.relation.RowExpression; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.TypeProvider; -import com.facebook.presto.sql.planner.plan.JoinNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; import com.facebook.presto.sql.planner.plan.SimplePlanRewriter; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/KeyBasedSampler.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/KeyBasedSampler.java index 524e6f179bddc..b6f3f14bd6ae6 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/KeyBasedSampler.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/KeyBasedSampler.java @@ -27,20 +27,20 @@ import com.facebook.presto.spi.plan.DistinctLimitNode; import com.facebook.presto.spi.plan.EquiJoinClause; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeIdAllocator; import com.facebook.presto.spi.plan.ProjectNode; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.spi.plan.TableScanNode; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.relation.ConstantExpression; import com.facebook.presto.spi.relation.RowExpression; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.TypeProvider; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.RowNumberNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; import com.facebook.presto.sql.planner.plan.SimplePlanRewriter; import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; -import com.facebook.presto.sql.planner.plan.WindowNode; import com.facebook.presto.type.TypeUtils; import com.google.common.collect.ImmutableList; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/LimitPushDown.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/LimitPushDown.java index 2395e012bdb00..a5b63a8b4e81e 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/LimitPushDown.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/LimitPushDown.java @@ -23,12 +23,12 @@ import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeIdAllocator; import com.facebook.presto.spi.plan.ProjectNode; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.spi.plan.SortNode; import com.facebook.presto.spi.plan.TopNNode; import com.facebook.presto.spi.plan.UnionNode; import com.facebook.presto.spi.plan.ValuesNode; import com.facebook.presto.sql.planner.TypeProvider; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; import com.facebook.presto.sql.planner.plan.SimplePlanRewriter; import com.google.common.collect.ImmutableList; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/LogicalCteOptimizer.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/LogicalCteOptimizer.java index 60e0c6439277b..30f885147ad2f 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/LogicalCteOptimizer.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/LogicalCteOptimizer.java @@ -22,15 +22,15 @@ import com.facebook.presto.spi.plan.CteConsumerNode; import com.facebook.presto.spi.plan.CteProducerNode; import com.facebook.presto.spi.plan.CteReferenceNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeIdAllocator; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.sql.planner.SimplePlanVisitor; import com.facebook.presto.sql.planner.TypeProvider; import com.facebook.presto.sql.planner.plan.ApplyNode; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.RemoteSourceNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; import com.facebook.presto.sql.planner.plan.SequenceNode; import com.facebook.presto.sql.planner.plan.SimplePlanRewriter; import com.google.common.collect.ImmutableList; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/MergeJoinForSortedInputOptimizer.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/MergeJoinForSortedInputOptimizer.java index 3376626599111..38c29689e46f2 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/MergeJoinForSortedInputOptimizer.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/MergeJoinForSortedInputOptimizer.java @@ -18,12 +18,12 @@ import com.facebook.presto.spi.VariableAllocator; import com.facebook.presto.spi.WarningCollector; import com.facebook.presto.spi.plan.EquiJoinClause; +import com.facebook.presto.spi.plan.JoinNode; +import com.facebook.presto.spi.plan.MergeJoinNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeIdAllocator; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.TypeProvider; -import com.facebook.presto.sql.planner.plan.JoinNode; -import com.facebook.presto.sql.planner.plan.MergeJoinNode; import com.facebook.presto.sql.planner.plan.SimplePlanRewriter; import java.util.List; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/PayloadJoinOptimizer.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/PayloadJoinOptimizer.java index 74a8da8e74712..aaf9c088a48e9 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/PayloadJoinOptimizer.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/PayloadJoinOptimizer.java @@ -25,6 +25,7 @@ import com.facebook.presto.spi.plan.Assignments; import com.facebook.presto.spi.plan.EquiJoinClause; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.JoinType; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeIdAllocator; @@ -34,7 +35,6 @@ import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.TypeProvider; import com.facebook.presto.sql.planner.VariablesExtractor; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.SimplePlanRewriter; import com.facebook.presto.sql.relational.FunctionResolution; import com.google.common.collect.ImmutableList; @@ -581,6 +581,7 @@ public void reset() numJoins = 0; payloadNode = null; } + public int getNumJoins() { return numJoins; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/PlanNodeDecorrelator.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/PlanNodeDecorrelator.java index 0c61626c19c1a..9110ec4ceb128 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/PlanNodeDecorrelator.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/PlanNodeDecorrelator.java @@ -27,6 +27,7 @@ import com.facebook.presto.spi.plan.PlanNodeIdAllocator; import com.facebook.presto.spi.plan.ProjectNode; import com.facebook.presto.spi.plan.TopNNode; +import com.facebook.presto.spi.plan.WindowNode.Specification; import com.facebook.presto.spi.relation.CallExpression; import com.facebook.presto.spi.relation.RowExpression; import com.facebook.presto.spi.relation.VariableReferenceExpression; @@ -36,7 +37,6 @@ import com.facebook.presto.sql.planner.plan.InternalPlanVisitor; import com.facebook.presto.sql.planner.plan.RowNumberNode; import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; -import com.facebook.presto.sql.planner.plan.WindowNode.Specification; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMultimap; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/PredicatePushDown.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/PredicatePushDown.java index 436b524805acb..087cab8bcc77c 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/PredicatePushDown.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/PredicatePushDown.java @@ -30,14 +30,18 @@ import com.facebook.presto.spi.plan.EquiJoinClause; import com.facebook.presto.spi.plan.FilterNode; import com.facebook.presto.spi.plan.JoinDistributionType; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.JoinType; import com.facebook.presto.spi.plan.MarkDistinctNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeIdAllocator; import com.facebook.presto.spi.plan.ProjectNode; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.spi.plan.SortNode; +import com.facebook.presto.spi.plan.SpatialJoinNode; import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.spi.plan.UnionNode; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.relation.CallExpression; import com.facebook.presto.spi.relation.ConstantExpression; import com.facebook.presto.spi.relation.ExpressionOptimizer; @@ -54,13 +58,9 @@ import com.facebook.presto.sql.planner.plan.AssignmentUtils; import com.facebook.presto.sql.planner.plan.ExchangeNode; import com.facebook.presto.sql.planner.plan.GroupIdNode; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.SampleNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; import com.facebook.presto.sql.planner.plan.SimplePlanRewriter; -import com.facebook.presto.sql.planner.plan.SpatialJoinNode; import com.facebook.presto.sql.planner.plan.UnnestNode; -import com.facebook.presto.sql.planner.plan.WindowNode; import com.facebook.presto.sql.relational.Expressions; import com.facebook.presto.sql.relational.FunctionResolution; import com.facebook.presto.sql.relational.RowExpressionDeterminismEvaluator; @@ -731,11 +731,11 @@ private static List getDynamicFilterClauses( VariableReferenceExpression probeSymbol = clause.getLeft(); VariableReferenceExpression buildSymbol = clause.getRight(); clausesBuilder.add(call( - EQUAL.name(), - functionAndTypeManager.resolveOperator(EQUAL, fromTypes(probeSymbol.getType(), buildSymbol.getType())), - BOOLEAN, - probeSymbol, - buildSymbol)); + EQUAL.name(), + functionAndTypeManager.resolveOperator(EQUAL, fromTypes(probeSymbol.getType(), buildSymbol.getType())), + BOOLEAN, + probeSymbol, + buildSymbol)); } for (RowExpression filter : joinFilter) { @@ -754,11 +754,11 @@ private static List getDynamicFilterClauses( if (function.equals(BETWEEN.name()) && arguments.get(0) instanceof VariableReferenceExpression) { if (arguments.get(1) instanceof VariableReferenceExpression) { CallExpression callExpression = call( - GREATER_THAN_OR_EQUAL.name(), - functionAndTypeManager.resolveOperator(GREATER_THAN_OR_EQUAL, fromTypes(arguments.get(0).getType(), arguments.get(1).getType())), - BOOLEAN, - arguments.get(0), - arguments.get(1)); + GREATER_THAN_OR_EQUAL.name(), + functionAndTypeManager.resolveOperator(GREATER_THAN_OR_EQUAL, fromTypes(arguments.get(0).getType(), arguments.get(1).getType())), + BOOLEAN, + arguments.get(0), + arguments.get(1)); Optional comparisonExpression = getDynamicFilterComparison(node, callExpression, functionAndTypeManager); if (comparisonExpression.isPresent()) { clausesBuilder.add(comparisonExpression.get()); @@ -766,11 +766,11 @@ private static List getDynamicFilterClauses( } if (arguments.get(2) instanceof VariableReferenceExpression) { CallExpression callExpression = call( - LESS_THAN_OR_EQUAL.name(), - functionAndTypeManager.resolveOperator(LESS_THAN_OR_EQUAL, fromTypes(arguments.get(0).getType(), arguments.get(2).getType())), - BOOLEAN, - arguments.get(0), - arguments.get(2)); + LESS_THAN_OR_EQUAL.name(), + functionAndTypeManager.resolveOperator(LESS_THAN_OR_EQUAL, fromTypes(arguments.get(0).getType(), arguments.get(2).getType())), + BOOLEAN, + arguments.get(0), + arguments.get(2)); Optional comparisonExpression = getDynamicFilterComparison(node, callExpression, functionAndTypeManager); if (comparisonExpression.isPresent()) { clausesBuilder.add(comparisonExpression.get()); @@ -839,11 +839,11 @@ private static Optional getDynamicFilterComparison( return Optional.empty(); } return Optional.of(call( - operator.name(), - functionAndTypeManager.resolveOperator(operator, fromTypes(left.getType(), right.getType())), - BOOLEAN, - left, - right)); + operator.name(), + functionAndTypeManager.resolveOperator(operator, fromTypes(left.getType(), right.getType())), + BOOLEAN, + left, + right)); } private static DynamicFiltersResult createDynamicFilters( diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/PrefilterForLimitingAggregation.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/PrefilterForLimitingAggregation.java index f77902bd41535..afbc389b778d2 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/PrefilterForLimitingAggregation.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/PrefilterForLimitingAggregation.java @@ -26,6 +26,7 @@ import com.facebook.presto.spi.plan.Assignments; import com.facebook.presto.spi.plan.DistinctLimitNode; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.LimitNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeIdAllocator; @@ -35,7 +36,6 @@ import com.facebook.presto.spi.relation.RowExpression; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.TypeProvider; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.SimplePlanRewriter; import com.facebook.presto.sql.tree.Join; import com.google.common.collect.ImmutableList; @@ -70,17 +70,17 @@ /** * An optimization for quicker execution of simple group by + limit queries. In SQL terms, it will be: - * + *

* Original: - * + *

* SELECT SUM(x), userid FROM Table GROUP BY userid LIMIT 1000 - * + *

* Rewritten: - * + *

* SELECT SUM(x) , userid FROM Table * CROSS JOIN (SELECT MAP_AGG(hash(userid)) m FROM (SELECT DISTINCT userid FROM Table LIMIT 1000))) * WHERE IF(CARDINALITY(m)=1000, m[hash(userid)], TRUE) - * + *

* In addition we also add a timeout to the distinctlimit we add so that we don't get stuck trying to find the keys */ diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/PropertyDerivations.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/PropertyDerivations.java index b868ffac28a7b..95a4fa3b5a46b 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/PropertyDerivations.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/PropertyDerivations.java @@ -27,18 +27,23 @@ import com.facebook.presto.spi.plan.DistinctLimitNode; import com.facebook.presto.spi.plan.EquiJoinClause; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.JoinType; import com.facebook.presto.spi.plan.LimitNode; import com.facebook.presto.spi.plan.MarkDistinctNode; +import com.facebook.presto.spi.plan.MergeJoinNode; import com.facebook.presto.spi.plan.OrderingScheme; import com.facebook.presto.spi.plan.OutputNode; import com.facebook.presto.spi.plan.PartitioningHandle; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.ProjectNode; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.spi.plan.SortNode; +import com.facebook.presto.spi.plan.SpatialJoinNode; import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.spi.plan.TopNNode; import com.facebook.presto.spi.plan.ValuesNode; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.relation.ConstantExpression; import com.facebook.presto.spi.relation.RowExpression; import com.facebook.presto.spi.relation.VariableReferenceExpression; @@ -54,22 +59,17 @@ import com.facebook.presto.sql.planner.plan.IndexJoinNode; import com.facebook.presto.sql.planner.plan.IndexSourceNode; import com.facebook.presto.sql.planner.plan.InternalPlanVisitor; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.LateralJoinNode; -import com.facebook.presto.sql.planner.plan.MergeJoinNode; import com.facebook.presto.sql.planner.plan.RemoteSourceNode; import com.facebook.presto.sql.planner.plan.RowNumberNode; import com.facebook.presto.sql.planner.plan.SampleNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; import com.facebook.presto.sql.planner.plan.SequenceNode; -import com.facebook.presto.sql.planner.plan.SpatialJoinNode; import com.facebook.presto.sql.planner.plan.StatisticsWriterNode; import com.facebook.presto.sql.planner.plan.TableFinishNode; import com.facebook.presto.sql.planner.plan.TableWriterMergeNode; import com.facebook.presto.sql.planner.plan.TableWriterNode; import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; import com.facebook.presto.sql.planner.plan.UnnestNode; -import com.facebook.presto.sql.planner.plan.WindowNode; import com.facebook.presto.sql.relational.RowExpressionDomainTranslator; import com.google.common.collect.ImmutableBiMap; import com.google.common.collect.ImmutableList; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/PruneUnreferencedOutputs.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/PruneUnreferencedOutputs.java index 09f4b2b2373a5..69bfed87d9814 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/PruneUnreferencedOutputs.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/PruneUnreferencedOutputs.java @@ -27,6 +27,7 @@ import com.facebook.presto.spi.plan.ExceptNode; import com.facebook.presto.spi.plan.FilterNode; import com.facebook.presto.spi.plan.IntersectNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.LimitNode; import com.facebook.presto.spi.plan.MarkDistinctNode; import com.facebook.presto.spi.plan.OutputNode; @@ -34,12 +35,15 @@ import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeIdAllocator; import com.facebook.presto.spi.plan.ProjectNode; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.spi.plan.SetOperationNode; import com.facebook.presto.spi.plan.SortNode; +import com.facebook.presto.spi.plan.SpatialJoinNode; import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.spi.plan.TopNNode; import com.facebook.presto.spi.plan.UnionNode; import com.facebook.presto.spi.plan.ValuesNode; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.relation.RowExpression; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.TypeProvider; @@ -52,13 +56,10 @@ import com.facebook.presto.sql.planner.plan.GroupIdNode; import com.facebook.presto.sql.planner.plan.IndexJoinNode; import com.facebook.presto.sql.planner.plan.IndexSourceNode; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.LateralJoinNode; import com.facebook.presto.sql.planner.plan.RowNumberNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; import com.facebook.presto.sql.planner.plan.SequenceNode; import com.facebook.presto.sql.planner.plan.SimplePlanRewriter; -import com.facebook.presto.sql.planner.plan.SpatialJoinNode; import com.facebook.presto.sql.planner.plan.StatisticAggregations; import com.facebook.presto.sql.planner.plan.StatisticsWriterNode; import com.facebook.presto.sql.planner.plan.TableFinishNode; @@ -66,7 +67,6 @@ import com.facebook.presto.sql.planner.plan.TableWriterNode; import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; import com.facebook.presto.sql.planner.plan.UnnestNode; -import com.facebook.presto.sql.planner.plan.WindowNode; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableListMultimap; import com.google.common.collect.ImmutableMap; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/PushdownSubfields.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/PushdownSubfields.java index 302aaefd19076..42c648fa2ded5 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/PushdownSubfields.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/PushdownSubfields.java @@ -38,16 +38,20 @@ import com.facebook.presto.spi.plan.DistinctLimitNode; import com.facebook.presto.spi.plan.EquiJoinClause; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.MarkDistinctNode; import com.facebook.presto.spi.plan.OrderingScheme; import com.facebook.presto.spi.plan.OutputNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeIdAllocator; import com.facebook.presto.spi.plan.ProjectNode; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.spi.plan.SortNode; +import com.facebook.presto.spi.plan.SpatialJoinNode; import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.spi.plan.TopNNode; import com.facebook.presto.spi.plan.UnionNode; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.relation.CallExpression; import com.facebook.presto.spi.relation.ConstantExpression; import com.facebook.presto.spi.relation.ExpressionOptimizer; @@ -60,15 +64,11 @@ import com.facebook.presto.sql.planner.plan.ExplainAnalyzeNode; import com.facebook.presto.sql.planner.plan.GroupIdNode; import com.facebook.presto.sql.planner.plan.IndexJoinNode; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.RowNumberNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; import com.facebook.presto.sql.planner.plan.SimplePlanRewriter; -import com.facebook.presto.sql.planner.plan.SpatialJoinNode; import com.facebook.presto.sql.planner.plan.TableWriterNode; import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; import com.facebook.presto.sql.planner.plan.UnnestNode; -import com.facebook.presto.sql.planner.plan.WindowNode; import com.facebook.presto.sql.relational.FunctionResolution; import com.facebook.presto.sql.relational.RowExpressionOptimizer; import com.google.common.collect.ImmutableList; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/RandomizeNullKeyInOuterJoin.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/RandomizeNullKeyInOuterJoin.java index 6791135c1d0be..27ab650e7af46 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/RandomizeNullKeyInOuterJoin.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/RandomizeNullKeyInOuterJoin.java @@ -24,6 +24,7 @@ import com.facebook.presto.spi.WarningCollector; import com.facebook.presto.spi.plan.Assignments; import com.facebook.presto.spi.plan.EquiJoinClause; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeIdAllocator; import com.facebook.presto.spi.plan.ProjectNode; @@ -31,7 +32,6 @@ import com.facebook.presto.spi.relation.SpecialFormExpression; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.TypeProvider; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.SimplePlanRewriter; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMultimap; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/ReplaceConstantVariableReferencesWithConstants.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/ReplaceConstantVariableReferencesWithConstants.java index 67013e309b6b8..91bc3277795a5 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/ReplaceConstantVariableReferencesWithConstants.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/ReplaceConstantVariableReferencesWithConstants.java @@ -22,11 +22,13 @@ import com.facebook.presto.spi.plan.AggregationNode; import com.facebook.presto.spi.plan.Assignments; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.JoinType; import com.facebook.presto.spi.plan.LimitNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeIdAllocator; import com.facebook.presto.spi.plan.ProjectNode; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.spi.plan.SortNode; import com.facebook.presto.spi.plan.TopNNode; import com.facebook.presto.spi.plan.UnionNode; @@ -40,10 +42,8 @@ import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.TypeProvider; import com.facebook.presto.sql.planner.plan.InternalPlanVisitor; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.OffsetNode; import com.facebook.presto.sql.planner.plan.SampleNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; import com.facebook.presto.sql.planner.plan.UnnestNode; import com.facebook.presto.sql.relational.FunctionResolution; import com.google.common.collect.ImmutableList; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/ReplicateSemiJoinInDelete.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/ReplicateSemiJoinInDelete.java index 3da1fc0fcee3e..87623fd7bc8d1 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/ReplicateSemiJoinInDelete.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/ReplicateSemiJoinInDelete.java @@ -18,12 +18,12 @@ import com.facebook.presto.spi.WarningCollector; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeIdAllocator; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.sql.planner.TypeProvider; import com.facebook.presto.sql.planner.plan.DeleteNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; import com.facebook.presto.sql.planner.plan.SimplePlanRewriter; -import static com.facebook.presto.sql.planner.plan.SemiJoinNode.DistributionType.REPLICATED; +import static com.facebook.presto.spi.plan.SemiJoinNode.DistributionType.REPLICATED; import static java.util.Objects.requireNonNull; public class ReplicateSemiJoinInDelete diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/ScalarAggregationToJoinRewriter.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/ScalarAggregationToJoinRewriter.java index 3aacc644a555b..0362ae97e4ade 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/ScalarAggregationToJoinRewriter.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/ScalarAggregationToJoinRewriter.java @@ -21,6 +21,7 @@ import com.facebook.presto.spi.plan.AggregationNode; import com.facebook.presto.spi.plan.AggregationNode.Aggregation; import com.facebook.presto.spi.plan.Assignments; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.JoinType; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeIdAllocator; @@ -32,7 +33,6 @@ import com.facebook.presto.sql.planner.optimizations.PlanNodeDecorrelator.DecorrelatedNode; import com.facebook.presto.sql.planner.plan.AssignUniqueId; import com.facebook.presto.sql.planner.plan.EnforceSingleRowNode; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.LateralJoinNode; import com.facebook.presto.sql.relational.FunctionResolution; import com.facebook.presto.sql.relational.RowExpressionDeterminismEvaluator; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/ShardJoins.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/ShardJoins.java index ab89d1234ffac..75f8d9ec8ee23 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/ShardJoins.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/ShardJoins.java @@ -21,13 +21,13 @@ import com.facebook.presto.spi.VariableAllocator; import com.facebook.presto.spi.WarningCollector; import com.facebook.presto.spi.plan.EquiJoinClause; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeIdAllocator; import com.facebook.presto.spi.relation.RowExpression; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.PlannerUtils; import com.facebook.presto.sql.planner.TypeProvider; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.SimplePlanRewriter; import com.facebook.presto.sql.planner.plan.UnnestNode; import com.google.common.collect.ImmutableList; @@ -55,7 +55,7 @@ /** * Shard joins to eliminate skew: - * + *

* Transform *

  * - Join
@@ -73,7 +73,6 @@
  *             Project(seq:=sequence(0, NumShards - 1))
  *                - T
  * 
- * */ public class ShardJoins @@ -186,7 +185,7 @@ private boolean isApplicable(JoinNode joinNode) { return joinNode.getType() != FULL && joinNode.getType() != RIGHT && !isBroadcastJoin(joinNode) && (getShardedJoinStrategy(session).equals(ALWAYS) || - getShardedJoinStrategy(session).equals(COST_BASED) && shouldShardJoin(joinNode)); + getShardedJoinStrategy(session).equals(COST_BASED) && shouldShardJoin(joinNode)); } private boolean shouldShardJoin(JoinNode joinNode) diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/SimplifyPlanWithEmptyInput.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/SimplifyPlanWithEmptyInput.java index a98919ea1effb..bba51cacd00cc 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/SimplifyPlanWithEmptyInput.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/SimplifyPlanWithEmptyInput.java @@ -22,28 +22,28 @@ import com.facebook.presto.spi.plan.CteProducerNode; import com.facebook.presto.spi.plan.DistinctLimitNode; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.LimitNode; import com.facebook.presto.spi.plan.MarkDistinctNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeIdAllocator; import com.facebook.presto.spi.plan.ProjectNode; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.spi.plan.SortNode; import com.facebook.presto.spi.plan.TopNNode; import com.facebook.presto.spi.plan.UnionNode; import com.facebook.presto.spi.plan.ValuesNode; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.TypeProvider; import com.facebook.presto.sql.planner.plan.GroupIdNode; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.OffsetNode; import com.facebook.presto.sql.planner.plan.RowNumberNode; import com.facebook.presto.sql.planner.plan.SampleNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; import com.facebook.presto.sql.planner.plan.SequenceNode; import com.facebook.presto.sql.planner.plan.SimplePlanRewriter; import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; import com.facebook.presto.sql.planner.plan.UnnestNode; -import com.facebook.presto.sql.planner.plan.WindowNode; import com.google.common.collect.ImmutableList; import java.util.ArrayList; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/StreamPropertyDerivations.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/StreamPropertyDerivations.java index 3f465f47a85fe..84be5c263f78e 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/StreamPropertyDerivations.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/StreamPropertyDerivations.java @@ -21,16 +21,21 @@ import com.facebook.presto.spi.plan.AggregationNode; import com.facebook.presto.spi.plan.DistinctLimitNode; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.LimitNode; import com.facebook.presto.spi.plan.MarkDistinctNode; +import com.facebook.presto.spi.plan.MergeJoinNode; import com.facebook.presto.spi.plan.OutputNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.ProjectNode; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.spi.plan.SortNode; +import com.facebook.presto.spi.plan.SpatialJoinNode; import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.spi.plan.TopNNode; import com.facebook.presto.spi.plan.UnionNode; import com.facebook.presto.spi.plan.ValuesNode; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.relation.RowExpression; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.plan.ApplyNode; @@ -43,22 +48,17 @@ import com.facebook.presto.sql.planner.plan.IndexJoinNode; import com.facebook.presto.sql.planner.plan.IndexSourceNode; import com.facebook.presto.sql.planner.plan.InternalPlanVisitor; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.LateralJoinNode; -import com.facebook.presto.sql.planner.plan.MergeJoinNode; import com.facebook.presto.sql.planner.plan.RemoteSourceNode; import com.facebook.presto.sql.planner.plan.RowNumberNode; import com.facebook.presto.sql.planner.plan.SampleNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; import com.facebook.presto.sql.planner.plan.SequenceNode; -import com.facebook.presto.sql.planner.plan.SpatialJoinNode; import com.facebook.presto.sql.planner.plan.StatisticsWriterNode; import com.facebook.presto.sql.planner.plan.TableFinishNode; import com.facebook.presto.sql.planner.plan.TableWriterMergeNode; import com.facebook.presto.sql.planner.plan.TableWriterNode; import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; import com.facebook.presto.sql.planner.plan.UnnestNode; -import com.facebook.presto.sql.planner.plan.WindowNode; import com.google.common.collect.ImmutableBiMap; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/UnaliasSymbolReferences.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/UnaliasSymbolReferences.java index cc81a53c45d60..4a6c97145414e 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/UnaliasSymbolReferences.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/UnaliasSymbolReferences.java @@ -28,6 +28,7 @@ import com.facebook.presto.spi.plan.ExceptNode; import com.facebook.presto.spi.plan.FilterNode; import com.facebook.presto.spi.plan.IntersectNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.LimitNode; import com.facebook.presto.spi.plan.MarkDistinctNode; import com.facebook.presto.spi.plan.Ordering; @@ -37,12 +38,15 @@ import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeIdAllocator; import com.facebook.presto.spi.plan.ProjectNode; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.spi.plan.SetOperationNode; import com.facebook.presto.spi.plan.SortNode; +import com.facebook.presto.spi.plan.SpatialJoinNode; import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.spi.plan.TopNNode; import com.facebook.presto.spi.plan.UnionNode; import com.facebook.presto.spi.plan.ValuesNode; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.relation.CallExpression; import com.facebook.presto.spi.relation.RowExpression; import com.facebook.presto.spi.relation.VariableReferenceExpression; @@ -57,23 +61,19 @@ import com.facebook.presto.sql.planner.plan.GroupIdNode; import com.facebook.presto.sql.planner.plan.IndexJoinNode; import com.facebook.presto.sql.planner.plan.IndexSourceNode; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.LateralJoinNode; import com.facebook.presto.sql.planner.plan.OffsetNode; import com.facebook.presto.sql.planner.plan.RemoteSourceNode; import com.facebook.presto.sql.planner.plan.RowNumberNode; import com.facebook.presto.sql.planner.plan.SampleNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; import com.facebook.presto.sql.planner.plan.SequenceNode; import com.facebook.presto.sql.planner.plan.SimplePlanRewriter; -import com.facebook.presto.sql.planner.plan.SpatialJoinNode; import com.facebook.presto.sql.planner.plan.StatisticsWriterNode; import com.facebook.presto.sql.planner.plan.TableFinishNode; import com.facebook.presto.sql.planner.plan.TableWriterMergeNode; import com.facebook.presto.sql.planner.plan.TableWriterNode; import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; import com.facebook.presto.sql.planner.plan.UnnestNode; -import com.facebook.presto.sql.planner.plan.WindowNode; import com.facebook.presto.sql.relational.RowExpressionDeterminismEvaluator; import com.facebook.presto.sql.tree.SymbolReference; import com.google.common.base.Preconditions; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/WindowFilterPushDown.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/WindowFilterPushDown.java index f70751b1f7b25..337e9eb39df03 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/WindowFilterPushDown.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/WindowFilterPushDown.java @@ -29,6 +29,7 @@ import com.facebook.presto.spi.plan.LimitNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeIdAllocator; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.relation.DomainTranslator.ExtractionResult; import com.facebook.presto.spi.relation.RowExpression; import com.facebook.presto.spi.relation.VariableReferenceExpression; @@ -36,7 +37,6 @@ import com.facebook.presto.sql.planner.plan.RowNumberNode; import com.facebook.presto.sql.planner.plan.SimplePlanRewriter; import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; -import com.facebook.presto.sql.planner.plan.WindowNode; import com.facebook.presto.sql.relational.FunctionResolution; import com.facebook.presto.sql.relational.RowExpressionDeterminismEvaluator; import com.facebook.presto.sql.relational.RowExpressionDomainTranslator; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/WindowNodeUtil.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/WindowNodeUtil.java index 784a3baa7470c..2a2650545b9da 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/WindowNodeUtil.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/WindowNodeUtil.java @@ -13,26 +13,26 @@ */ package com.facebook.presto.sql.planner.optimizations; +import com.facebook.presto.spi.plan.WindowNode; +import com.facebook.presto.spi.plan.WindowNode.Frame.BoundType; +import com.facebook.presto.spi.plan.WindowNode.Frame.WindowType; import com.facebook.presto.spi.relation.RowExpression; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.VariablesExtractor; -import com.facebook.presto.sql.planner.plan.WindowNode; -import com.facebook.presto.sql.planner.plan.WindowNode.Frame.BoundType; -import com.facebook.presto.sql.planner.plan.WindowNode.Frame.WindowType; import com.facebook.presto.sql.tree.FrameBound; import com.facebook.presto.sql.tree.WindowFrame; import com.google.common.collect.ImmutableSet; import java.util.Set; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.BoundType.CURRENT_ROW; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.BoundType.FOLLOWING; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.BoundType.PRECEDING; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.BoundType.UNBOUNDED_FOLLOWING; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.BoundType.UNBOUNDED_PRECEDING; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.WindowType.GROUPS; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.WindowType.RANGE; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.WindowType.ROWS; +import static com.facebook.presto.spi.plan.WindowNode.Frame.BoundType.CURRENT_ROW; +import static com.facebook.presto.spi.plan.WindowNode.Frame.BoundType.FOLLOWING; +import static com.facebook.presto.spi.plan.WindowNode.Frame.BoundType.PRECEDING; +import static com.facebook.presto.spi.plan.WindowNode.Frame.BoundType.UNBOUNDED_FOLLOWING; +import static com.facebook.presto.spi.plan.WindowNode.Frame.BoundType.UNBOUNDED_PRECEDING; +import static com.facebook.presto.spi.plan.WindowNode.Frame.WindowType.GROUPS; +import static com.facebook.presto.spi.plan.WindowNode.Frame.WindowType.RANGE; +import static com.facebook.presto.spi.plan.WindowNode.Frame.WindowType.ROWS; import static java.lang.String.format; public final class WindowNodeUtil diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/joins/JoinGraph.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/joins/JoinGraph.java index 86a53a889b545..a54a8dfe028d5 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/joins/JoinGraph.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/joins/JoinGraph.java @@ -15,6 +15,7 @@ import com.facebook.presto.spi.plan.EquiJoinClause; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeId; import com.facebook.presto.spi.plan.ProjectNode; @@ -23,7 +24,6 @@ import com.facebook.presto.sql.planner.iterative.GroupReference; import com.facebook.presto.sql.planner.iterative.Lookup; import com.facebook.presto.sql.planner.plan.InternalPlanVisitor; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMultimap; import com.google.common.collect.Multimap; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/plan/InternalPlanVisitor.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/plan/InternalPlanVisitor.java index 6cd875cd05c0b..4c182a68ef64a 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/plan/InternalPlanVisitor.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/plan/InternalPlanVisitor.java @@ -42,41 +42,16 @@ public R visitIndexSource(IndexSourceNode node, C context) return visitPlan(node, context); } - public R visitJoin(JoinNode node, C context) - { - return visitPlan(node, context); - } - - public R visitSemiJoin(SemiJoinNode node, C context) - { - return visitPlan(node, context); - } - - public R visitSpatialJoin(SpatialJoinNode node, C context) - { - return visitPlan(node, context); - } - public R visitIndexJoin(IndexJoinNode node, C context) { return visitPlan(node, context); } - public R visitMergeJoin(MergeJoinNode node, C context) - { - return visitPlan(node, context); - } - public R visitOffset(OffsetNode node, C context) { return visitPlan(node, context); } - public R visitWindow(WindowNode node, C context) - { - return visitPlan(node, context); - } - public R visitTableWriter(TableWriterNode node, C context) { return visitPlan(node, context); @@ -176,6 +151,7 @@ public R visitStatsEquivalentPlanNodeWithLimit(StatsEquivalentPlanNodeWithLimit { return visitPlan(node, context); } + public R visitSequence(SequenceNode node, C context) { return visitPlan(node, context); diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/plan/Patterns.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/plan/Patterns.java index 0c3e2afc9052a..532f9896d1a25 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/plan/Patterns.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/plan/Patterns.java @@ -21,17 +21,21 @@ import com.facebook.presto.spi.plan.CteReferenceNode; import com.facebook.presto.spi.plan.FilterNode; import com.facebook.presto.spi.plan.IntersectNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.JoinType; import com.facebook.presto.spi.plan.LimitNode; import com.facebook.presto.spi.plan.MarkDistinctNode; import com.facebook.presto.spi.plan.OutputNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.ProjectNode; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.spi.plan.SortNode; +import com.facebook.presto.spi.plan.SpatialJoinNode; import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.spi.plan.TopNNode; import com.facebook.presto.spi.plan.UnionNode; import com.facebook.presto.spi.plan.ValuesNode; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.relation.RowExpression; import com.facebook.presto.spi.relation.VariableReferenceExpression; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/plan/TopNRowNumberNode.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/plan/TopNRowNumberNode.java index 1e3f002dc79a3..bc6ee14a5e81f 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/plan/TopNRowNumberNode.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/plan/TopNRowNumberNode.java @@ -17,8 +17,8 @@ import com.facebook.presto.spi.plan.OrderingScheme; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeId; +import com.facebook.presto.spi.plan.WindowNode.Specification; import com.facebook.presto.spi.relation.VariableReferenceExpression; -import com.facebook.presto.sql.planner.plan.WindowNode.Specification; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.collect.ImmutableList; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/planPrinter/PlanPrinter.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/planPrinter/PlanPrinter.java index a5caacd845e7e..d46c188058de9 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/planPrinter/PlanPrinter.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/planPrinter/PlanPrinter.java @@ -34,6 +34,7 @@ import com.facebook.presto.spi.SourceLocation; import com.facebook.presto.spi.TableHandle; import com.facebook.presto.spi.function.FunctionHandle; +import com.facebook.presto.spi.plan.AbstractJoinNode; import com.facebook.presto.spi.plan.AggregationNode; import com.facebook.presto.spi.plan.Assignments; import com.facebook.presto.spi.plan.CteConsumerNode; @@ -44,8 +45,10 @@ import com.facebook.presto.spi.plan.ExceptNode; import com.facebook.presto.spi.plan.FilterNode; import com.facebook.presto.spi.plan.IntersectNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.LimitNode; import com.facebook.presto.spi.plan.MarkDistinctNode; +import com.facebook.presto.spi.plan.MergeJoinNode; import com.facebook.presto.spi.plan.OrderingScheme; import com.facebook.presto.spi.plan.OutputNode; import com.facebook.presto.spi.plan.Partitioning; @@ -54,12 +57,15 @@ import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeId; import com.facebook.presto.spi.plan.ProjectNode; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.spi.plan.SortNode; +import com.facebook.presto.spi.plan.SpatialJoinNode; import com.facebook.presto.spi.plan.StageExecutionDescriptor; import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.spi.plan.TopNNode; import com.facebook.presto.spi.plan.UnionNode; import com.facebook.presto.spi.plan.ValuesNode; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.relation.CallExpression; import com.facebook.presto.spi.relation.RowExpression; import com.facebook.presto.spi.relation.VariableReferenceExpression; @@ -69,7 +75,6 @@ import com.facebook.presto.sql.planner.TypeProvider; import com.facebook.presto.sql.planner.iterative.GroupReference; import com.facebook.presto.sql.planner.optimizations.JoinNodeUtils; -import com.facebook.presto.sql.planner.plan.AbstractJoinNode; import com.facebook.presto.sql.planner.plan.ApplyNode; import com.facebook.presto.sql.planner.plan.AssignUniqueId; import com.facebook.presto.sql.planner.plan.DeleteNode; @@ -80,16 +85,12 @@ import com.facebook.presto.sql.planner.plan.IndexJoinNode; import com.facebook.presto.sql.planner.plan.IndexSourceNode; import com.facebook.presto.sql.planner.plan.InternalPlanVisitor; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.LateralJoinNode; -import com.facebook.presto.sql.planner.plan.MergeJoinNode; import com.facebook.presto.sql.planner.plan.MetadataDeleteNode; import com.facebook.presto.sql.planner.plan.RemoteSourceNode; import com.facebook.presto.sql.planner.plan.RowNumberNode; import com.facebook.presto.sql.planner.plan.SampleNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; import com.facebook.presto.sql.planner.plan.SequenceNode; -import com.facebook.presto.sql.planner.plan.SpatialJoinNode; import com.facebook.presto.sql.planner.plan.StatisticAggregations; import com.facebook.presto.sql.planner.plan.StatisticsWriterNode; import com.facebook.presto.sql.planner.plan.TableFinishNode; @@ -97,7 +98,6 @@ import com.facebook.presto.sql.planner.plan.TableWriterNode; import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; import com.facebook.presto.sql.planner.plan.UnnestNode; -import com.facebook.presto.sql.planner.plan.WindowNode; import com.facebook.presto.sql.relational.FunctionResolution; import com.facebook.presto.sql.relational.RowExpressionDeterminismEvaluator; import com.facebook.presto.sql.tree.ComparisonExpression; @@ -133,6 +133,7 @@ import static com.facebook.presto.expressions.DynamicFilters.extractDynamicFilters; import static com.facebook.presto.metadata.CastType.CAST; import static com.facebook.presto.sql.analyzer.ExpressionTreeUtils.createSymbolReference; +import static com.facebook.presto.sql.planner.SortExpressionExtractor.getSortExpressionContext; import static com.facebook.presto.sql.planner.SystemPartitioningHandle.SINGLE_DISTRIBUTION; import static com.facebook.presto.sql.planner.planPrinter.JsonRenderer.JsonPlanFragment; import static com.facebook.presto.sql.planner.planPrinter.PlanNodeStatsSummarizer.aggregateStageStats; @@ -431,17 +432,17 @@ private static String formatFragment( TypeProvider typeProvider = TypeProvider.fromVariables(fragment.getVariables()); builder.append( - textLogicalPlan( - fragment.getRoot(), - typeProvider, - Optional.of(fragment.getStageExecutionDescriptor()), - fragment.getStatsAndCosts().orElse(StatsAndCosts.empty()), - planNodeStats, - functionAndTypeManager, - session, - 1, - verbose, - isVerboseOptimizerInfoEnabled(session))) + textLogicalPlan( + fragment.getRoot(), + typeProvider, + Optional.of(fragment.getStageExecutionDescriptor()), + fragment.getStatsAndCosts().orElse(StatsAndCosts.empty()), + planNodeStats, + functionAndTypeManager, + session, + 1, + verbose, + isVerboseOptimizerInfoEnabled(session))) .append("\n"); return builder.toString(); @@ -529,7 +530,7 @@ public Void visitJoin(JoinNode node, Void context) nodeOutput.appendDetails(getDynamicFilterAssignments(node)); } - node.getSortExpressionContext(functionAndTypeManager) + getSortExpressionContext(node, functionAndTypeManager) .ifPresent(sortContext -> nodeOutput.appendDetails("SortExpression[%s]", formatter.apply(sortContext.getSortExpression()))); node.getLeft().accept(this, context); node.getRight().accept(this, context); @@ -751,12 +752,12 @@ public Void visitWindow(WindowNode node, Void context) if (node.getOrderingScheme().isPresent()) { OrderingScheme orderingScheme = node.getOrderingScheme().get(); args.add(format("order by (%s)", Stream.concat( - orderingScheme.getOrderByVariables().stream() - .limit(node.getPreSortedOrderPrefix()) - .map(symbol -> "<" + symbol + " " + orderingScheme.getOrdering(symbol) + ">"), - orderingScheme.getOrderByVariables().stream() - .skip(node.getPreSortedOrderPrefix()) - .map(symbol -> symbol + " " + orderingScheme.getOrdering(symbol))) + orderingScheme.getOrderByVariables().stream() + .limit(node.getPreSortedOrderPrefix()) + .map(symbol -> "<" + symbol + " " + orderingScheme.getOrdering(symbol) + ">"), + orderingScheme.getOrderByVariables().stream() + .skip(node.getPreSortedOrderPrefix()) + .map(symbol -> symbol + " " + orderingScheme.getOrdering(symbol))) .collect(Collectors.joining(", ")))); } diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/sanity/CheckUnsupportedExternalFunctions.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/sanity/CheckUnsupportedExternalFunctions.java index caa6be0cd41e9..d6410a7be0ca2 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/sanity/CheckUnsupportedExternalFunctions.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/sanity/CheckUnsupportedExternalFunctions.java @@ -20,11 +20,11 @@ import com.facebook.presto.spi.WarningCollector; import com.facebook.presto.spi.plan.AggregationNode; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.sql.planner.SimplePlanVisitor; import com.facebook.presto.sql.planner.optimizations.ExternalCallExpressionChecker; import com.facebook.presto.sql.planner.plan.ApplyNode; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.LateralJoinNode; import static com.facebook.presto.spi.StandardErrorCode.NOT_SUPPORTED; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/sanity/CheckUnsupportedPrestissimoTypes.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/sanity/CheckUnsupportedPrestissimoTypes.java index 128ab8b5f0ea9..29217e5451577 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/sanity/CheckUnsupportedPrestissimoTypes.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/sanity/CheckUnsupportedPrestissimoTypes.java @@ -26,6 +26,7 @@ import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.ProjectNode; import com.facebook.presto.spi.plan.ValuesNode; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.relation.CallExpression; import com.facebook.presto.spi.relation.ConstantExpression; import com.facebook.presto.spi.relation.InputReferenceExpression; @@ -35,7 +36,6 @@ import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.analyzer.FeaturesConfig; import com.facebook.presto.sql.planner.SimplePlanVisitor; -import com.facebook.presto.sql.planner.plan.WindowNode; import java.util.List; import java.util.Objects; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/sanity/DynamicFiltersChecker.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/sanity/DynamicFiltersChecker.java index 458fdb3209478..740aece9d2e17 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/sanity/DynamicFiltersChecker.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/sanity/DynamicFiltersChecker.java @@ -18,14 +18,14 @@ import com.facebook.presto.expressions.DynamicFilters.DynamicFilterPlaceholder; import com.facebook.presto.metadata.Metadata; import com.facebook.presto.spi.WarningCollector; +import com.facebook.presto.spi.plan.AbstractJoinNode; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.OutputNode; import com.facebook.presto.spi.plan.PlanNode; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.spi.relation.RowExpression; -import com.facebook.presto.sql.planner.plan.AbstractJoinNode; import com.facebook.presto.sql.planner.plan.InternalPlanVisitor; -import com.facebook.presto.sql.planner.plan.JoinNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; import com.facebook.presto.sql.relational.Expressions; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; @@ -133,9 +133,9 @@ public Set visitFilter(FilterNode node, Void context) private static List extractDynamicPredicates(RowExpression expression) { return Expressions.uniqueSubExpressions(expression).stream() - .map(DynamicFilters::getPlaceholder) - .filter(Optional::isPresent) - .map(Optional::get) - .collect(toImmutableList()); + .map(DynamicFilters::getPlaceholder) + .filter(Optional::isPresent) + .map(Optional::get) + .collect(toImmutableList()); } } diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/sanity/TypeValidator.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/sanity/TypeValidator.java index e85eb1883e57c..15e4fd3f61401 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/sanity/TypeValidator.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/sanity/TypeValidator.java @@ -26,11 +26,11 @@ import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.ProjectNode; import com.facebook.presto.spi.plan.UnionNode; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.relation.CallExpression; import com.facebook.presto.spi.relation.RowExpression; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.SimplePlanVisitor; -import com.facebook.presto.sql.planner.plan.WindowNode; import java.util.List; import java.util.Map; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/sanity/ValidateDependenciesChecker.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/sanity/ValidateDependenciesChecker.java index b68c1ab2845e8..bf5a5a2226dcb 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/sanity/ValidateDependenciesChecker.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/sanity/ValidateDependenciesChecker.java @@ -26,17 +26,22 @@ import com.facebook.presto.spi.plan.ExceptNode; import com.facebook.presto.spi.plan.FilterNode; import com.facebook.presto.spi.plan.IntersectNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.LimitNode; import com.facebook.presto.spi.plan.MarkDistinctNode; +import com.facebook.presto.spi.plan.MergeJoinNode; import com.facebook.presto.spi.plan.OutputNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.ProjectNode; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.spi.plan.SetOperationNode; import com.facebook.presto.spi.plan.SortNode; +import com.facebook.presto.spi.plan.SpatialJoinNode; import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.spi.plan.TopNNode; import com.facebook.presto.spi.plan.UnionNode; import com.facebook.presto.spi.plan.ValuesNode; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.relation.RowExpression; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.VariablesExtractor; @@ -51,17 +56,13 @@ import com.facebook.presto.sql.planner.plan.IndexJoinNode; import com.facebook.presto.sql.planner.plan.IndexSourceNode; import com.facebook.presto.sql.planner.plan.InternalPlanVisitor; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.LateralJoinNode; -import com.facebook.presto.sql.planner.plan.MergeJoinNode; import com.facebook.presto.sql.planner.plan.MetadataDeleteNode; import com.facebook.presto.sql.planner.plan.OffsetNode; import com.facebook.presto.sql.planner.plan.RemoteSourceNode; import com.facebook.presto.sql.planner.plan.RowNumberNode; import com.facebook.presto.sql.planner.plan.SampleNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; import com.facebook.presto.sql.planner.plan.SequenceNode; -import com.facebook.presto.sql.planner.plan.SpatialJoinNode; import com.facebook.presto.sql.planner.plan.StatisticAggregationsDescriptor; import com.facebook.presto.sql.planner.plan.StatisticAggregationsDescriptor.ColumnStatisticsDescriptor; import com.facebook.presto.sql.planner.plan.StatisticsWriterNode; @@ -70,21 +71,18 @@ import com.facebook.presto.sql.planner.plan.TableWriterNode; import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; import com.facebook.presto.sql.planner.plan.UnnestNode; -import com.facebook.presto.sql.planner.plan.WindowNode; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import java.util.Collection; -import java.util.HashSet; import java.util.List; import java.util.Map; -import java.util.Optional; import java.util.Set; +import static com.facebook.presto.spi.plan.JoinNode.checkLeftOutputVariablesBeforeRight; import static com.facebook.presto.sql.planner.optimizations.AggregationNodeUtils.extractAggregationUniqueVariables; import static com.facebook.presto.sql.planner.optimizations.IndexJoinOptimizer.IndexKeyTracer; import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkState; import static com.google.common.collect.ImmutableSet.toImmutableSet; /** @@ -104,23 +102,6 @@ public static void validate(PlanNode plan) plan.accept(new Visitor(), ImmutableSet.of()); } - public static void checkLeftOutputVariablesBeforeRight(List leftVariables, List outputVariables) - { - int leftMaxPosition = -1; - Optional rightMinPosition = Optional.empty(); - Set leftVariablesSet = new HashSet<>(leftVariables); - for (int i = 0; i < outputVariables.size(); i++) { - VariableReferenceExpression variable = outputVariables.get(i); - if (leftVariablesSet.contains(variable)) { - leftMaxPosition = i; - } - else if (!rightMinPosition.isPresent()) { - rightMinPosition = Optional.of(i); - } - } - checkState(!rightMinPosition.isPresent() || rightMinPosition.get() > leftMaxPosition, "Not all left output variables are before right output variables"); - } - private static class Visitor extends InternalPlanVisitor> { diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/sanity/ValidateStreamingJoins.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/sanity/ValidateStreamingJoins.java index 412c39ff02720..0db581314f7b4 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/sanity/ValidateStreamingJoins.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/sanity/ValidateStreamingJoins.java @@ -17,13 +17,13 @@ import com.facebook.presto.metadata.Metadata; import com.facebook.presto.spi.WarningCollector; import com.facebook.presto.spi.plan.EquiJoinClause; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.analyzer.FeaturesConfig; import com.facebook.presto.sql.planner.optimizations.StreamPreferredProperties; import com.facebook.presto.sql.planner.optimizations.StreamPropertyDerivations.StreamProperties; import com.facebook.presto.sql.planner.plan.InternalPlanVisitor; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.RemoteSourceNode; import com.facebook.presto.sql.planner.sanity.PlanChecker.Checker; diff --git a/presto-main/src/main/java/com/facebook/presto/util/GraphvizPrinter.java b/presto-main/src/main/java/com/facebook/presto/util/GraphvizPrinter.java index d3937d02c0f7a..0ce2526c42fdd 100644 --- a/presto-main/src/main/java/com/facebook/presto/util/GraphvizPrinter.java +++ b/presto-main/src/main/java/com/facebook/presto/util/GraphvizPrinter.java @@ -19,28 +19,33 @@ import com.facebook.presto.cost.StatsAndCosts; import com.facebook.presto.metadata.FunctionAndTypeManager; import com.facebook.presto.spi.ConnectorSession; +import com.facebook.presto.spi.plan.AbstractJoinNode; import com.facebook.presto.spi.plan.AggregationNode; import com.facebook.presto.spi.plan.AggregationNode.Aggregation; import com.facebook.presto.spi.plan.DistinctLimitNode; import com.facebook.presto.spi.plan.EquiJoinClause; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.LimitNode; import com.facebook.presto.spi.plan.MarkDistinctNode; +import com.facebook.presto.spi.plan.MergeJoinNode; import com.facebook.presto.spi.plan.OutputNode; import com.facebook.presto.spi.plan.PlanFragmentId; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.ProjectNode; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.spi.plan.SortNode; +import com.facebook.presto.spi.plan.SpatialJoinNode; import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.spi.plan.TopNNode; import com.facebook.presto.spi.plan.UnionNode; import com.facebook.presto.spi.plan.ValuesNode; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.relation.RowExpression; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.PlanFragment; import com.facebook.presto.sql.planner.SubPlan; import com.facebook.presto.sql.planner.optimizations.JoinNodeUtils; -import com.facebook.presto.sql.planner.plan.AbstractJoinNode; import com.facebook.presto.sql.planner.plan.ApplyNode; import com.facebook.presto.sql.planner.plan.AssignUniqueId; import com.facebook.presto.sql.planner.plan.DeleteNode; @@ -51,23 +56,18 @@ import com.facebook.presto.sql.planner.plan.IndexJoinNode; import com.facebook.presto.sql.planner.plan.IndexSourceNode; import com.facebook.presto.sql.planner.plan.InternalPlanVisitor; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.LateralJoinNode; -import com.facebook.presto.sql.planner.plan.MergeJoinNode; import com.facebook.presto.sql.planner.plan.MetadataDeleteNode; import com.facebook.presto.sql.planner.plan.RemoteSourceNode; import com.facebook.presto.sql.planner.plan.RowNumberNode; import com.facebook.presto.sql.planner.plan.SampleNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; import com.facebook.presto.sql.planner.plan.SequenceNode; -import com.facebook.presto.sql.planner.plan.SpatialJoinNode; import com.facebook.presto.sql.planner.plan.StatisticsWriterNode; import com.facebook.presto.sql.planner.plan.TableFinishNode; import com.facebook.presto.sql.planner.plan.TableWriterMergeNode; import com.facebook.presto.sql.planner.plan.TableWriterNode; import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; import com.facebook.presto.sql.planner.plan.UnnestNode; -import com.facebook.presto.sql.planner.plan.WindowNode; import com.facebook.presto.sql.planner.planPrinter.RowExpressionFormatter; import com.facebook.presto.sql.tree.ComparisonExpression; import com.facebook.presto.sql.tree.Expression; @@ -364,10 +364,10 @@ public Void visitMarkDistinct(MarkDistinctNode node, Void context) public Void visitWindow(WindowNode node, Void context) { printNode(node, "Window", format("partition by = %s|order by = %s", - Joiner.on(", ").join(node.getPartitionBy()), - node.getOrderingScheme() - .map(orderingScheme -> Joiner.on(", ").join(orderingScheme.getOrderByVariables())) - .orElse("")), + Joiner.on(", ").join(node.getPartitionBy()), + node.getOrderingScheme() + .map(orderingScheme -> Joiner.on(", ").join(orderingScheme.getOrderByVariables())) + .orElse("")), NODE_COLORS.get(NodeType.WINDOW)); return node.getSource().accept(this, context); } diff --git a/presto-main/src/test/java/com/facebook/presto/cost/TestCostCalculator.java b/presto-main/src/test/java/com/facebook/presto/cost/TestCostCalculator.java index 6684a2b5af1b9..be87bddc7b209 100644 --- a/presto-main/src/test/java/com/facebook/presto/cost/TestCostCalculator.java +++ b/presto-main/src/test/java/com/facebook/presto/cost/TestCostCalculator.java @@ -37,6 +37,7 @@ import com.facebook.presto.spi.plan.CteReferenceNode; import com.facebook.presto.spi.plan.EquiJoinClause; import com.facebook.presto.spi.plan.JoinDistributionType; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.JoinType; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeId; @@ -57,7 +58,6 @@ import com.facebook.presto.sql.planner.SubPlan; import com.facebook.presto.sql.planner.TypeProvider; import com.facebook.presto.sql.planner.plan.ExchangeNode; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.JsonCodecSimplePlanFragmentSerde; import com.facebook.presto.sql.planner.plan.SequenceNode; import com.facebook.presto.sql.planner.sanity.PlanCheckerProviderManager; diff --git a/presto-main/src/test/java/com/facebook/presto/execution/scheduler/TestPhasedExecutionSchedule.java b/presto-main/src/test/java/com/facebook/presto/execution/scheduler/TestPhasedExecutionSchedule.java index 6af221cd777d7..301d6559a1d95 100644 --- a/presto-main/src/test/java/com/facebook/presto/execution/scheduler/TestPhasedExecutionSchedule.java +++ b/presto-main/src/test/java/com/facebook/presto/execution/scheduler/TestPhasedExecutionSchedule.java @@ -17,6 +17,7 @@ import com.facebook.presto.cost.StatsAndCosts; import com.facebook.presto.spi.ConnectorId; import com.facebook.presto.spi.TableHandle; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.JoinType; import com.facebook.presto.spi.plan.Partitioning; import com.facebook.presto.spi.plan.PartitioningScheme; @@ -28,7 +29,6 @@ import com.facebook.presto.spi.plan.UnionNode; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.PlanFragment; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.RemoteSourceNode; import com.facebook.presto.testing.TestingMetadata.TestingColumnHandle; import com.facebook.presto.testing.TestingMetadata.TestingTableHandle; diff --git a/presto-main/src/test/java/com/facebook/presto/execution/scheduler/TestSourcePartitionedScheduler.java b/presto-main/src/test/java/com/facebook/presto/execution/scheduler/TestSourcePartitionedScheduler.java index d9c2227da6da5..dba204ed39644 100644 --- a/presto-main/src/test/java/com/facebook/presto/execution/scheduler/TestSourcePartitionedScheduler.java +++ b/presto-main/src/test/java/com/facebook/presto/execution/scheduler/TestSourcePartitionedScheduler.java @@ -40,6 +40,7 @@ import com.facebook.presto.spi.QueryId; import com.facebook.presto.spi.TableHandle; import com.facebook.presto.spi.connector.ConnectorPartitionHandle; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.Partitioning; import com.facebook.presto.spi.plan.PartitioningScheme; import com.facebook.presto.spi.plan.PlanFragmentId; @@ -51,7 +52,6 @@ import com.facebook.presto.split.SplitSource; import com.facebook.presto.sql.planner.PlanFragment; import com.facebook.presto.sql.planner.SubPlan; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.RemoteSourceNode; import com.facebook.presto.testing.TestingMetadata.TestingColumnHandle; import com.facebook.presto.testing.TestingMetadata.TestingTableHandle; diff --git a/presto-main/src/test/java/com/facebook/presto/geospatial/TestSpatialJoinOperator.java b/presto-main/src/test/java/com/facebook/presto/geospatial/TestSpatialJoinOperator.java index 303231ca30c6d..bdde2214538af 100644 --- a/presto-main/src/test/java/com/facebook/presto/geospatial/TestSpatialJoinOperator.java +++ b/presto-main/src/test/java/com/facebook/presto/geospatial/TestSpatialJoinOperator.java @@ -32,8 +32,8 @@ import com.facebook.presto.operator.ValuesOperator; import com.facebook.presto.spi.PrestoException; import com.facebook.presto.spi.plan.PlanNodeId; +import com.facebook.presto.spi.plan.SpatialJoinNode.Type; import com.facebook.presto.sql.gen.JoinFilterFunctionCompiler; -import com.facebook.presto.sql.planner.plan.SpatialJoinNode.Type; import com.facebook.presto.testing.MaterializedResult; import com.facebook.presto.testing.TestingTaskContext; import com.google.common.collect.ImmutableList; @@ -64,8 +64,8 @@ import static com.facebook.presto.geospatial.GeoFunctions.stPoint; import static com.facebook.presto.geospatial.type.GeometryType.GEOMETRY; import static com.facebook.presto.operator.OperatorAssertion.assertOperatorEqualsIgnoreOrder; -import static com.facebook.presto.sql.planner.plan.SpatialJoinNode.Type.INNER; -import static com.facebook.presto.sql.planner.plan.SpatialJoinNode.Type.LEFT; +import static com.facebook.presto.spi.plan.SpatialJoinNode.Type.INNER; +import static com.facebook.presto.spi.plan.SpatialJoinNode.Type.LEFT; import static com.facebook.presto.testing.MaterializedResult.resultBuilder; import static java.util.concurrent.Executors.newScheduledThreadPool; import static java.util.concurrent.TimeUnit.SECONDS; diff --git a/presto-main/src/test/java/com/facebook/presto/operator/TestWindowOperator.java b/presto-main/src/test/java/com/facebook/presto/operator/TestWindowOperator.java index 7a7cf8e2f27d5..1133a0e21a144 100644 --- a/presto-main/src/test/java/com/facebook/presto/operator/TestWindowOperator.java +++ b/presto-main/src/test/java/com/facebook/presto/operator/TestWindowOperator.java @@ -58,9 +58,9 @@ import static com.facebook.presto.operator.OperatorAssertion.toMaterializedResult; import static com.facebook.presto.operator.OperatorAssertion.toPages; import static com.facebook.presto.operator.WindowFunctionDefinition.window; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.BoundType.UNBOUNDED_FOLLOWING; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.BoundType.UNBOUNDED_PRECEDING; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.WindowType.RANGE; +import static com.facebook.presto.spi.plan.WindowNode.Frame.BoundType.UNBOUNDED_FOLLOWING; +import static com.facebook.presto.spi.plan.WindowNode.Frame.BoundType.UNBOUNDED_PRECEDING; +import static com.facebook.presto.spi.plan.WindowNode.Frame.WindowType.RANGE; import static com.facebook.presto.testing.MaterializedResult.resultBuilder; import static com.facebook.presto.testing.TestingTaskContext.createTaskContext; import static io.airlift.units.DataSize.succinctBytes; diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/TestCanonicalize.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/TestCanonicalize.java index 2b02db1c7c099..1fd0121232144 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/TestCanonicalize.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/TestCanonicalize.java @@ -15,12 +15,12 @@ import com.facebook.presto.Session; import com.facebook.presto.common.block.SortOrder; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.sql.planner.assertions.BasePlanTest; import com.facebook.presto.sql.planner.assertions.ExpectedValueProvider; import com.facebook.presto.sql.planner.iterative.IterativeOptimizer; import com.facebook.presto.sql.planner.iterative.rule.RemoveRedundantIdentityProjections; import com.facebook.presto.sql.planner.optimizations.UnaliasSymbolReferences; -import com.facebook.presto.sql.planner.plan.WindowNode; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/TestDynamicFilter.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/TestDynamicFilter.java index 807fa01acd8ff..d3fb2657d722a 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/TestDynamicFilter.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/TestDynamicFilter.java @@ -15,10 +15,10 @@ import com.facebook.presto.Session; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.sql.planner.assertions.BasePlanTest; import com.facebook.presto.sql.planner.plan.EnforceSingleRowNode; import com.facebook.presto.sql.planner.plan.ExchangeNode; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import org.testng.annotations.Test; diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/TestEffectivePredicateExtractor.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/TestEffectivePredicateExtractor.java index 4e76ddd5d271c..82c9767c73781 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/TestEffectivePredicateExtractor.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/TestEffectivePredicateExtractor.java @@ -26,6 +26,7 @@ import com.facebook.presto.spi.plan.AggregationNode; import com.facebook.presto.spi.plan.EquiJoinClause; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.JoinType; import com.facebook.presto.spi.plan.LimitNode; import com.facebook.presto.spi.plan.Ordering; @@ -33,15 +34,14 @@ import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeId; import com.facebook.presto.spi.plan.ProjectNode; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.spi.plan.SortNode; import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.spi.plan.TopNNode; import com.facebook.presto.spi.plan.UnionNode; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.relation.RowExpression; import com.facebook.presto.spi.relation.VariableReferenceExpression; -import com.facebook.presto.sql.planner.plan.JoinNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; -import com.facebook.presto.sql.planner.plan.WindowNode; import com.facebook.presto.sql.relational.FunctionResolution; import com.facebook.presto.sql.relational.RowExpressionDeterminismEvaluator; import com.facebook.presto.sql.relational.RowExpressionDomainTranslator; diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/TestLocalDynamicFilter.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/TestLocalDynamicFilter.java index 9a35a1530cfd6..e197478bc7f97 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/TestLocalDynamicFilter.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/TestLocalDynamicFilter.java @@ -18,11 +18,11 @@ import com.facebook.presto.common.predicate.Domain; import com.facebook.presto.common.predicate.TupleDomain; import com.facebook.presto.expressions.DynamicFilters.DynamicFilterPlaceholder; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.Optimizer; import com.facebook.presto.sql.planner.assertions.BasePlanTest; import com.facebook.presto.sql.planner.optimizations.PlanNodeSearcher; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMultimap; diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/TestLogicalPlanner.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/TestLogicalPlanner.java index 1a967e51a145c..d3c644b793ca6 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/TestLogicalPlanner.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/TestLogicalPlanner.java @@ -21,9 +21,11 @@ import com.facebook.presto.spi.plan.AggregationNode; import com.facebook.presto.spi.plan.DistinctLimitNode; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.LimitNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.ProjectNode; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.spi.plan.SortNode; import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.spi.plan.TopNNode; @@ -40,9 +42,7 @@ import com.facebook.presto.sql.planner.plan.EnforceSingleRowNode; import com.facebook.presto.sql.planner.plan.ExchangeNode; import com.facebook.presto.sql.planner.plan.IndexJoinNode; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.LateralJoinNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; import com.facebook.presto.sql.planner.plan.StatisticsWriterNode; import com.facebook.presto.sql.tree.LongLiteral; import com.facebook.presto.testing.QueryRunner; @@ -454,7 +454,7 @@ public void testDistinctOverConstants() project(ImmutableMap.of("hash", expression("combine_hash(bigint '0', coalesce(\"$operator$hash_code\"(orderstatus_35), 0))")), project( ImmutableMap.of("orderstatus_35", expression("'F'")), - tableScan("orders", ImmutableMap.of()))))))); + tableScan("orders", ImmutableMap.of()))))))); } @Test @@ -793,12 +793,12 @@ public void testCorrelatedScalarSubqueryInSelect() noJoinReordering(), anyTree( markDistinct("is_distinct", ImmutableList.of("unique"), - join(LEFT, ImmutableList.of(equiJoinClause("n_regionkey", "r_regionkey")), - assignUniqueId("unique", - exchange(REMOTE_STREAMING, REPARTITION, - anyTree(tableScan("nation", ImmutableMap.of("n_regionkey", "regionkey"))))), - anyTree( - tableScan("region", ImmutableMap.of("r_regionkey", "regionkey"))))))); + join(LEFT, ImmutableList.of(equiJoinClause("n_regionkey", "r_regionkey")), + assignUniqueId("unique", + exchange(REMOTE_STREAMING, REPARTITION, + anyTree(tableScan("nation", ImmutableMap.of("n_regionkey", "regionkey"))))), + anyTree( + tableScan("region", ImmutableMap.of("r_regionkey", "regionkey"))))))); } @Test @@ -1008,11 +1008,11 @@ public void testPickTableLayoutWithFilter() output( project( ImmutableMap.of("expr_2", expression("5")), - filter("orderkey = BIGINT '5'", - constrainedTableScanWithTableLayout( - "orders", - ImmutableMap.of(), - ImmutableMap.of("orderkey", "orderkey")))))); + filter("orderkey = BIGINT '5'", + constrainedTableScanWithTableLayout( + "orders", + ImmutableMap.of(), + ImmutableMap.of("orderkey", "orderkey")))))); assertPlan( "SELECT orderkey FROM orders WHERE orderstatus='F'", output( diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/TestPredicatePushdown.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/TestPredicatePushdown.java index 481a77b164c01..df925d425befc 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/TestPredicatePushdown.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/TestPredicatePushdown.java @@ -17,13 +17,13 @@ import com.facebook.presto.common.function.OperatorType; import com.facebook.presto.spi.plan.EquiJoinClause; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.sql.planner.assertions.BasePlanTest; import com.facebook.presto.sql.planner.assertions.PlanMatchPattern; import com.facebook.presto.sql.planner.iterative.rule.test.RuleTester; import com.facebook.presto.sql.planner.optimizations.PlanOptimizer; import com.facebook.presto.sql.planner.optimizations.PredicatePushDown; import com.facebook.presto.sql.planner.plan.ExchangeNode; -import com.facebook.presto.sql.planner.plan.WindowNode; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import org.testng.annotations.Test; diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/TestQuantifiedComparison.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/TestQuantifiedComparison.java index 1a2619355f1ff..e1bbdf3a79ab1 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/TestQuantifiedComparison.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/TestQuantifiedComparison.java @@ -14,9 +14,9 @@ package com.facebook.presto.sql.planner; import com.facebook.presto.spi.plan.AggregationNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.ValuesNode; import com.facebook.presto.sql.planner.assertions.BasePlanTest; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.google.common.collect.ImmutableMap; import org.testng.annotations.Test; diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/TestTypeValidator.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/TestTypeValidator.java index e89b0cc8a9bc6..f11154453ab41 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/TestTypeValidator.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/TestTypeValidator.java @@ -31,11 +31,11 @@ import com.facebook.presto.spi.plan.ProjectNode; import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.spi.plan.UnionNode; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.relation.CallExpression; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.TestingRowExpressionTranslator; import com.facebook.presto.sql.parser.SqlParser; -import com.facebook.presto.sql.planner.plan.WindowNode; import com.facebook.presto.sql.planner.sanity.TypeValidator; import com.facebook.presto.sql.tree.Cast; import com.facebook.presto.sql.tree.Expression; @@ -65,11 +65,11 @@ import static com.facebook.presto.spi.plan.AggregationNode.Step.PARTIAL; import static com.facebook.presto.spi.plan.AggregationNode.Step.SINGLE; import static com.facebook.presto.spi.plan.AggregationNode.singleGroupingSet; +import static com.facebook.presto.spi.plan.WindowNode.Frame.BoundType.UNBOUNDED_FOLLOWING; +import static com.facebook.presto.spi.plan.WindowNode.Frame.BoundType.UNBOUNDED_PRECEDING; +import static com.facebook.presto.spi.plan.WindowNode.Frame.WindowType.RANGE; import static com.facebook.presto.sql.analyzer.TypeSignatureProvider.fromTypes; import static com.facebook.presto.sql.planner.PlannerUtils.newVariable; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.BoundType.UNBOUNDED_FOLLOWING; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.BoundType.UNBOUNDED_PRECEDING; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.WindowType.RANGE; import static com.facebook.presto.sql.relational.Expressions.call; public class TestTypeValidator diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/TestWindowFrameRange.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/TestWindowFrameRange.java index 60a7de2440026..ab4e2108088e3 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/TestWindowFrameRange.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/TestWindowFrameRange.java @@ -34,6 +34,10 @@ import static com.facebook.presto.common.type.DecimalType.createDecimalType; import static com.facebook.presto.common.type.IntegerType.INTEGER; import static com.facebook.presto.metadata.FunctionAndTypeManager.createTestFunctionAndTypeManager; +import static com.facebook.presto.spi.plan.WindowNode.Frame.BoundType.CURRENT_ROW; +import static com.facebook.presto.spi.plan.WindowNode.Frame.BoundType.FOLLOWING; +import static com.facebook.presto.spi.plan.WindowNode.Frame.BoundType.PRECEDING; +import static com.facebook.presto.spi.plan.WindowNode.Frame.WindowType.RANGE; import static com.facebook.presto.sql.Optimizer.PlanStage.CREATED; import static com.facebook.presto.sql.Optimizer.PlanStage.OPTIMIZED; import static com.facebook.presto.sql.analyzer.TypeSignatureProvider.fromTypes; @@ -47,10 +51,6 @@ import static com.facebook.presto.sql.planner.assertions.PlanMatchPattern.values; import static com.facebook.presto.sql.planner.assertions.PlanMatchPattern.window; import static com.facebook.presto.sql.planner.assertions.PlanMatchPattern.windowFrame; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.BoundType.CURRENT_ROW; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.BoundType.FOLLOWING; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.BoundType.PRECEDING; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.WindowType.RANGE; public class TestWindowFrameRange extends BasePlanTest @@ -85,15 +85,15 @@ public void testFramePrecedingWithSortKeyCoercions() Optional.empty(), Optional.empty(), Optional.empty())), - project(// coerce sort key to calculate frame start values - ImmutableMap.of("key_for_frame_start_comparison", expression("CAST(key AS decimal(12, 1))"), "key", expression("key"), "frame_start_value", expression("CAST(key AS decimal(10, 0)) - x")), - node( - FilterNode.class, - values( - ImmutableList.of("key", "x"), - ImmutableList.of( - ImmutableList.of(new LongLiteral("1"), new DecimalLiteral("11")), // 11 is the java type representation of 1.1 - ImmutableList.of(new LongLiteral("2"), new DecimalLiteral("22")))))))); + project(// coerce sort key to calculate frame start values + ImmutableMap.of("key_for_frame_start_comparison", expression("CAST(key AS decimal(12, 1))"), "key", expression("key"), "frame_start_value", expression("CAST(key AS decimal(10, 0)) - x")), + node( + FilterNode.class, + values( + ImmutableList.of("key", "x"), + ImmutableList.of( + ImmutableList.of(new LongLiteral("1"), new DecimalLiteral("11")), // 11 is the java type representation of 1.1 + ImmutableList.of(new LongLiteral("2"), new DecimalLiteral("22")))))))); assertPlan(sql, OPTIMIZED, pattern); } diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/DynamicFilterMatcher.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/DynamicFilterMatcher.java index b9b863f819923..6da1c108a3f7f 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/DynamicFilterMatcher.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/DynamicFilterMatcher.java @@ -19,11 +19,11 @@ import com.facebook.presto.expressions.LogicalRowExpressions; import com.facebook.presto.metadata.Metadata; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.relation.RowExpression; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.Symbol; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.relational.FunctionResolution; import com.facebook.presto.sql.relational.RowExpressionDeterminismEvaluator; import com.facebook.presto.sql.tree.Expression; diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/JoinMatcher.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/JoinMatcher.java index 73b49fdc017f1..5a1e771b11e0c 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/JoinMatcher.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/JoinMatcher.java @@ -18,10 +18,10 @@ import com.facebook.presto.metadata.Metadata; import com.facebook.presto.spi.plan.EquiJoinClause; import com.facebook.presto.spi.plan.JoinDistributionType; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.JoinType; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.relation.RowExpression; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.tree.Expression; import com.google.common.collect.ImmutableList; diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/MergeJoinMatcher.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/MergeJoinMatcher.java index 57c363ebb0c70..b00943d72e03f 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/MergeJoinMatcher.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/MergeJoinMatcher.java @@ -18,9 +18,9 @@ import com.facebook.presto.metadata.Metadata; import com.facebook.presto.spi.plan.EquiJoinClause; import com.facebook.presto.spi.plan.JoinType; +import com.facebook.presto.spi.plan.MergeJoinNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.relation.RowExpression; -import com.facebook.presto.sql.planner.plan.MergeJoinNode; import com.facebook.presto.sql.tree.Expression; import com.google.common.collect.ImmutableList; diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/PlanMatchPattern.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/PlanMatchPattern.java index 320c24100f969..4ff9c15143597 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/PlanMatchPattern.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/PlanMatchPattern.java @@ -28,17 +28,24 @@ import com.facebook.presto.spi.plan.FilterNode; import com.facebook.presto.spi.plan.IntersectNode; import com.facebook.presto.spi.plan.JoinDistributionType; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.JoinType; import com.facebook.presto.spi.plan.LimitNode; import com.facebook.presto.spi.plan.MarkDistinctNode; +import com.facebook.presto.spi.plan.MergeJoinNode; import com.facebook.presto.spi.plan.OutputNode; import com.facebook.presto.spi.plan.PlanFragmentId; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.ProjectNode; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.spi.plan.SortNode; +import com.facebook.presto.spi.plan.SpatialJoinNode; import com.facebook.presto.spi.plan.TopNNode; import com.facebook.presto.spi.plan.UnionNode; import com.facebook.presto.spi.plan.ValuesNode; +import com.facebook.presto.spi.plan.WindowNode; +import com.facebook.presto.spi.plan.WindowNode.Frame.BoundType; +import com.facebook.presto.spi.plan.WindowNode.Frame.WindowType; import com.facebook.presto.spi.statistics.SourceInfo; import com.facebook.presto.spi.statistics.SourceInfo.ConfidenceLevel; import com.facebook.presto.sql.parser.ParsingOptions; @@ -52,19 +59,12 @@ import com.facebook.presto.sql.planner.plan.ExchangeNode; import com.facebook.presto.sql.planner.plan.GroupIdNode; import com.facebook.presto.sql.planner.plan.IndexSourceNode; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.LateralJoinNode; -import com.facebook.presto.sql.planner.plan.MergeJoinNode; import com.facebook.presto.sql.planner.plan.OffsetNode; import com.facebook.presto.sql.planner.plan.RemoteSourceNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; import com.facebook.presto.sql.planner.plan.SequenceNode; -import com.facebook.presto.sql.planner.plan.SpatialJoinNode; import com.facebook.presto.sql.planner.plan.TableWriterNode; import com.facebook.presto.sql.planner.plan.UnnestNode; -import com.facebook.presto.sql.planner.plan.WindowNode; -import com.facebook.presto.sql.planner.plan.WindowNode.Frame.BoundType; -import com.facebook.presto.sql.planner.plan.WindowNode.Frame.WindowType; import com.facebook.presto.sql.tree.Expression; import com.facebook.presto.sql.tree.FunctionCall; import com.facebook.presto.sql.tree.QualifiedName; diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/SemiJoinMatcher.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/SemiJoinMatcher.java index c7280c66c49c9..89233bf371b68 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/SemiJoinMatcher.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/SemiJoinMatcher.java @@ -17,7 +17,7 @@ import com.facebook.presto.cost.StatsProvider; import com.facebook.presto.metadata.Metadata; import com.facebook.presto.spi.plan.PlanNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; +import com.facebook.presto.spi.plan.SemiJoinNode; import java.util.Optional; diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/SpatialJoinMatcher.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/SpatialJoinMatcher.java index da86c123f4854..49424bbaea537 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/SpatialJoinMatcher.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/SpatialJoinMatcher.java @@ -17,8 +17,8 @@ import com.facebook.presto.cost.StatsProvider; import com.facebook.presto.metadata.Metadata; import com.facebook.presto.spi.plan.PlanNode; -import com.facebook.presto.sql.planner.plan.SpatialJoinNode; -import com.facebook.presto.sql.planner.plan.SpatialJoinNode.Type; +import com.facebook.presto.spi.plan.SpatialJoinNode; +import com.facebook.presto.spi.plan.SpatialJoinNode.Type; import com.facebook.presto.sql.tree.Expression; import java.util.Optional; diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/SpecificationProvider.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/SpecificationProvider.java index 65275157980d1..1caf681620280 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/SpecificationProvider.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/SpecificationProvider.java @@ -16,8 +16,8 @@ import com.facebook.presto.common.block.SortOrder; import com.facebook.presto.spi.plan.Ordering; import com.facebook.presto.spi.plan.OrderingScheme; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.relation.VariableReferenceExpression; -import com.facebook.presto.sql.planner.plan.WindowNode; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; @@ -92,15 +92,15 @@ public static boolean matchSpecification(WindowNode.Specification actual, Window return actual.getPartitionBy().stream().map(VariableReferenceExpression::getName).collect(toImmutableList()) .equals(expected.getPartitionBy().stream().map(VariableReferenceExpression::getName).collect(toImmutableList())) && actual.getOrderingScheme().map(orderingScheme -> orderingScheme.getOrderByVariables().stream() - .map(VariableReferenceExpression::getName) - .collect(toImmutableSet()) - .equals(expected.getOrderingScheme().get().getOrderByVariables().stream() .map(VariableReferenceExpression::getName) - .collect(toImmutableSet())) && - orderingScheme.getOrderingsMap().entrySet().stream() - .collect(toImmutableMap(entry -> entry.getKey().getName(), Map.Entry::getValue)) - .equals(expected.getOrderingScheme().get().getOrderingsMap().entrySet().stream() - .collect(toImmutableMap(entry -> entry.getKey().getName(), Map.Entry::getValue)))) + .collect(toImmutableSet()) + .equals(expected.getOrderingScheme().get().getOrderByVariables().stream() + .map(VariableReferenceExpression::getName) + .collect(toImmutableSet())) && + orderingScheme.getOrderingsMap().entrySet().stream() + .collect(toImmutableMap(entry -> entry.getKey().getName(), Map.Entry::getValue)) + .equals(expected.getOrderingScheme().get().getOrderingsMap().entrySet().stream() + .collect(toImmutableMap(entry -> entry.getKey().getName(), Map.Entry::getValue)))) .orElse(true); } @@ -109,15 +109,15 @@ public static boolean matchSpecification(WindowNode.Specification actual, Specif return actual.getPartitionBy().stream().map(VariableReferenceExpression::getName).collect(toImmutableList()) .equals(expected.partitionBy.stream().map(SymbolAlias::toString).collect(toImmutableList())) && actual.getOrderingScheme().map(orderingScheme -> orderingScheme.getOrderByVariables().stream() - .map(VariableReferenceExpression::getName) - .collect(toImmutableSet()) - .equals(expected.orderBy.stream() - .map(SymbolAlias::toString) - .collect(toImmutableSet())) && - orderingScheme.getOrderingsMap().entrySet().stream() - .collect(toImmutableMap(entry -> entry.getKey().getName(), Map.Entry::getValue)) - .equals(expected.orderings.entrySet().stream() - .collect(toImmutableMap(entry -> entry.getKey().toString(), Map.Entry::getValue)))) + .map(VariableReferenceExpression::getName) + .collect(toImmutableSet()) + .equals(expected.orderBy.stream() + .map(SymbolAlias::toString) + .collect(toImmutableSet())) && + orderingScheme.getOrderingsMap().entrySet().stream() + .collect(toImmutableMap(entry -> entry.getKey().getName(), Map.Entry::getValue)) + .equals(expected.orderings.entrySet().stream() + .collect(toImmutableMap(entry -> entry.getKey().toString(), Map.Entry::getValue)))) .orElse(true); } } diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/TopNRowNumberMatcher.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/TopNRowNumberMatcher.java index db4ee729c3e33..c4d66eb263263 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/TopNRowNumberMatcher.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/TopNRowNumberMatcher.java @@ -18,10 +18,10 @@ import com.facebook.presto.cost.StatsProvider; import com.facebook.presto.metadata.Metadata; import com.facebook.presto.spi.plan.PlanNode; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.Symbol; import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; -import com.facebook.presto.sql.planner.plan.WindowNode; import java.util.List; import java.util.Map; diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/WindowFrameProvider.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/WindowFrameProvider.java index f9c551513e0ab..60bc5ed9f7557 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/WindowFrameProvider.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/WindowFrameProvider.java @@ -14,10 +14,10 @@ package com.facebook.presto.sql.planner.assertions; import com.facebook.presto.common.type.Type; +import com.facebook.presto.spi.plan.WindowNode; +import com.facebook.presto.spi.plan.WindowNode.Frame.BoundType; +import com.facebook.presto.spi.plan.WindowNode.Frame.WindowType; import com.facebook.presto.spi.relation.VariableReferenceExpression; -import com.facebook.presto.sql.planner.plan.WindowNode; -import com.facebook.presto.sql.planner.plan.WindowNode.Frame.BoundType; -import com.facebook.presto.sql.planner.plan.WindowNode.Frame.WindowType; import com.facebook.presto.sql.tree.Expression; import java.util.Optional; diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/WindowFunctionMatcher.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/WindowFunctionMatcher.java index 2a5c99948dab4..fd9be1cd2f430 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/WindowFunctionMatcher.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/WindowFunctionMatcher.java @@ -17,10 +17,10 @@ import com.facebook.presto.metadata.Metadata; import com.facebook.presto.spi.function.FunctionHandle; import com.facebook.presto.spi.plan.PlanNode; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.relation.RowExpression; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.VariablesExtractor; -import com.facebook.presto.sql.planner.plan.WindowNode; import com.facebook.presto.sql.tree.Expression; import com.facebook.presto.sql.tree.FunctionCall; import com.facebook.presto.sql.tree.QualifiedName; diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/WindowMatcher.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/WindowMatcher.java index 4cff3d3b6b284..02aa69afdd716 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/WindowMatcher.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/WindowMatcher.java @@ -19,9 +19,9 @@ import com.facebook.presto.metadata.Metadata; import com.facebook.presto.spi.function.FunctionHandle; import com.facebook.presto.spi.plan.PlanNode; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.Symbol; -import com.facebook.presto.sql.planner.plan.WindowNode; import com.facebook.presto.sql.tree.FunctionCall; import java.util.LinkedList; diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestCrossJoinWithArrayContainsToInnerJoin.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestCrossJoinWithArrayContainsToInnerJoin.java index 282a031c8f04a..46449824c267c 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestCrossJoinWithArrayContainsToInnerJoin.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestCrossJoinWithArrayContainsToInnerJoin.java @@ -178,9 +178,9 @@ public void testArrayContainsWithCast() public void testArrayContainsWithCastBothRules() { tester().assertThat( - ImmutableSet.of( - new PushDownFilterExpressionEvaluationThroughCrossJoin(getFunctionManager()), - new CrossJoinWithArrayContainsToInnerJoin(getMetadata().getFunctionAndTypeManager()))) + ImmutableSet.of( + new PushDownFilterExpressionEvaluationThroughCrossJoin(getFunctionManager()), + new CrossJoinWithArrayContainsToInnerJoin(getMetadata().getFunctionAndTypeManager()))) .setSystemProperty(REWRITE_CROSS_JOIN_ARRAY_CONTAINS_TO_INNER_JOIN, "true") .on(p -> { @@ -211,9 +211,9 @@ public void testArrayContainsWithCastBothRules() public void testArrayContainsWithCastBothRules2() { tester().assertThat( - ImmutableSet.of( - new PushDownFilterExpressionEvaluationThroughCrossJoin(getFunctionManager()), - new CrossJoinWithArrayContainsToInnerJoin(getMetadata().getFunctionAndTypeManager()))) + ImmutableSet.of( + new PushDownFilterExpressionEvaluationThroughCrossJoin(getFunctionManager()), + new CrossJoinWithArrayContainsToInnerJoin(getMetadata().getFunctionAndTypeManager()))) .setSystemProperty(REWRITE_CROSS_JOIN_ARRAY_CONTAINS_TO_INNER_JOIN, "true") .on(p -> { @@ -244,9 +244,9 @@ public void testArrayContainsWithCastBothRules2() public void testArrayContainsWithCastBothRulesArrayRightSide() { tester().assertThat( - ImmutableSet.of( - new PushDownFilterExpressionEvaluationThroughCrossJoin(getFunctionManager()), - new CrossJoinWithArrayContainsToInnerJoin(getMetadata().getFunctionAndTypeManager()))) + ImmutableSet.of( + new PushDownFilterExpressionEvaluationThroughCrossJoin(getFunctionManager()), + new CrossJoinWithArrayContainsToInnerJoin(getMetadata().getFunctionAndTypeManager()))) .setSystemProperty(REWRITE_CROSS_JOIN_ARRAY_CONTAINS_TO_INNER_JOIN, "true") .on(p -> { @@ -277,9 +277,9 @@ public void testArrayContainsWithCastBothRulesArrayRightSide() public void testArrayContainsWithCoalesceBothRules() { tester().assertThat( - ImmutableSet.of( - new PushDownFilterExpressionEvaluationThroughCrossJoin(getFunctionManager()), - new CrossJoinWithArrayContainsToInnerJoin(getMetadata().getFunctionAndTypeManager()))) + ImmutableSet.of( + new PushDownFilterExpressionEvaluationThroughCrossJoin(getFunctionManager()), + new CrossJoinWithArrayContainsToInnerJoin(getMetadata().getFunctionAndTypeManager()))) .setSystemProperty(REWRITE_CROSS_JOIN_ARRAY_CONTAINS_TO_INNER_JOIN, "true") .on(p -> { @@ -311,9 +311,9 @@ public void testArrayContainsWithCoalesceBothRules() public void testArrayContainsWithCoalesceBothRulesArrayOnRight() { tester().assertThat( - ImmutableSet.of( - new PushDownFilterExpressionEvaluationThroughCrossJoin(getFunctionManager()), - new CrossJoinWithArrayContainsToInnerJoin(getMetadata().getFunctionAndTypeManager()))) + ImmutableSet.of( + new PushDownFilterExpressionEvaluationThroughCrossJoin(getFunctionManager()), + new CrossJoinWithArrayContainsToInnerJoin(getMetadata().getFunctionAndTypeManager()))) .setSystemProperty(REWRITE_CROSS_JOIN_ARRAY_CONTAINS_TO_INNER_JOIN, "true") .on(p -> { diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestCrossJoinWithArrayNotContainsToAntiJoin.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestCrossJoinWithArrayNotContainsToAntiJoin.java index 4ed9fc57ddb8e..da8920658463d 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestCrossJoinWithArrayNotContainsToAntiJoin.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestCrossJoinWithArrayNotContainsToAntiJoin.java @@ -16,12 +16,12 @@ import com.facebook.presto.common.type.ArrayType; import com.facebook.presto.spi.plan.Assignments; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.JoinType; import com.facebook.presto.spi.plan.ProjectNode; import com.facebook.presto.spi.plan.ValuesNode; import com.facebook.presto.sql.planner.iterative.rule.test.BaseRuleTest; import com.facebook.presto.sql.planner.plan.EnforceSingleRowNode; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.UnnestNode; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestDetermineSemiJoinDistributionType.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestDetermineSemiJoinDistributionType.java index 33a910abae616..1c6b9f1125cb4 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestDetermineSemiJoinDistributionType.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestDetermineSemiJoinDistributionType.java @@ -50,12 +50,12 @@ import static com.facebook.presto.common.type.BigintType.BIGINT; import static com.facebook.presto.common.type.VarcharType.createUnboundedVarcharType; import static com.facebook.presto.expressions.LogicalRowExpressions.TRUE_CONSTANT; +import static com.facebook.presto.spi.plan.SemiJoinNode.DistributionType.PARTITIONED; +import static com.facebook.presto.spi.plan.SemiJoinNode.DistributionType.REPLICATED; import static com.facebook.presto.sql.planner.assertions.PlanMatchPattern.filter; import static com.facebook.presto.sql.planner.assertions.PlanMatchPattern.semiJoin; import static com.facebook.presto.sql.planner.assertions.PlanMatchPattern.values; import static com.facebook.presto.sql.planner.iterative.rule.test.PlanBuilder.constantExpressions; -import static com.facebook.presto.sql.planner.plan.SemiJoinNode.DistributionType.PARTITIONED; -import static com.facebook.presto.sql.planner.plan.SemiJoinNode.DistributionType.REPLICATED; @Test(singleThreaded = true) public class TestDetermineSemiJoinDistributionType diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestEliminateCrossJoins.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestEliminateCrossJoins.java index f0194625ba4bb..22ce797a161b8 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestEliminateCrossJoins.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestEliminateCrossJoins.java @@ -14,6 +14,7 @@ package com.facebook.presto.sql.planner.iterative.rule; import com.facebook.presto.spi.plan.EquiJoinClause; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.JoinType; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeIdAllocator; @@ -25,7 +26,6 @@ import com.facebook.presto.sql.planner.iterative.rule.test.BaseRuleTest; import com.facebook.presto.sql.planner.iterative.rule.test.PlanBuilder; import com.facebook.presto.sql.planner.optimizations.joins.JoinGraph; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import org.testng.annotations.Test; diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestJoinNodeFlattener.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestJoinNodeFlattener.java index 2e107375df496..f693b69e90667 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestJoinNodeFlattener.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestJoinNodeFlattener.java @@ -17,6 +17,7 @@ import com.facebook.presto.common.function.OperatorType; import com.facebook.presto.spi.plan.Assignments; import com.facebook.presto.spi.plan.EquiJoinClause; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.PlanNodeIdAllocator; import com.facebook.presto.spi.plan.ProjectNode; import com.facebook.presto.spi.plan.ValuesNode; @@ -27,7 +28,6 @@ import com.facebook.presto.sql.analyzer.FunctionAndTypeResolver; import com.facebook.presto.sql.planner.iterative.rule.ReorderJoins.MultiJoinNode; import com.facebook.presto.sql.planner.iterative.rule.test.PlanBuilder; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.relational.FunctionResolution; import com.facebook.presto.sql.relational.RowExpressionDeterminismEvaluator; import com.facebook.presto.testing.LocalQueryRunner; diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestLogicalPropertyPropagation.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestLogicalPropertyPropagation.java index 8a0ff3ba597aa..3759e5018adef 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestLogicalPropertyPropagation.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestLogicalPropertyPropagation.java @@ -25,6 +25,7 @@ import com.facebook.presto.spi.plan.Assignments; import com.facebook.presto.spi.plan.EquiJoinClause; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.JoinType; import com.facebook.presto.spi.plan.LimitNode; import com.facebook.presto.spi.plan.LogicalProperties; @@ -43,7 +44,6 @@ import com.facebook.presto.sql.planner.iterative.properties.MaxCardProperty; import com.facebook.presto.sql.planner.iterative.rule.test.BaseRuleTest; import com.facebook.presto.sql.planner.iterative.rule.test.RuleTester; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.relational.FunctionResolution; import com.facebook.presto.testing.TestingTransactionHandle; import com.facebook.presto.tpch.TpchColumnHandle; diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestMergeAdjacentWindows.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestMergeAdjacentWindows.java index d5b9032dde4ac..f0e9d391ec889 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestMergeAdjacentWindows.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestMergeAdjacentWindows.java @@ -18,12 +18,12 @@ import com.facebook.presto.spi.plan.Assignments; import com.facebook.presto.spi.plan.Ordering; import com.facebook.presto.spi.plan.OrderingScheme; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.assertions.ExpectedValueProvider; import com.facebook.presto.sql.planner.assertions.PlanMatchPattern; import com.facebook.presto.sql.planner.iterative.rule.test.BaseRuleTest; import com.facebook.presto.sql.planner.iterative.rule.test.PlanBuilder; -import com.facebook.presto.sql.planner.plan.WindowNode; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import org.testng.annotations.Test; @@ -35,6 +35,12 @@ import static com.facebook.presto.common.type.BigintType.BIGINT; import static com.facebook.presto.common.type.DoubleType.DOUBLE; import static com.facebook.presto.metadata.MetadataManager.createTestMetadataManager; +import static com.facebook.presto.spi.plan.WindowNode.Frame.BoundType.CURRENT_ROW; +import static com.facebook.presto.spi.plan.WindowNode.Frame.BoundType.FOLLOWING; +import static com.facebook.presto.spi.plan.WindowNode.Frame.BoundType.PRECEDING; +import static com.facebook.presto.spi.plan.WindowNode.Frame.BoundType.UNBOUNDED_PRECEDING; +import static com.facebook.presto.spi.plan.WindowNode.Frame.WindowType.RANGE; +import static com.facebook.presto.spi.plan.WindowNode.Frame.WindowType.ROWS; import static com.facebook.presto.sql.analyzer.TypeSignatureProvider.fromTypes; import static com.facebook.presto.sql.planner.assertions.PlanMatchPattern.functionCall; import static com.facebook.presto.sql.planner.assertions.PlanMatchPattern.specification; @@ -42,12 +48,6 @@ import static com.facebook.presto.sql.planner.assertions.PlanMatchPattern.values; import static com.facebook.presto.sql.planner.assertions.PlanMatchPattern.window; import static com.facebook.presto.sql.planner.plan.AssignmentUtils.identityAssignments; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.BoundType.CURRENT_ROW; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.BoundType.FOLLOWING; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.BoundType.PRECEDING; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.BoundType.UNBOUNDED_PRECEDING; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.WindowType.RANGE; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.WindowType.ROWS; import static com.facebook.presto.sql.relational.Expressions.call; import static com.facebook.presto.sql.relational.Expressions.constant; import static com.google.common.collect.ImmutableList.toImmutableList; diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestPruneWindowColumns.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestPruneWindowColumns.java index c777a43a2e4c7..c4f68ef174e8f 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestPruneWindowColumns.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestPruneWindowColumns.java @@ -18,12 +18,12 @@ import com.facebook.presto.spi.plan.Ordering; import com.facebook.presto.spi.plan.OrderingScheme; import com.facebook.presto.spi.plan.PlanNode; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.assertions.ExpectedValueProvider; import com.facebook.presto.sql.planner.assertions.PlanMatchPattern; import com.facebook.presto.sql.planner.iterative.rule.test.BaseRuleTest; import com.facebook.presto.sql.planner.iterative.rule.test.PlanBuilder; -import com.facebook.presto.sql.planner.plan.WindowNode; import com.facebook.presto.sql.tree.Expression; import com.facebook.presto.sql.tree.SymbolReference; import com.google.common.collect.ImmutableList; @@ -40,6 +40,11 @@ import static com.facebook.presto.common.type.BigintType.BIGINT; import static com.facebook.presto.metadata.MetadataManager.createTestMetadataManager; +import static com.facebook.presto.spi.plan.WindowNode.Frame.BoundType.CURRENT_ROW; +import static com.facebook.presto.spi.plan.WindowNode.Frame.BoundType.FOLLOWING; +import static com.facebook.presto.spi.plan.WindowNode.Frame.BoundType.PRECEDING; +import static com.facebook.presto.spi.plan.WindowNode.Frame.BoundType.UNBOUNDED_PRECEDING; +import static com.facebook.presto.spi.plan.WindowNode.Frame.WindowType.RANGE; import static com.facebook.presto.sql.analyzer.TypeSignatureProvider.fromTypes; import static com.facebook.presto.sql.planner.assertions.PlanMatchPattern.expression; import static com.facebook.presto.sql.planner.assertions.PlanMatchPattern.functionCall; @@ -48,11 +53,6 @@ import static com.facebook.presto.sql.planner.assertions.PlanMatchPattern.window; import static com.facebook.presto.sql.planner.assertions.PlanMatchPattern.windowFrame; import static com.facebook.presto.sql.planner.plan.AssignmentUtils.identityAssignments; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.BoundType.CURRENT_ROW; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.BoundType.FOLLOWING; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.BoundType.PRECEDING; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.BoundType.UNBOUNDED_PRECEDING; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.WindowType.RANGE; import static com.facebook.presto.sql.relational.Expressions.call; import static com.google.common.base.Predicates.alwaysTrue; import static com.google.common.collect.ImmutableList.toImmutableList; diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestSwapAdjacentWindowsBySpecifications.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestSwapAdjacentWindowsBySpecifications.java index f5a96cbc91994..9209e2df9cdc4 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestSwapAdjacentWindowsBySpecifications.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestSwapAdjacentWindowsBySpecifications.java @@ -17,11 +17,11 @@ import com.facebook.presto.spi.function.FunctionHandle; import com.facebook.presto.spi.plan.Ordering; import com.facebook.presto.spi.plan.OrderingScheme; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.Symbol; import com.facebook.presto.sql.planner.assertions.ExpectedValueProvider; import com.facebook.presto.sql.planner.iterative.rule.test.BaseRuleTest; -import com.facebook.presto.sql.planner.plan.WindowNode; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import org.testng.annotations.Test; @@ -33,16 +33,16 @@ import static com.facebook.presto.common.type.BigintType.BIGINT; import static com.facebook.presto.common.type.DoubleType.DOUBLE; import static com.facebook.presto.metadata.MetadataManager.createTestMetadataManager; +import static com.facebook.presto.spi.plan.WindowNode.Frame.BoundType.CURRENT_ROW; +import static com.facebook.presto.spi.plan.WindowNode.Frame.BoundType.PRECEDING; +import static com.facebook.presto.spi.plan.WindowNode.Frame.BoundType.UNBOUNDED_PRECEDING; +import static com.facebook.presto.spi.plan.WindowNode.Frame.WindowType.RANGE; +import static com.facebook.presto.spi.plan.WindowNode.Frame.WindowType.ROWS; import static com.facebook.presto.sql.analyzer.TypeSignatureProvider.fromTypes; import static com.facebook.presto.sql.planner.assertions.PlanMatchPattern.functionCall; import static com.facebook.presto.sql.planner.assertions.PlanMatchPattern.specification; import static com.facebook.presto.sql.planner.assertions.PlanMatchPattern.values; import static com.facebook.presto.sql.planner.assertions.PlanMatchPattern.window; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.BoundType.CURRENT_ROW; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.BoundType.PRECEDING; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.BoundType.UNBOUNDED_PRECEDING; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.WindowType.RANGE; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.WindowType.ROWS; import static com.facebook.presto.sql.relational.Expressions.call; public class TestSwapAdjacentWindowsBySpecifications diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestTransformUncorrelatedInPredicateSubqueryToSemiJoin.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestTransformUncorrelatedInPredicateSubqueryToSemiJoin.java index 10a27e13a5494..ace3979f29f19 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestTransformUncorrelatedInPredicateSubqueryToSemiJoin.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestTransformUncorrelatedInPredicateSubqueryToSemiJoin.java @@ -14,9 +14,9 @@ package com.facebook.presto.sql.planner.iterative.rule; import com.facebook.presto.spi.plan.Assignments; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.spi.relation.ExistsExpression; import com.facebook.presto.sql.planner.iterative.rule.test.BaseRuleTest; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; import org.testng.annotations.Test; import java.util.Optional; diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/test/PlanBuilder.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/test/PlanBuilder.java index 7568d1e170494..e9f22a59d7aaf 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/test/PlanBuilder.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/test/PlanBuilder.java @@ -38,6 +38,7 @@ import com.facebook.presto.spi.plan.FilterNode; import com.facebook.presto.spi.plan.IntersectNode; import com.facebook.presto.spi.plan.JoinDistributionType; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.JoinType; import com.facebook.presto.spi.plan.LimitNode; import com.facebook.presto.spi.plan.MarkDistinctNode; @@ -51,11 +52,13 @@ import com.facebook.presto.spi.plan.PlanNodeId; import com.facebook.presto.spi.plan.PlanNodeIdAllocator; import com.facebook.presto.spi.plan.ProjectNode; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.spi.plan.SortNode; import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.spi.plan.TopNNode; import com.facebook.presto.spi.plan.UnionNode; import com.facebook.presto.spi.plan.ValuesNode; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.relation.CallExpression; import com.facebook.presto.spi.relation.RowExpression; import com.facebook.presto.spi.relation.VariableReferenceExpression; @@ -73,17 +76,14 @@ import com.facebook.presto.sql.planner.plan.ExchangeNode; import com.facebook.presto.sql.planner.plan.IndexJoinNode; import com.facebook.presto.sql.planner.plan.IndexSourceNode; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.LateralJoinNode; import com.facebook.presto.sql.planner.plan.OffsetNode; import com.facebook.presto.sql.planner.plan.RemoteSourceNode; import com.facebook.presto.sql.planner.plan.RowNumberNode; import com.facebook.presto.sql.planner.plan.SampleNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; import com.facebook.presto.sql.planner.plan.TableFinishNode; import com.facebook.presto.sql.planner.plan.TableWriterNode; import com.facebook.presto.sql.planner.plan.UnnestNode; -import com.facebook.presto.sql.planner.plan.WindowNode; import com.facebook.presto.sql.relational.FunctionResolution; import com.facebook.presto.sql.relational.SqlToRowExpressionTranslator; import com.facebook.presto.sql.tree.Expression; diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/optimizations/TestEliminateSorts.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/optimizations/TestEliminateSorts.java index e61036d855b60..aa0456e3bcfb3 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/optimizations/TestEliminateSorts.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/optimizations/TestEliminateSorts.java @@ -15,6 +15,7 @@ import com.facebook.presto.Session; import com.facebook.presto.common.block.SortOrder; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.sql.planner.PartitioningProviderManager; import com.facebook.presto.sql.planner.RuleStatsRecorder; import com.facebook.presto.sql.planner.assertions.BasePlanTest; @@ -22,7 +23,6 @@ import com.facebook.presto.sql.planner.assertions.PlanMatchPattern; import com.facebook.presto.sql.planner.iterative.IterativeOptimizer; import com.facebook.presto.sql.planner.iterative.rule.RemoveRedundantIdentityProjections; -import com.facebook.presto.sql.planner.plan.WindowNode; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/optimizations/TestMergeWindows.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/optimizations/TestMergeWindows.java index ef7c94781f0cc..379bb4cfd2780 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/optimizations/TestMergeWindows.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/optimizations/TestMergeWindows.java @@ -15,6 +15,7 @@ import com.facebook.presto.common.block.SortOrder; import com.facebook.presto.spi.plan.JoinType; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.sql.planner.RuleStatsRecorder; import com.facebook.presto.sql.planner.assertions.BasePlanTest; import com.facebook.presto.sql.planner.assertions.ExpectedValueProvider; @@ -23,7 +24,6 @@ import com.facebook.presto.sql.planner.iterative.Rule; import com.facebook.presto.sql.planner.iterative.rule.GatherAndMergeWindows; import com.facebook.presto.sql.planner.iterative.rule.RemoveRedundantIdentityProjections; -import com.facebook.presto.sql.planner.plan.WindowNode; import com.facebook.presto.sql.tree.FrameBound; import com.facebook.presto.sql.tree.WindowFrame; import com.google.common.collect.ImmutableList; diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/optimizations/TestPruneUnreferencedOutputs.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/optimizations/TestPruneUnreferencedOutputs.java index 3b65ee64f1cf0..af11a87d77e33 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/optimizations/TestPruneUnreferencedOutputs.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/optimizations/TestPruneUnreferencedOutputs.java @@ -18,12 +18,12 @@ import com.facebook.presto.spi.plan.Assignments; import com.facebook.presto.spi.plan.Ordering; import com.facebook.presto.spi.plan.OrderingScheme; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.relation.CallExpression; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.assertions.OptimizerAssert; import com.facebook.presto.sql.planner.iterative.rule.test.BaseRuleTest; import com.facebook.presto.sql.planner.iterative.rule.test.RuleTester; -import com.facebook.presto.sql.planner.plan.WindowNode; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableListMultimap; import com.google.common.collect.ImmutableMap; @@ -34,14 +34,14 @@ import static com.facebook.presto.common.type.BigintType.BIGINT; import static com.facebook.presto.common.type.VarcharType.VARCHAR; import static com.facebook.presto.metadata.MetadataManager.createTestMetadataManager; +import static com.facebook.presto.spi.plan.WindowNode.Frame.BoundType.UNBOUNDED_FOLLOWING; +import static com.facebook.presto.spi.plan.WindowNode.Frame.BoundType.UNBOUNDED_PRECEDING; +import static com.facebook.presto.spi.plan.WindowNode.Frame.WindowType.RANGE; import static com.facebook.presto.sql.planner.assertions.PlanMatchPattern.except; import static com.facebook.presto.sql.planner.assertions.PlanMatchPattern.intersect; import static com.facebook.presto.sql.planner.assertions.PlanMatchPattern.output; import static com.facebook.presto.sql.planner.assertions.PlanMatchPattern.project; import static com.facebook.presto.sql.planner.assertions.PlanMatchPattern.values; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.BoundType.UNBOUNDED_FOLLOWING; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.BoundType.UNBOUNDED_PRECEDING; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.WindowType.RANGE; import static com.facebook.presto.sql.relational.Expressions.call; public class TestPruneUnreferencedOutputs diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/optimizations/TestRemoveUnsupportedDynamicFilters.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/optimizations/TestRemoveUnsupportedDynamicFilters.java index 02e7c8c5642bc..f8401d8431668 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/optimizations/TestRemoveUnsupportedDynamicFilters.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/optimizations/TestRemoveUnsupportedDynamicFilters.java @@ -21,6 +21,7 @@ import com.facebook.presto.spi.VariableAllocator; import com.facebook.presto.spi.WarningCollector; import com.facebook.presto.spi.plan.EquiJoinClause; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeIdAllocator; import com.facebook.presto.spi.plan.TableScanNode; @@ -32,7 +33,6 @@ import com.facebook.presto.sql.planner.assertions.PlanMatchPattern; import com.facebook.presto.sql.planner.iterative.rule.RemoveUnsupportedDynamicFilters; import com.facebook.presto.sql.planner.iterative.rule.test.PlanBuilder; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.sanity.DynamicFiltersChecker; import com.facebook.presto.sql.relational.FunctionResolution; import com.facebook.presto.sql.relational.RowExpressionDeterminismEvaluator; diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/optimizations/TestReorderWindows.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/optimizations/TestReorderWindows.java index b98795c2977ad..e35960c601fd8 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/optimizations/TestReorderWindows.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/optimizations/TestReorderWindows.java @@ -14,6 +14,7 @@ package com.facebook.presto.sql.planner.optimizations; import com.facebook.presto.common.block.SortOrder; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.sql.planner.RuleStatsRecorder; import com.facebook.presto.sql.planner.assertions.BasePlanTest; import com.facebook.presto.sql.planner.assertions.ExpectedValueProvider; @@ -21,7 +22,6 @@ import com.facebook.presto.sql.planner.iterative.IterativeOptimizer; import com.facebook.presto.sql.planner.iterative.rule.GatherAndMergeWindows; import com.facebook.presto.sql.planner.iterative.rule.RemoveRedundantIdentityProjections; -import com.facebook.presto.sql.planner.plan.WindowNode; import com.facebook.presto.sql.tree.WindowFrame; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/optimizations/TestUnion.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/optimizations/TestUnion.java index 803fdd076baf9..d85dbcb717fdf 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/optimizations/TestUnion.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/optimizations/TestUnion.java @@ -14,13 +14,13 @@ package com.facebook.presto.sql.planner.optimizations; import com.facebook.presto.spi.plan.AggregationNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.TopNNode; import com.facebook.presto.sql.Optimizer; import com.facebook.presto.sql.planner.Plan; import com.facebook.presto.sql.planner.assertions.BasePlanTest; import com.facebook.presto.sql.planner.plan.ExchangeNode; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.google.common.collect.Iterables; import org.testng.annotations.Test; diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/optimizations/TestWindowFilterPushDown.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/optimizations/TestWindowFilterPushDown.java index 0dfb498a37262..3d0b32fceeb34 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/optimizations/TestWindowFilterPushDown.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/optimizations/TestWindowFilterPushDown.java @@ -15,9 +15,9 @@ import com.facebook.presto.Session; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.sql.planner.assertions.BasePlanTest; import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; -import com.facebook.presto.sql.planner.plan.WindowNode; import org.intellij.lang.annotations.Language; import org.testng.annotations.Test; diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/plan/TestWindowNode.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/plan/TestWindowNode.java index 703fd8d01cf3e..767ce955bb423 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/plan/TestWindowNode.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/plan/TestWindowNode.java @@ -29,6 +29,7 @@ import com.facebook.presto.spi.plan.OrderingScheme; import com.facebook.presto.spi.plan.PlanNodeId; import com.facebook.presto.spi.plan.ValuesNode; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.relation.CallExpression; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.Serialization; @@ -58,10 +59,10 @@ import static com.facebook.presto.common.type.BigintType.BIGINT; import static com.facebook.presto.metadata.FunctionAndTypeManager.createTestFunctionAndTypeManager; import static com.facebook.presto.metadata.MetadataManager.createTestMetadataManager; +import static com.facebook.presto.spi.plan.WindowNode.Frame.BoundType.UNBOUNDED_FOLLOWING; +import static com.facebook.presto.spi.plan.WindowNode.Frame.BoundType.UNBOUNDED_PRECEDING; +import static com.facebook.presto.spi.plan.WindowNode.Frame.WindowType.RANGE; import static com.facebook.presto.sql.analyzer.TypeSignatureProvider.fromTypes; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.BoundType.UNBOUNDED_FOLLOWING; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.BoundType.UNBOUNDED_PRECEDING; -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.WindowType.RANGE; import static com.facebook.presto.sql.relational.Expressions.call; import static com.google.inject.multibindings.Multibinder.newSetBinder; import static org.testng.Assert.assertEquals; diff --git a/presto-main/src/test/java/com/facebook/presto/sql/query/TestSubqueries.java b/presto-main/src/test/java/com/facebook/presto/sql/query/TestSubqueries.java index c2c9664f9c875..262587d6110d5 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/query/TestSubqueries.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/query/TestSubqueries.java @@ -15,11 +15,11 @@ import com.facebook.presto.spi.PrestoException; import com.facebook.presto.spi.plan.AggregationNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.ProjectNode; import com.facebook.presto.spi.plan.ValuesNode; import com.facebook.presto.sql.planner.Plan; import com.facebook.presto.sql.planner.assertions.PlanMatchPattern; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.testing.QueryRunner; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; diff --git a/presto-main/src/test/java/com/facebook/presto/util/TestGraphvizPrinter.java b/presto-main/src/test/java/com/facebook/presto/util/TestGraphvizPrinter.java index 9931090d644b6..7f496a5e41c92 100644 --- a/presto-main/src/test/java/com/facebook/presto/util/TestGraphvizPrinter.java +++ b/presto-main/src/test/java/com/facebook/presto/util/TestGraphvizPrinter.java @@ -19,6 +19,7 @@ import com.facebook.presto.spi.ConnectorTableHandle; import com.facebook.presto.spi.TableHandle; import com.facebook.presto.spi.plan.JoinDistributionType; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.JoinType; import com.facebook.presto.spi.plan.Partitioning; import com.facebook.presto.spi.plan.PartitioningScheme; @@ -30,7 +31,6 @@ import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.PlanFragment; import com.facebook.presto.sql.planner.SubPlan; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.testing.TestingMetadata.TestingTableHandle; import com.facebook.presto.testing.TestingTransactionHandle; import com.google.common.collect.ImmutableList; diff --git a/presto-native-execution/presto_cpp/presto_protocol/core/presto_protocol_core.cpp b/presto-native-execution/presto_cpp/presto_protocol/core/presto_protocol_core.cpp index 38acd7d33419b..763bb62e39426 100644 --- a/presto-native-execution/presto_cpp/presto_protocol/core/presto_protocol_core.cpp +++ b/presto-native-execution/presto_cpp/presto_protocol/core/presto_protocol_core.cpp @@ -641,7 +641,7 @@ void to_json(json& j, const std::shared_ptr& p) { j = *std::static_pointer_cast(p); return; } - if (type == "com.facebook.presto.sql.planner.plan.JoinNode") { + if (type == ".JoinNode") { j = *std::static_pointer_cast(p); return; } @@ -677,7 +677,7 @@ void to_json(json& j, const std::shared_ptr& p) { j = *std::static_pointer_cast(p); return; } - if (type == "com.facebook.presto.sql.planner.plan.SemiJoinNode") { + if (type == ".SemiJoinNode") { j = *std::static_pointer_cast(p); return; } @@ -713,11 +713,11 @@ void to_json(json& j, const std::shared_ptr& p) { j = *std::static_pointer_cast(p); return; } - if (type == "com.facebook.presto.sql.planner.plan.MergeJoinNode") { + if (type == ".MergeJoinNode") { j = *std::static_pointer_cast(p); return; } - if (type == "com.facebook.presto.sql.planner.plan.WindowNode") { + if (type == ".WindowNode") { j = *std::static_pointer_cast(p); return; } @@ -771,7 +771,7 @@ void from_json(const json& j, std::shared_ptr& p) { p = std::static_pointer_cast(k); return; } - if (type == "com.facebook.presto.sql.planner.plan.JoinNode") { + if (type == ".JoinNode") { std::shared_ptr k = std::make_shared(); j.get_to(*k); p = std::static_pointer_cast(k); @@ -825,7 +825,7 @@ void from_json(const json& j, std::shared_ptr& p) { p = std::static_pointer_cast(k); return; } - if (type == "com.facebook.presto.sql.planner.plan.SemiJoinNode") { + if (type == ".SemiJoinNode") { std::shared_ptr k = std::make_shared(); j.get_to(*k); p = std::static_pointer_cast(k); @@ -881,13 +881,13 @@ void from_json(const json& j, std::shared_ptr& p) { p = std::static_pointer_cast(k); return; } - if (type == "com.facebook.presto.sql.planner.plan.MergeJoinNode") { + if (type == ".MergeJoinNode") { std::shared_ptr k = std::make_shared(); j.get_to(*k); p = std::static_pointer_cast(k); return; } - if (type == "com.facebook.presto.sql.planner.plan.WindowNode") { + if (type == ".WindowNode") { std::shared_ptr k = std::make_shared(); j.get_to(*k); p = std::static_pointer_cast(k); @@ -5613,12 +5613,12 @@ void from_json(const json& j, JoinType& e) { } // namespace facebook::presto::protocol namespace facebook::presto::protocol { JoinNode::JoinNode() noexcept { - _type = "com.facebook.presto.sql.planner.plan.JoinNode"; + _type = ".JoinNode"; } void to_json(json& j, const JoinNode& p) { j = json::object(); - j["@type"] = "com.facebook.presto.sql.planner.plan.JoinNode"; + j["@type"] = ".JoinNode"; to_json_key(j, "id", p.id, "JoinNode", "PlanNodeId", "id"); to_json_key(j, "type", p.type, "JoinNode", "JoinType", "type"); to_json_key(j, "left", p.left, "JoinNode", "PlanNode", "left"); @@ -6316,12 +6316,12 @@ void from_json(const json& j, MemoryInfo& p) { } // namespace facebook::presto::protocol namespace facebook::presto::protocol { MergeJoinNode::MergeJoinNode() noexcept { - _type = "com.facebook.presto.sql.planner.plan.MergeJoinNode"; + _type = ".MergeJoinNode"; } void to_json(json& j, const MergeJoinNode& p) { j = json::object(); - j["@type"] = "com.facebook.presto.sql.planner.plan.MergeJoinNode"; + j["@type"] = ".MergeJoinNode"; to_json_key(j, "id", p.id, "MergeJoinNode", "PlanNodeId", "id"); to_json_key(j, "type", p.type, "MergeJoinNode", "JoinType", "type"); to_json_key(j, "left", p.left, "MergeJoinNode", "PlanNode", "left"); @@ -8404,12 +8404,12 @@ void from_json(const json& j, DistributionType& e) { } // namespace facebook::presto::protocol namespace facebook::presto::protocol { SemiJoinNode::SemiJoinNode() noexcept { - _type = "com.facebook.presto.sql.planner.plan.SemiJoinNode"; + _type = ".SemiJoinNode"; } void to_json(json& j, const SemiJoinNode& p) { j = json::object(); - j["@type"] = "com.facebook.presto.sql.planner.plan.SemiJoinNode"; + j["@type"] = ".SemiJoinNode"; to_json_key(j, "id", p.id, "SemiJoinNode", "PlanNodeId", "id"); to_json_key(j, "source", p.source, "SemiJoinNode", "PlanNode", "source"); to_json_key( @@ -10726,12 +10726,12 @@ void from_json(const json& j, ValuesNode& p) { } // namespace facebook::presto::protocol namespace facebook::presto::protocol { WindowNode::WindowNode() noexcept { - _type = "com.facebook.presto.sql.planner.plan.WindowNode"; + _type = ".WindowNode"; } void to_json(json& j, const WindowNode& p) { j = json::object(); - j["@type"] = "com.facebook.presto.sql.planner.plan.WindowNode"; + j["@type"] = ".WindowNode"; to_json_key( j, "sourceLocation", diff --git a/presto-native-execution/presto_cpp/presto_protocol/core/presto_protocol_core.yml b/presto-native-execution/presto_cpp/presto_protocol/core/presto_protocol_core.yml index 27cf79acf4632..2099bf0845414 100644 --- a/presto-native-execution/presto_cpp/presto_protocol/core/presto_protocol_core.yml +++ b/presto-native-execution/presto_cpp/presto_protocol/core/presto_protocol_core.yml @@ -33,14 +33,14 @@ ExtraFields: std::shared_ptr: sourceLocation Aggregation: - FunctionHandle: functionHandle + FunctionHandle: functionHandle List: arguments PlanNode: - PlanNodeId: id + PlanNodeId: id RemoteTransactionHandle: - Optional: dummy + Optional: dummy AddToOutput: - NodeState @@ -59,8 +59,8 @@ AbstractClasses: super: JsonEncodedSubclass subclasses: - { name: SystemPartitioningHandle, key: $remote } - - { name: HivePartitioningHandle, key: hive} - - { name: TpchPartitioningHandle, key: tpch} + - { name: HivePartitioningHandle, key: hive } + - { name: TpchPartitioningHandle, key: tpch } ConnectorTableHandle: super: JsonEncodedSubclass @@ -100,7 +100,7 @@ AbstractClasses: ConnectorMetadataUpdateHandle: super: JsonEncodedSubclass subclasses: - - { name: HiveMetadataUpdateHandle, key: hive} + - { name: HiveMetadataUpdateHandle, key: hive } ConnectorSplit: super: JsonEncodedSubclass @@ -115,7 +115,7 @@ AbstractClasses: ConnectorHistogram: super: JsonEncodedSubclass subclasses: - - { name: UniformDistributionHistogram, key: uniform-distribution} + - { name: UniformDistributionHistogram, key: uniform-distribution } ExecutionWriterTarget: super: JsonEncodedSubclass @@ -133,7 +133,7 @@ AbstractClasses: - { name: EnforceSingleRowNode, key: com.facebook.presto.sql.planner.plan.EnforceSingleRowNode } - { name: ExchangeNode, key: com.facebook.presto.sql.planner.plan.ExchangeNode } - { name: FilterNode, key: .FilterNode } - - { name: JoinNode, key: com.facebook.presto.sql.planner.plan.JoinNode } + - { name: JoinNode, key: .JoinNode } - { name: LimitNode, key: .LimitNode } - { name: MarkDistinctNode, key: .MarkDistinctNode } - { name: SortNode, key: .SortNode } @@ -142,7 +142,7 @@ AbstractClasses: - { name: RowNumberNode, key: com.facebook.presto.sql.planner.plan.RowNumberNode } - { name: RemoteSourceNode, key: com.facebook.presto.sql.planner.plan.RemoteSourceNode } - { name: SampleNode, key: com.facebook.presto.sql.planner.plan.SampleNode } - - { name: SemiJoinNode, key: com.facebook.presto.sql.planner.plan.SemiJoinNode } + - { name: SemiJoinNode, key: .SemiJoinNode } - { name: TableScanNode, key: .TableScanNode } - { name: TableWriterNode, key: com.facebook.presto.sql.planner.plan.TableWriterNode } - { name: TableWriterMergeNode, key: com.facebook.presto.sql.planner.plan.TableWriterMergeNode } @@ -151,8 +151,8 @@ AbstractClasses: - { name: UnnestNode, key: com.facebook.presto.sql.planner.plan.UnnestNode } - { name: ValuesNode, key: .ValuesNode } - { name: AssignUniqueId, key: com.facebook.presto.sql.planner.plan.AssignUniqueId } - - { name: MergeJoinNode, key: com.facebook.presto.sql.planner.plan.MergeJoinNode } - - { name: WindowNode, key: com.facebook.presto.sql.planner.plan.WindowNode } + - { name: MergeJoinNode, key: .MergeJoinNode } + - { name: WindowNode, key: .WindowNode } RowExpression: super: JsonEncodedSubclass @@ -220,7 +220,7 @@ JavaClasses: - presto-main/src/main/java/com/facebook/presto/sql/planner/plan/TableWriterNode.java - presto-main/src/main/java/com/facebook/presto/sql/planner/plan/TableWriterMergeNode.java - presto-main/src/main/java/com/facebook/presto/sql/planner/plan/UnnestNode.java - - presto-main/src/main/java/com/facebook/presto/sql/planner/plan/WindowNode.java + - presto-spi/src/main/java/com/facebook/presto/spi/plan/WindowNode.java - presto-main/src/main/java/com/facebook/presto/execution/ExecutionFailureInfo.java - presto-main/src/main/java/com/facebook/presto/execution/Location.java - presto-main/src/main/java/com/facebook/presto/metadata/RemoteTransactionHandle.java @@ -294,9 +294,9 @@ JavaClasses: - presto-spi/src/main/java/com/facebook/presto/spi/relation/VariableReferenceExpression.java - presto-main/src/main/java/com/facebook/presto/cost/VariableStatsEstimate.java - presto-main/src/main/java/com/facebook/presto/metadata/MetadataUpdates.java - - presto-main/src/main/java/com/facebook/presto/sql/planner/plan/JoinNode.java - - presto-main/src/main/java/com/facebook/presto/sql/planner/plan/SemiJoinNode.java - - presto-main/src/main/java/com/facebook/presto/sql/planner/plan/MergeJoinNode.java + - presto-spi/src/main/java/com/facebook/presto/spi/plan/JoinNode.java + - presto-spi/src/main/java/com/facebook/presto/spi/plan/SemiJoinNode.java + - presto-spi/src/main/java/com/facebook/presto/spi/plan/MergeJoinNode.java - presto-spi/src/main/java/com/facebook/presto/spi/plan/TopNNode.java - presto-spi/src/main/java/com/facebook/presto/spi/ConnectorMetadataUpdateHandle.java - presto-main/src/main/java/com/facebook/presto/split/EmptySplit.java diff --git a/presto-native-execution/presto_cpp/presto_protocol/presto_protocol.yml b/presto-native-execution/presto_cpp/presto_protocol/presto_protocol.yml index aca25d8926289..4c68f6e8e0736 100644 --- a/presto-native-execution/presto_cpp/presto_protocol/presto_protocol.yml +++ b/presto-native-execution/presto_cpp/presto_protocol/presto_protocol.yml @@ -132,7 +132,7 @@ AbstractClasses: - { name: EnforceSingleRowNode, key: com.facebook.presto.sql.planner.plan.EnforceSingleRowNode } - { name: ExchangeNode, key: com.facebook.presto.sql.planner.plan.ExchangeNode } - { name: FilterNode, key: .FilterNode } - - { name: JoinNode, key: com.facebook.presto.sql.planner.plan.JoinNode } + - { name: JoinNode, key: .JoinNode } - { name: LimitNode, key: .LimitNode } - { name: MarkDistinctNode, key: .MarkDistinctNode } - { name: SortNode, key: .SortNode } @@ -141,7 +141,7 @@ AbstractClasses: - { name: RowNumberNode, key: com.facebook.presto.sql.planner.plan.RowNumberNode } - { name: RemoteSourceNode, key: com.facebook.presto.sql.planner.plan.RemoteSourceNode } - { name: SampleNode, key: com.facebook.presto.sql.planner.plan.SampleNode } - - { name: SemiJoinNode, key: com.facebook.presto.sql.planner.plan.SemiJoinNode } + - { name: SemiJoinNode, key: .SemiJoinNode } - { name: TableScanNode, key: .TableScanNode } - { name: TableWriterNode, key: com.facebook.presto.sql.planner.plan.TableWriterNode } - { name: TableWriterMergeNode, key: com.facebook.presto.sql.planner.plan.TableWriterMergeNode } @@ -150,8 +150,8 @@ AbstractClasses: - { name: UnnestNode, key: com.facebook.presto.sql.planner.plan.UnnestNode } - { name: ValuesNode, key: .ValuesNode } - { name: AssignUniqueId, key: com.facebook.presto.sql.planner.plan.AssignUniqueId } - - { name: MergeJoinNode, key: com.facebook.presto.sql.planner.plan.MergeJoinNode } - - { name: WindowNode, key: com.facebook.presto.sql.planner.plan.WindowNode } + - { name: MergeJoinNode, key: .MergeJoinNode } + - { name: WindowNode, key: .WindowNode } RowExpression: super: JsonEncodedSubclass @@ -224,7 +224,7 @@ JavaClasses: - presto-main/src/main/java/com/facebook/presto/sql/planner/plan/TableWriterNode.java - presto-main/src/main/java/com/facebook/presto/sql/planner/plan/TableWriterMergeNode.java - presto-main/src/main/java/com/facebook/presto/sql/planner/plan/UnnestNode.java - - presto-main/src/main/java/com/facebook/presto/sql/planner/plan/WindowNode.java + - presto-spi/src/main/java/com/facebook/presto/spi/plan/WindowNode.java - presto-main/src/main/java/com/facebook/presto/execution/ExecutionFailureInfo.java - presto-main/src/main/java/com/facebook/presto/execution/Location.java - presto-main/src/main/java/com/facebook/presto/metadata/RemoteTransactionHandle.java @@ -342,9 +342,9 @@ JavaClasses: - presto-spi/src/main/java/com/facebook/presto/spi/relation/VariableReferenceExpression.java - presto-main/src/main/java/com/facebook/presto/cost/VariableStatsEstimate.java - presto-main/src/main/java/com/facebook/presto/metadata/MetadataUpdates.java - - presto-main/src/main/java/com/facebook/presto/sql/planner/plan/JoinNode.java - - presto-main/src/main/java/com/facebook/presto/sql/planner/plan/SemiJoinNode.java - - presto-main/src/main/java/com/facebook/presto/sql/planner/plan/MergeJoinNode.java + - presto-spi/src/main/java/com/facebook/presto/spi/plan/JoinNode.java + - presto-spi/src/main/java/com/facebook/presto/spi/plan/SemiJoinNode.java + - presto-spi/src/main/java/com/facebook/presto/spi/plan/MergeJoinNode.java - presto-spi/src/main/java/com/facebook/presto/spi/plan/TopNNode.java - presto-hive/src/main/java/com/facebook/presto/hive/HiveMetadataUpdateHandle.java - presto-spi/src/main/java/com/facebook/presto/spi/ConnectorMetadataUpdateHandle.java diff --git a/presto-native-execution/src/test/java/com/facebook/presto/nativeworker/TestPrestoNativeHistoryBasedStatistics.java b/presto-native-execution/src/test/java/com/facebook/presto/nativeworker/TestPrestoNativeHistoryBasedStatistics.java index afe5294a37b1d..9e1ccd5007212 100644 --- a/presto-native-execution/src/test/java/com/facebook/presto/nativeworker/TestPrestoNativeHistoryBasedStatistics.java +++ b/presto-native-execution/src/test/java/com/facebook/presto/nativeworker/TestPrestoNativeHistoryBasedStatistics.java @@ -16,8 +16,8 @@ import com.facebook.presto.Session; import com.facebook.presto.execution.SqlQueryManager; import com.facebook.presto.spi.Plugin; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.statistics.HistoryBasedPlanStatisticsProvider; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.testing.ExpectedQueryRunner; import com.facebook.presto.testing.InMemoryHistoryBasedPlanStatisticsProvider; import com.facebook.presto.testing.QueryRunner; @@ -52,7 +52,8 @@ protected void createTables() } @Override - protected QueryRunner createQueryRunner() throws Exception + protected QueryRunner createQueryRunner() + throws Exception { QueryRunner queryRunner = PrestoNativeQueryRunnerUtils.createNativeQueryRunner(true); queryRunner.installPlugin(new Plugin() @@ -67,7 +68,8 @@ public Iterable getHistoryBasedPlanStatistic } @Override - protected ExpectedQueryRunner createExpectedQueryRunner() throws Exception + protected ExpectedQueryRunner createExpectedQueryRunner() + throws Exception { return PrestoNativeQueryRunnerUtils.createJavaQueryRunner(); } diff --git a/presto-spark-base/src/main/java/com/facebook/presto/spark/planner/optimizers/PickJoinSides.java b/presto-spark-base/src/main/java/com/facebook/presto/spark/planner/optimizers/PickJoinSides.java index 9538b67b62c79..f2abc6b253640 100644 --- a/presto-spark-base/src/main/java/com/facebook/presto/spark/planner/optimizers/PickJoinSides.java +++ b/presto-spark-base/src/main/java/com/facebook/presto/spark/planner/optimizers/PickJoinSides.java @@ -33,8 +33,8 @@ import com.facebook.presto.matching.Captures; import com.facebook.presto.matching.Pattern; import com.facebook.presto.metadata.Metadata; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.sql.planner.iterative.Rule; -import com.facebook.presto.sql.planner.plan.JoinNode; import java.util.Optional; diff --git a/presto-spark-base/src/test/java/com/facebook/presto/spark/TestPrestoSparkHistoryBasedTracking.java b/presto-spark-base/src/test/java/com/facebook/presto/spark/TestPrestoSparkHistoryBasedTracking.java index 1d6fe05cb98f6..54ecc1d89bb98 100644 --- a/presto-spark-base/src/test/java/com/facebook/presto/spark/TestPrestoSparkHistoryBasedTracking.java +++ b/presto-spark-base/src/test/java/com/facebook/presto/spark/TestPrestoSparkHistoryBasedTracking.java @@ -16,12 +16,12 @@ import com.facebook.presto.Session; import com.facebook.presto.spi.Plugin; import com.facebook.presto.spi.plan.JoinDistributionType; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.OutputNode; import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.spi.statistics.HistoryBasedPlanStatisticsProvider; import com.facebook.presto.sql.planner.Plan; import com.facebook.presto.sql.planner.optimizations.PlanNodeSearcher; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.testing.InMemoryHistoryBasedPlanStatisticsProvider; import com.facebook.presto.testing.QueryRunner; import com.facebook.presto.tests.AbstractTestQueryFramework; diff --git a/presto-spark-base/src/test/java/com/facebook/presto/spark/planner/TestIterativePlanFragmenter.java b/presto-spark-base/src/test/java/com/facebook/presto/spark/planner/TestIterativePlanFragmenter.java index bd1977befbf1b..379f912e8cba1 100644 --- a/presto-spark-base/src/test/java/com/facebook/presto/spark/planner/TestIterativePlanFragmenter.java +++ b/presto-spark-base/src/test/java/com/facebook/presto/spark/planner/TestIterativePlanFragmenter.java @@ -50,6 +50,7 @@ import com.facebook.presto.spi.plan.AggregationNode; import com.facebook.presto.spi.plan.EquiJoinClause; import com.facebook.presto.spi.plan.JoinDistributionType; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.JoinType; import com.facebook.presto.spi.plan.PartitioningHandle; import com.facebook.presto.spi.plan.PartitioningScheme; @@ -73,7 +74,6 @@ import com.facebook.presto.sql.planner.SubPlan; import com.facebook.presto.sql.planner.TypeProvider; import com.facebook.presto.sql.planner.plan.ExchangeNode; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.JsonCodecSimplePlanFragmentSerde; import com.facebook.presto.sql.planner.sanity.PlanChecker; import com.facebook.presto.sql.planner.sanity.PlanCheckerProviderManager; diff --git a/presto-spark-base/src/test/java/com/facebook/presto/spark/planner/optimizers/TestPickJoinSides.java b/presto-spark-base/src/test/java/com/facebook/presto/spark/planner/optimizers/TestPickJoinSides.java index 9131c09dab1f6..4121f7c9d6451 100644 --- a/presto-spark-base/src/test/java/com/facebook/presto/spark/planner/optimizers/TestPickJoinSides.java +++ b/presto-spark-base/src/test/java/com/facebook/presto/spark/planner/optimizers/TestPickJoinSides.java @@ -60,6 +60,7 @@ import static com.facebook.presto.spark.PrestoSparkSessionProperties.ADAPTIVE_JOIN_SIDE_SWITCHING_ENABLED; import static com.facebook.presto.spi.plan.JoinDistributionType.PARTITIONED; import static com.facebook.presto.spi.plan.JoinDistributionType.REPLICATED; +import static com.facebook.presto.spi.plan.JoinNode.flipType; import static com.facebook.presto.spi.plan.JoinType.INNER; import static com.facebook.presto.spi.plan.JoinType.LEFT; import static com.facebook.presto.spi.plan.JoinType.RIGHT; @@ -70,7 +71,6 @@ import static com.facebook.presto.sql.planner.assertions.PlanMatchPattern.remoteSource; import static com.facebook.presto.sql.planner.assertions.PlanMatchPattern.values; import static com.facebook.presto.sql.planner.iterative.rule.test.PlanBuilder.constantExpressions; -import static com.facebook.presto.sql.planner.plan.JoinNode.flipType; import static com.facebook.presto.testing.TestngUtils.toDataProvider; @Test(singleThreaded = true) diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/plan/AbstractJoinNode.java b/presto-spi/src/main/java/com/facebook/presto/spi/plan/AbstractJoinNode.java similarity index 87% rename from presto-main/src/main/java/com/facebook/presto/sql/planner/plan/AbstractJoinNode.java rename to presto-spi/src/main/java/com/facebook/presto/spi/plan/AbstractJoinNode.java index 25180eae0a187..2d8005827579a 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/plan/AbstractJoinNode.java +++ b/presto-spi/src/main/java/com/facebook/presto/spi/plan/AbstractJoinNode.java @@ -11,18 +11,16 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.facebook.presto.sql.planner.plan; +package com.facebook.presto.spi.plan; import com.facebook.presto.spi.SourceLocation; -import com.facebook.presto.spi.plan.PlanNode; -import com.facebook.presto.spi.plan.PlanNodeId; import com.facebook.presto.spi.relation.VariableReferenceExpression; import java.util.Map; import java.util.Optional; public abstract class AbstractJoinNode - extends InternalPlanNode + extends PlanNode { protected AbstractJoinNode(Optional sourceLocation, PlanNodeId planNodeId, Optional statsEquivalentPlanNode) { diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/plan/JoinNode.java b/presto-spi/src/main/java/com/facebook/presto/spi/plan/JoinNode.java similarity index 79% rename from presto-main/src/main/java/com/facebook/presto/sql/planner/plan/JoinNode.java rename to presto-spi/src/main/java/com/facebook/presto/spi/plan/JoinNode.java index a3f2c455585c4..3f07ca332ac79 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/plan/JoinNode.java +++ b/presto-spi/src/main/java/com/facebook/presto/spi/plan/JoinNode.java @@ -11,48 +11,38 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.facebook.presto.sql.planner.plan; +package com.facebook.presto.spi.plan; -import com.facebook.presto.metadata.FunctionAndTypeManager; import com.facebook.presto.spi.SourceLocation; -import com.facebook.presto.spi.plan.EquiJoinClause; -import com.facebook.presto.spi.plan.JoinDistributionType; -import com.facebook.presto.spi.plan.JoinType; -import com.facebook.presto.spi.plan.LogicalProperties; -import com.facebook.presto.spi.plan.LogicalPropertiesProvider; -import com.facebook.presto.spi.plan.PlanNode; -import com.facebook.presto.spi.plan.PlanNodeId; import com.facebook.presto.spi.relation.RowExpression; import com.facebook.presto.spi.relation.VariableReferenceExpression; -import com.facebook.presto.sql.planner.SortExpressionContext; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; -import com.google.common.annotations.VisibleForTesting; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableSet; import javax.annotation.concurrent.Immutable; +import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.HashSet; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; +import static com.facebook.presto.common.Utils.checkArgument; +import static com.facebook.presto.common.Utils.checkState; import static com.facebook.presto.spi.plan.JoinDistributionType.PARTITIONED; import static com.facebook.presto.spi.plan.JoinDistributionType.REPLICATED; import static com.facebook.presto.spi.plan.JoinType.FULL; import static com.facebook.presto.spi.plan.JoinType.INNER; import static com.facebook.presto.spi.plan.JoinType.LEFT; import static com.facebook.presto.spi.plan.JoinType.RIGHT; -import static com.facebook.presto.sql.planner.SortExpressionExtractor.extractSortExpression; -import static com.facebook.presto.sql.planner.sanity.ValidateDependenciesChecker.checkLeftOutputVariablesBeforeRight; -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.collect.ImmutableList.toImmutableList; import static java.lang.String.format; +import static java.util.Collections.unmodifiableList; +import static java.util.Collections.unmodifiableMap; import static java.util.Objects.requireNonNull; @Immutable @@ -118,21 +108,20 @@ public JoinNode( this.type = type; this.left = left; this.right = right; - this.criteria = ImmutableList.copyOf(criteria); - this.outputVariables = ImmutableList.copyOf(outputVariables); + this.criteria = unmodifiableList(new ArrayList<>(criteria)); + this.outputVariables = unmodifiableList(new ArrayList<>(outputVariables)); this.filter = filter; this.leftHashVariable = leftHashVariable; this.rightHashVariable = rightHashVariable; this.distributionType = distributionType; - this.dynamicFilters = ImmutableMap.copyOf(dynamicFilters); + this.dynamicFilters = unmodifiableMap(new LinkedHashMap<>(dynamicFilters)); checkLeftOutputVariablesBeforeRight(left.getOutputVariables(), outputVariables); - Set inputVariables = ImmutableSet.builder() - .addAll(left.getOutputVariables()) - .addAll(right.getOutputVariables()) - .build(); - checkArgument(new HashSet<>(inputVariables).containsAll(outputVariables), "Left and right join inputs do not contain all output variables"); + Set inputVariables = new HashSet<>(); + inputVariables.addAll(left.getOutputVariables()); + inputVariables.addAll(right.getOutputVariables()); + checkArgument(inputVariables.containsAll(outputVariables), "Left and right join inputs do not contain all output variables"); checkArgument(!isCrossJoin() || inputVariables.size() == outputVariables.size(), "Cross join does not support output variables pruning or reordering"); checkArgument(!(criteria.isEmpty() && leftHashVariable.isPresent()), "Left hash variable is only valid in an equijoin"); @@ -142,15 +131,15 @@ public JoinNode( // The implementation of full outer join only works if the data is hash partitioned. checkArgument( !(distributionType.get() == REPLICATED && type.mustPartition()), - "%s join do not work with %s distribution type", - type, - distributionType.get()); + format("%s join do not work with %s distribution type", + type, + distributionType.get())); // It does not make sense to PARTITION when there is nothing to partition on checkArgument( !(distributionType.get() == PARTITIONED && type.mustReplicate(criteria)), - "Equi criteria are empty, so %s join should not have %s distribution type", - type, - distributionType.get()); + format("Equi criteria are empty, so %s join should not have %s distribution type", + type, + distributionType.get())); } for (VariableReferenceExpression variableReferenceExpression : dynamicFilters.values()) { @@ -162,6 +151,23 @@ public JoinNode( } } + public static void checkLeftOutputVariablesBeforeRight(List leftVariables, List outputVariables) + { + int leftMaxPosition = -1; + Optional rightMinPosition = Optional.empty(); + Set leftVariablesSet = new HashSet<>(leftVariables); + for (int i = 0; i < outputVariables.size(); i++) { + VariableReferenceExpression variable = outputVariables.get(i); + if (leftVariablesSet.contains(variable)) { + leftMaxPosition = i; + } + else if (!rightMinPosition.isPresent()) { + rightMinPosition = Optional.of(i); + } + } + checkState(!rightMinPosition.isPresent() || rightMinPosition.get() > leftMaxPosition, "Not all left output variables are before right output variables"); + } + public JoinNode flipChildren() { return new JoinNode( @@ -177,10 +183,9 @@ public JoinNode flipChildren() rightHashVariable, leftHashVariable, distributionType, - ImmutableMap.of()); // dynamicFilters are invalid after flipping children + Collections.emptyMap()); // dynamicFilters are invalid after flipping children } - @VisibleForTesting public static JoinType flipType(JoinType type) { switch (type) { @@ -199,9 +204,10 @@ public static JoinType flipType(JoinType type) private static List flipJoinCriteria(List joinCriteria) { - return joinCriteria.stream() + List flippedCriteria = joinCriteria.stream() .map(EquiJoinClause::flip) - .collect(toImmutableList()); + .collect(Collectors.toList()); + return unmodifiableList(flippedCriteria); } private static List flipOutputVariables(List outputVariables, PlanNode left, PlanNode right) @@ -212,10 +218,9 @@ private static List flipOutputVariables(List rightVariables = outputVariables.stream() .filter(variable -> right.getOutputVariables().contains(variable)) .collect(Collectors.toList()); - return ImmutableList.builder() - .addAll(rightVariables) - .addAll(leftVariables) - .build(); + List flippedOutput = new ArrayList(rightVariables); + flippedOutput.addAll(leftVariables); + return unmodifiableList(flippedOutput); } @JsonProperty @@ -260,12 +265,6 @@ public Optional getFilter() return filter; } - public Optional getSortExpressionContext(FunctionAndTypeManager functionAndTypeManager) - { - return filter - .flatMap(filter -> extractSortExpression(ImmutableSet.copyOf(right.getOutputVariables()), filter, functionAndTypeManager)); - } - @JsonProperty public Optional getLeftHashVariable() { @@ -281,7 +280,10 @@ public Optional getRightHashVariable() @Override public List getSources() { - return ImmutableList.of(left, right); + List sources = new ArrayList<>(); + sources.add(left); + sources.add(right); + return unmodifiableList(sources); } @Override @@ -312,7 +314,7 @@ public Map getDynamicFilters() } @Override - public R accept(InternalPlanVisitor visitor, C context) + public R accept(PlanVisitor visitor, C context) { return visitor.visitJoin(this, context); } diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/plan/MergeJoinNode.java b/presto-spi/src/main/java/com/facebook/presto/spi/plan/MergeJoinNode.java similarity index 86% rename from presto-main/src/main/java/com/facebook/presto/sql/planner/plan/MergeJoinNode.java rename to presto-spi/src/main/java/com/facebook/presto/spi/plan/MergeJoinNode.java index 6ebdcdb2be711..1e5da4cb92d6c 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/plan/MergeJoinNode.java +++ b/presto-spi/src/main/java/com/facebook/presto/spi/plan/MergeJoinNode.java @@ -11,30 +11,27 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.facebook.presto.sql.planner.plan; +package com.facebook.presto.spi.plan; import com.facebook.presto.spi.SourceLocation; -import com.facebook.presto.spi.plan.EquiJoinClause; -import com.facebook.presto.spi.plan.JoinType; -import com.facebook.presto.spi.plan.PlanNode; -import com.facebook.presto.spi.plan.PlanNodeId; import com.facebook.presto.spi.relation.RowExpression; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; -import com.google.common.collect.ImmutableList; import javax.annotation.concurrent.Immutable; +import java.util.ArrayList; import java.util.List; import java.util.Optional; -import static com.google.common.base.Preconditions.checkArgument; +import static com.facebook.presto.common.Utils.checkArgument; +import static java.util.Collections.unmodifiableList; import static java.util.Objects.requireNonNull; @Immutable public class MergeJoinNode - extends InternalPlanNode + extends PlanNode { private final JoinType type; private final PlanNode left; @@ -48,7 +45,7 @@ public class MergeJoinNode @JsonCreator public MergeJoinNode( Optional sourceLocation, - @JsonProperty ("id") PlanNodeId id, + @JsonProperty("id") PlanNodeId id, @JsonProperty("type") JoinType type, @JsonProperty("left") PlanNode left, @JsonProperty("right") PlanNode right, @@ -78,8 +75,8 @@ public MergeJoinNode( this.type = requireNonNull(type, "type is null"); this.left = requireNonNull(left, "left is null"); this.right = requireNonNull(right, "right is null"); - this.criteria = ImmutableList.copyOf(requireNonNull(criteria, "criteria is null")); - this.outputVariables = ImmutableList.copyOf(requireNonNull(outputVariables, "outputVariables is null")); + this.criteria = unmodifiableList(new ArrayList<>(requireNonNull(criteria, "criteria is null"))); + this.outputVariables = unmodifiableList(new ArrayList<>(requireNonNull(outputVariables, "outputVariables is null"))); this.filter = requireNonNull(filter, "filter is null"); this.leftHashVariable = requireNonNull(leftHashVariable, "leftHashVariable is null"); this.rightHashVariable = requireNonNull(rightHashVariable, "rightHashVariable is null"); @@ -137,7 +134,10 @@ public Optional getRightHashVariable() @Override public List getSources() { - return ImmutableList.of(left, right); + List sources = new ArrayList<>(); + sources.add(left); + sources.add(right); + return unmodifiableList(sources); } @Override @@ -154,7 +154,7 @@ public PlanNode assignStatsEquivalentPlanNode(Optional statsEquivalent } @Override - public R accept(InternalPlanVisitor visitor, C context) + public R accept(PlanVisitor visitor, C context) { return visitor.visitMergeJoin(this, context); } diff --git a/presto-spi/src/main/java/com/facebook/presto/spi/plan/PlanVisitor.java b/presto-spi/src/main/java/com/facebook/presto/spi/plan/PlanVisitor.java index 8caefcb731988..6f3f4634eca46 100644 --- a/presto-spi/src/main/java/com/facebook/presto/spi/plan/PlanVisitor.java +++ b/presto-spi/src/main/java/com/facebook/presto/spi/plan/PlanVisitor.java @@ -109,4 +109,29 @@ public R visitConnectorJoinNode(ConnectorJoinNode node, C context) { return visitPlan(node, context); } + + public R visitWindow(WindowNode node, C context) + { + return visitPlan(node, context); + } + + public R visitJoin(JoinNode node, C context) + { + return visitPlan(node, context); + } + + public R visitSemiJoin(SemiJoinNode node, C context) + { + return visitPlan(node, context); + } + + public R visitSpatialJoin(SpatialJoinNode node, C context) + { + return visitPlan(node, context); + } + + public R visitMergeJoin(MergeJoinNode node, C context) + { + return visitPlan(node, context); + } } diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/plan/SemiJoinNode.java b/presto-spi/src/main/java/com/facebook/presto/spi/plan/SemiJoinNode.java similarity index 92% rename from presto-main/src/main/java/com/facebook/presto/sql/planner/plan/SemiJoinNode.java rename to presto-spi/src/main/java/com/facebook/presto/spi/plan/SemiJoinNode.java index fc3c13b195103..34472ad8c4401 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/plan/SemiJoinNode.java +++ b/presto-spi/src/main/java/com/facebook/presto/spi/plan/SemiJoinNode.java @@ -11,25 +11,22 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.facebook.presto.sql.planner.plan; +package com.facebook.presto.spi.plan; import com.facebook.presto.spi.SourceLocation; -import com.facebook.presto.spi.plan.LogicalProperties; -import com.facebook.presto.spi.plan.LogicalPropertiesProvider; -import com.facebook.presto.spi.plan.PlanNode; -import com.facebook.presto.spi.plan.PlanNodeId; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; -import com.google.common.collect.ImmutableList; import javax.annotation.concurrent.Immutable; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Optional; -import static com.google.common.base.Preconditions.checkArgument; +import static com.facebook.presto.common.Utils.checkArgument; +import static java.util.Collections.unmodifiableList; import static java.util.Objects.requireNonNull; @Immutable @@ -168,20 +165,23 @@ public Map getDynamicFilters() @Override public List getSources() { - return ImmutableList.of(source, filteringSource); + List sources = new ArrayList<>(); + sources.add(source); + sources.add(filteringSource); + return unmodifiableList(sources); } @Override public List getOutputVariables() { - return ImmutableList.builder() - .addAll(source.getOutputVariables()) - .add(semiJoinOutput) - .build(); + List outputVariables = new ArrayList<>(); + outputVariables.addAll(source.getOutputVariables()); + outputVariables.add(semiJoinOutput); + return unmodifiableList(outputVariables); } @Override - public R accept(InternalPlanVisitor visitor, C context) + public R accept(PlanVisitor visitor, C context) { return visitor.visitSemiJoin(this, context); } diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/plan/SpatialJoinNode.java b/presto-spi/src/main/java/com/facebook/presto/spi/plan/SpatialJoinNode.java similarity index 89% rename from presto-main/src/main/java/com/facebook/presto/sql/planner/plan/SpatialJoinNode.java rename to presto-spi/src/main/java/com/facebook/presto/spi/plan/SpatialJoinNode.java index 66acfa76fcffe..0bc7201eba230 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/plan/SpatialJoinNode.java +++ b/presto-spi/src/main/java/com/facebook/presto/spi/plan/SpatialJoinNode.java @@ -11,31 +11,29 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.facebook.presto.sql.planner.plan; +package com.facebook.presto.spi.plan; import com.facebook.presto.spi.SourceLocation; -import com.facebook.presto.spi.plan.JoinType; -import com.facebook.presto.spi.plan.PlanNode; -import com.facebook.presto.spi.plan.PlanNodeId; import com.facebook.presto.spi.relation.RowExpression; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableSet; import javax.annotation.concurrent.Immutable; +import java.util.ArrayList; +import java.util.LinkedHashSet; import java.util.List; import java.util.Optional; import java.util.Set; -import static com.google.common.base.Preconditions.checkArgument; +import static com.facebook.presto.common.Utils.checkArgument; +import static java.util.Collections.unmodifiableList; import static java.util.Objects.requireNonNull; @Immutable public class SpatialJoinNode - extends InternalPlanNode + extends PlanNode { public enum Type { @@ -117,18 +115,17 @@ public SpatialJoinNode( this.type = requireNonNull(type, "type is null"); this.left = requireNonNull(left, "left is null"); this.right = requireNonNull(right, "right is null"); - this.outputVariables = ImmutableList.copyOf(requireNonNull(outputVariables, "outputVariables is null")); + this.outputVariables = unmodifiableList(new ArrayList<>(requireNonNull(outputVariables, "outputVariables is null"))); this.filter = requireNonNull(filter, "filter is null"); this.leftPartitionVariable = requireNonNull(leftPartitionVariable, "leftPartitionVariable is null"); this.rightPartitionVariable = requireNonNull(rightPartitionVariable, "rightPartitionVariable is null"); this.kdbTree = requireNonNull(kdbTree, "kdbTree is null"); - Set inputSymbols = ImmutableSet.builder() - .addAll(left.getOutputVariables()) - .addAll(right.getOutputVariables()) - .build(); - + Set inputSymbols = new LinkedHashSet<>(); + inputSymbols.addAll(left.getOutputVariables()); + inputSymbols.addAll(right.getOutputVariables()); checkArgument(inputSymbols.containsAll(outputVariables), "Left and right join inputs do not contain all output variables"); + if (kdbTree.isPresent()) { checkArgument(leftPartitionVariable.isPresent(), "Left partition variable is missing"); checkArgument(rightPartitionVariable.isPresent(), "Right partition variable is missing"); @@ -182,7 +179,10 @@ public Optional getRightPartitionVariable() @Override public List getSources() { - return ImmutableList.of(left, right); + List sources = new ArrayList<>(); + sources.add(left); + sources.add(right); + return unmodifiableList(sources); } @Override @@ -205,7 +205,7 @@ public Optional getKdbTree() } @Override - public R accept(InternalPlanVisitor visitor, C context) + public R accept(PlanVisitor visitor, C context) { return visitor.visitSpatialJoin(this, context); } diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/plan/WindowNode.java b/presto-spi/src/main/java/com/facebook/presto/spi/plan/WindowNode.java similarity index 89% rename from presto-main/src/main/java/com/facebook/presto/sql/planner/plan/WindowNode.java rename to presto-spi/src/main/java/com/facebook/presto/spi/plan/WindowNode.java index 558e551de1a90..d24da2ad567c6 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/plan/WindowNode.java +++ b/presto-spi/src/main/java/com/facebook/presto/spi/plan/WindowNode.java @@ -11,38 +11,39 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.facebook.presto.sql.planner.plan; +package com.facebook.presto.spi.plan; import com.facebook.presto.spi.SourceLocation; import com.facebook.presto.spi.function.FunctionHandle; -import com.facebook.presto.spi.plan.OrderingScheme; -import com.facebook.presto.spi.plan.PlanNode; -import com.facebook.presto.spi.plan.PlanNodeId; import com.facebook.presto.spi.relation.CallExpression; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Iterables; import javax.annotation.concurrent.Immutable; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.Set; - -import static com.facebook.presto.sql.planner.plan.WindowNode.Frame.WindowType.RANGE; -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.collect.ImmutableList.toImmutableList; +import java.util.stream.Collectors; + +import static com.facebook.presto.common.Utils.checkArgument; +import static com.facebook.presto.spi.plan.WindowNode.Frame.WindowType.RANGE; +import static java.util.Collections.singletonList; +import static java.util.Collections.unmodifiableList; +import static java.util.Collections.unmodifiableMap; +import static java.util.Collections.unmodifiableSet; import static java.util.Objects.requireNonNull; @Immutable public class WindowNode - extends InternalPlanNode + extends PlanNode { private final PlanNode source; private final Set prePartitionedInputs; @@ -85,12 +86,12 @@ public WindowNode( checkArgument(specification.getPartitionBy().containsAll(prePartitionedInputs), "prePartitionedInputs must be contained in partitionBy"); Optional orderingScheme = specification.getOrderingScheme(); checkArgument(preSortedOrderPrefix == 0 || (orderingScheme.isPresent() && preSortedOrderPrefix <= orderingScheme.get().getOrderByVariables().size()), "Cannot have sorted more symbols than those requested"); - checkArgument(preSortedOrderPrefix == 0 || ImmutableSet.copyOf(prePartitionedInputs).equals(ImmutableSet.copyOf(specification.getPartitionBy())), "preSortedOrderPrefix can only be greater than zero if all partition symbols are pre-partitioned"); + checkArgument(preSortedOrderPrefix == 0 || prePartitionedInputs.equals(new HashSet<>(specification.getPartitionBy())), "preSortedOrderPrefix can only be greater than zero if all partition symbols are pre-partitioned"); this.source = source; - this.prePartitionedInputs = ImmutableSet.copyOf(prePartitionedInputs); + this.prePartitionedInputs = unmodifiableSet(new LinkedHashSet<>(prePartitionedInputs)); this.specification = specification; - this.windowFunctions = ImmutableMap.copyOf(windowFunctions); + this.windowFunctions = unmodifiableMap(new LinkedHashMap<>(windowFunctions)); this.hashVariable = hashVariable; this.preSortedOrderPrefix = preSortedOrderPrefix; } @@ -98,16 +99,15 @@ public WindowNode( @Override public List getSources() { - return ImmutableList.of(source); + return singletonList(source); } @Override public List getOutputVariables() { - return ImmutableList.builder() - .addAll(source.getOutputVariables()) - .addAll(windowFunctions.keySet()) - .build(); + List outputVariables = new ArrayList<>(source.getOutputVariables()); + outputVariables.addAll(windowFunctions.keySet()); + return unmodifiableList(outputVariables); } public Set getCreatedVariable() @@ -145,9 +145,10 @@ public Map getWindowFunctions() public List getFrames() { - return windowFunctions.values().stream() + List frames = windowFunctions.values().stream() .map(WindowNode.Function::getFrame) - .collect(toImmutableList()); + .collect(Collectors.toList()); + return unmodifiableList(frames); } @JsonProperty @@ -169,7 +170,7 @@ public int getPreSortedOrderPrefix() } @Override - public R accept(InternalPlanVisitor visitor, C context) + public R accept(PlanVisitor visitor, C context) { return visitor.visitWindow(this, context); } @@ -177,7 +178,8 @@ public R accept(InternalPlanVisitor visitor, C context) @Override public PlanNode replaceChildren(List newChildren) { - return new WindowNode(getSourceLocation(), getId(), getStatsEquivalentPlanNode(), Iterables.getOnlyElement(newChildren), specification, windowFunctions, hashVariable, prePartitionedInputs, preSortedOrderPrefix); + checkArgument(newChildren.size() == 1); + return new WindowNode(getSourceLocation(), getId(), getStatsEquivalentPlanNode(), newChildren.get(0), specification, windowFunctions, hashVariable, prePartitionedInputs, preSortedOrderPrefix); } @Override @@ -200,7 +202,7 @@ public Specification( requireNonNull(partitionBy, "partitionBy is null"); requireNonNull(orderingScheme, "orderingScheme is null"); - this.partitionBy = ImmutableList.copyOf(partitionBy); + this.partitionBy = unmodifiableList(new ArrayList<>(partitionBy)); this.orderingScheme = requireNonNull(orderingScheme, "orderingScheme is null"); } diff --git a/presto-tests/src/test/java/com/facebook/presto/execution/TestHistoryBasedStatsTracking.java b/presto-tests/src/test/java/com/facebook/presto/execution/TestHistoryBasedStatsTracking.java index 6a82d184c53ca..1504c660badb9 100644 --- a/presto-tests/src/test/java/com/facebook/presto/execution/TestHistoryBasedStatsTracking.java +++ b/presto-tests/src/test/java/com/facebook/presto/execution/TestHistoryBasedStatsTracking.java @@ -20,13 +20,16 @@ import com.facebook.presto.spi.plan.AggregationNode; import com.facebook.presto.spi.plan.DistinctLimitNode; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.LimitNode; import com.facebook.presto.spi.plan.MarkDistinctNode; import com.facebook.presto.spi.plan.OutputNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.ProjectNode; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.spi.plan.SortNode; import com.facebook.presto.spi.plan.TopNNode; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.statistics.CostBasedSourceInfo; import com.facebook.presto.spi.statistics.HistoryBasedPlanStatisticsProvider; import com.facebook.presto.sql.planner.assertions.MatchResult; @@ -34,11 +37,8 @@ import com.facebook.presto.sql.planner.assertions.SymbolAliases; import com.facebook.presto.sql.planner.plan.EnforceSingleRowNode; import com.facebook.presto.sql.planner.plan.ExchangeNode; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.RowNumberNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; -import com.facebook.presto.sql.planner.plan.WindowNode; import com.facebook.presto.testing.InMemoryHistoryBasedPlanStatisticsProvider; import com.facebook.presto.testing.QueryRunner; import com.facebook.presto.tests.AbstractTestQueryFramework; diff --git a/redis-hbo-provider/src/test/java/com/facebook/presto/statistic/TestHistoryBasedRedisStatisticsTracking.java b/redis-hbo-provider/src/test/java/com/facebook/presto/statistic/TestHistoryBasedRedisStatisticsTracking.java index 98796786d741a..1cdfb35ec377e 100644 --- a/redis-hbo-provider/src/test/java/com/facebook/presto/statistic/TestHistoryBasedRedisStatisticsTracking.java +++ b/redis-hbo-provider/src/test/java/com/facebook/presto/statistic/TestHistoryBasedRedisStatisticsTracking.java @@ -20,23 +20,23 @@ import com.facebook.presto.spi.plan.AggregationNode; import com.facebook.presto.spi.plan.DistinctLimitNode; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.LimitNode; import com.facebook.presto.spi.plan.MarkDistinctNode; import com.facebook.presto.spi.plan.OutputNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.ProjectNode; +import com.facebook.presto.spi.plan.SemiJoinNode; import com.facebook.presto.spi.plan.SortNode; import com.facebook.presto.spi.plan.TopNNode; +import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.statistics.HistoryBasedPlanStatisticsProvider; import com.facebook.presto.sql.planner.assertions.MatchResult; import com.facebook.presto.sql.planner.assertions.Matcher; import com.facebook.presto.sql.planner.assertions.SymbolAliases; import com.facebook.presto.sql.planner.plan.ExchangeNode; -import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.RowNumberNode; -import com.facebook.presto.sql.planner.plan.SemiJoinNode; import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; -import com.facebook.presto.sql.planner.plan.WindowNode; import com.facebook.presto.testing.QueryRunner; import com.facebook.presto.tests.AbstractTestQueryFramework; import com.facebook.presto.tests.DistributedQueryRunner;