From c635cfcd3a38a132c2c84ad128746a27e6dc8c5f Mon Sep 17 00:00:00 2001 From: Feilong Liu Date: Fri, 27 Feb 2026 07:54:24 -0800 Subject: [PATCH] Move TopNRowNumberNode to presto-spi for connector optimizer access (#27232) Summary: Pull Request resolved: https://github.com/prestodb/presto/pull/27232 Move TopNRowNumberNode from presto-main-base to presto-spi to make it accessible to connector optimizers in ApplyConnectorOptimization.java. Changes: - Move TopNRowNumberNode.java to presto-spi/src/main/java/com/facebook/presto/spi/plan/ - Change extends InternalPlanNode to extends PlanNode - Add visitTopNRowNumber to PlanVisitor.java - Remove visitTopNRowNumber from InternalPlanVisitor.java - Add TopNRowNumberNode to CONNECTOR_ACCESSIBLE_PLAN_NODES - Update all imports across the codebase - Update protocol YAML files to use .TopNRowNumberNode key - Regenerate C++ protocol files Differential Revision: D94627414 --- .../hive/TestHiveIntegrationSmokeTest.java | 2 +- .../sql/planner/CanonicalPlanGenerator.java | 2 +- .../sql/planner/GroupedExecutionTagger.java | 2 +- .../sql/planner/LocalExecutionPlanner.java | 2 +- .../sql/planner/SplitSourceFactory.java | 2 +- .../StatsEquivalentPlanNodeWithLimit.java | 2 +- .../rule/MinMaxByToWindowFunction.java | 2 +- .../iterative/rule/PushDownDereferences.java | 2 +- .../planner/optimizations/AddExchanges.java | 2 +- .../optimizations/AddLocalExchanges.java | 2 +- .../ApplyConnectorOptimization.java | 4 ++- .../HashGenerationOptimizer.java | 2 +- ...tisticsEquivalentPlanMarkingOptimizer.java | 2 +- .../optimizations/KeyBasedSampler.java | 2 +- .../optimizations/PlanNodeDecorrelator.java | 2 +- .../optimizations/PropertyDerivations.java | 2 +- .../PruneUnreferencedOutputs.java | 2 +- .../optimizations/PushdownSubfields.java | 2 +- .../SimplifyPlanWithEmptyInput.java | 2 +- .../StreamPropertyDerivations.java | 2 +- .../UnaliasSymbolReferences.java | 2 +- .../optimizations/WindowFilterPushDown.java | 2 +- .../sql/planner/plan/InternalPlanVisitor.java | 5 ---- .../sql/planner/planPrinter/PlanPrinter.java | 2 +- .../sanity/ValidateDependenciesChecker.java | 2 +- .../facebook/presto/util/GraphvizPrinter.java | 2 +- .../assertions/TopNRowNumberMatcher.java | 2 +- .../TestWindowFilterPushDown.java | 2 +- .../presto_cpp/main/tests/TaskStatusTest.cpp | 6 ++-- .../main/tests/data/ExecutionFailureInfo.json | 12 +++++--- .../core/presto_protocol_core.cpp | 24 +++++++++++---- .../core/presto_protocol_core.h | 1 + .../core/presto_protocol_core.yml | 4 +-- .../presto_protocol/presto_protocol.yml | 4 +-- .../AbstractTestNativeWindowQueries.java | 2 +- .../facebook/presto/spi/plan/PlanVisitor.java | 5 ++++ .../presto/spi}/plan/TopNRowNumberNode.java | 29 +++++++++---------- .../TestHistoryBasedStatsTracking.java | 2 +- ...stHistoryBasedRedisStatisticsTracking.java | 2 +- 39 files changed, 86 insertions(+), 66 deletions(-) rename {presto-main-base/src/main/java/com/facebook/presto/sql/planner => presto-spi/src/main/java/com/facebook/presto/spi}/plan/TopNRowNumberNode.java (84%) 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 f9f2c82a39075..7a7b8de866c99 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 @@ -30,6 +30,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.TopNRowNumberNode; import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.security.Identity; import com.facebook.presto.spi.security.SelectedRole; @@ -38,7 +39,6 @@ import com.facebook.presto.sql.planner.plan.ExchangeNode; 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.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-main-base/src/main/java/com/facebook/presto/sql/planner/CanonicalPlanGenerator.java b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/CanonicalPlanGenerator.java index 98f8d4f696599..31242cab48cc1 100644 --- a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/CanonicalPlanGenerator.java +++ b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/CanonicalPlanGenerator.java @@ -50,6 +50,7 @@ import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.spi.plan.TableWriterNode; import com.facebook.presto.spi.plan.TopNNode; +import com.facebook.presto.spi.plan.TopNRowNumberNode; import com.facebook.presto.spi.plan.UnionNode; import com.facebook.presto.spi.plan.UnnestNode; import com.facebook.presto.spi.plan.ValuesNode; @@ -64,7 +65,6 @@ import com.facebook.presto.sql.planner.plan.InternalPlanVisitor; import com.facebook.presto.sql.planner.plan.RowNumberNode; import com.facebook.presto.sql.planner.plan.SequenceNode; -import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonProcessingException; diff --git a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/GroupedExecutionTagger.java b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/GroupedExecutionTagger.java index 19ac5a575ded5..13eb1dc8da8e4 100644 --- a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/GroupedExecutionTagger.java +++ b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/GroupedExecutionTagger.java @@ -28,11 +28,11 @@ import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.spi.plan.TableWriterNode; import com.facebook.presto.spi.plan.TableWriterNode.CallDistributedProcedureTarget; +import com.facebook.presto.spi.plan.TopNRowNumberNode; import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.sql.planner.plan.CallDistributedProcedureNode; 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.google.common.base.VerifyException; import com.google.common.collect.ImmutableList; diff --git a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/LocalExecutionPlanner.java b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/LocalExecutionPlanner.java index 13cc38caef3fe..80ef55ea1139e 100644 --- a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/LocalExecutionPlanner.java +++ b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/LocalExecutionPlanner.java @@ -182,6 +182,7 @@ import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.spi.plan.TableWriterNode; import com.facebook.presto.spi.plan.TopNNode; +import com.facebook.presto.spi.plan.TopNRowNumberNode; import com.facebook.presto.spi.plan.UnionNode; import com.facebook.presto.spi.plan.UnnestNode; import com.facebook.presto.spi.plan.ValuesNode; @@ -225,7 +226,6 @@ import com.facebook.presto.sql.planner.plan.TableFunctionNode; import com.facebook.presto.sql.planner.plan.TableFunctionProcessorNode; import com.facebook.presto.sql.planner.plan.TableWriterMergeNode; -import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; import com.facebook.presto.sql.planner.plan.UpdateNode; import com.facebook.presto.sql.relational.FunctionResolution; import com.facebook.presto.sql.relational.VariableToChannelTranslator; diff --git a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/SplitSourceFactory.java b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/SplitSourceFactory.java index 387271aa94e16..463f726cec9c5 100644 --- a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/SplitSourceFactory.java +++ b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/SplitSourceFactory.java @@ -41,6 +41,7 @@ import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.spi.plan.TableWriterNode; import com.facebook.presto.spi.plan.TopNNode; +import com.facebook.presto.spi.plan.TopNRowNumberNode; import com.facebook.presto.spi.plan.UnionNode; import com.facebook.presto.spi.plan.UnnestNode; import com.facebook.presto.spi.plan.ValuesNode; @@ -63,7 +64,6 @@ import com.facebook.presto.sql.planner.plan.StatisticsWriterNode; import com.facebook.presto.sql.planner.plan.TableFunctionProcessorNode; import com.facebook.presto.sql.planner.plan.TableWriterMergeNode; -import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; import com.facebook.presto.sql.planner.plan.UpdateNode; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; diff --git a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/StatsEquivalentPlanNodeWithLimit.java b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/StatsEquivalentPlanNodeWithLimit.java index 7e88b2425f0ed..b0a49888c74e3 100644 --- a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/StatsEquivalentPlanNodeWithLimit.java +++ b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/StatsEquivalentPlanNodeWithLimit.java @@ -19,10 +19,10 @@ import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeId; import com.facebook.presto.spi.plan.TopNNode; +import com.facebook.presto.spi.plan.TopNRowNumberNode; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.plan.InternalPlanNode; import com.facebook.presto.sql.planner.plan.InternalPlanVisitor; -import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.collect.ImmutableList; diff --git a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/iterative/rule/MinMaxByToWindowFunction.java b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/iterative/rule/MinMaxByToWindowFunction.java index 7a74946525608..2c2d92dfdfbcc 100644 --- a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/iterative/rule/MinMaxByToWindowFunction.java +++ b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/iterative/rule/MinMaxByToWindowFunction.java @@ -27,11 +27,11 @@ import com.facebook.presto.spi.plan.Ordering; import com.facebook.presto.spi.plan.OrderingScheme; import com.facebook.presto.spi.plan.ProjectNode; +import com.facebook.presto.spi.plan.TopNRowNumberNode; 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.iterative.Rule; -import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; import com.facebook.presto.sql.relational.FunctionResolution; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; diff --git a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PushDownDereferences.java b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PushDownDereferences.java index 1d09e2699b238..fbc04aa494003 100644 --- a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PushDownDereferences.java +++ b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PushDownDereferences.java @@ -31,6 +31,7 @@ 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.TopNRowNumberNode; import com.facebook.presto.spi.plan.UnnestNode; import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.relation.RowExpression; @@ -40,7 +41,6 @@ import com.facebook.presto.sql.planner.iterative.Rule.Context; import com.facebook.presto.sql.planner.plan.AssignUniqueId; import com.facebook.presto.sql.planner.plan.RowNumberNode; -import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; import com.google.common.collect.ImmutableList; diff --git a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/AddExchanges.java b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/AddExchanges.java index 0119c0672560d..54ddb8c4a3430 100644 --- a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/AddExchanges.java +++ b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/AddExchanges.java @@ -56,6 +56,7 @@ import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.spi.plan.TableWriterNode; import com.facebook.presto.spi.plan.TopNNode; +import com.facebook.presto.spi.plan.TopNRowNumberNode; import com.facebook.presto.spi.plan.UnionNode; import com.facebook.presto.spi.plan.UnnestNode; import com.facebook.presto.spi.plan.ValuesNode; @@ -85,7 +86,6 @@ import com.facebook.presto.sql.planner.plan.StatisticsWriterNode; import com.facebook.presto.sql.planner.plan.TableFunctionNode; import com.facebook.presto.sql.planner.plan.TableFunctionProcessorNode; -import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; import com.facebook.presto.sql.planner.plan.UpdateNode; import com.google.common.annotations.VisibleForTesting; import com.google.common.cache.CacheBuilder; diff --git a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/AddLocalExchanges.java b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/AddLocalExchanges.java index d899e4032f62a..92307ff34f0db 100644 --- a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/AddLocalExchanges.java +++ b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/AddLocalExchanges.java @@ -50,6 +50,7 @@ import com.facebook.presto.spi.plan.TableFinishNode; import com.facebook.presto.spi.plan.TableWriterNode; import com.facebook.presto.spi.plan.TopNNode; +import com.facebook.presto.spi.plan.TopNRowNumberNode; import com.facebook.presto.spi.plan.UnionNode; import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.relation.VariableReferenceExpression; @@ -68,7 +69,6 @@ import com.facebook.presto.sql.planner.plan.TableFunctionNode; import com.facebook.presto.sql.planner.plan.TableFunctionProcessorNode; import com.facebook.presto.sql.planner.plan.TableWriterMergeNode; -import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; diff --git a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/ApplyConnectorOptimization.java b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/ApplyConnectorOptimization.java index dcd9435290f36..e4fa7e25736db 100644 --- a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/ApplyConnectorOptimization.java +++ b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/ApplyConnectorOptimization.java @@ -44,6 +44,7 @@ import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.spi.plan.TableWriterNode; import com.facebook.presto.spi.plan.TopNNode; +import com.facebook.presto.spi.plan.TopNRowNumberNode; import com.facebook.presto.spi.plan.UnionNode; import com.facebook.presto.spi.plan.UnnestNode; import com.facebook.presto.spi.plan.ValuesNode; @@ -101,7 +102,8 @@ public class ApplyConnectorOptimization UnnestNode.class, TableWriterNode.class, TableFinishNode.class, - DeleteNode.class); + DeleteNode.class, + TopNRowNumberNode.class); // for a leaf node that does not belong to any connector (e.g., ValuesNode) private static final ConnectorId EMPTY_CONNECTOR_ID = new ConnectorId("$internal$ApplyConnectorOptimization_EMPTY_CONNECTOR"); diff --git a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/HashGenerationOptimizer.java b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/HashGenerationOptimizer.java index 58850d0195326..3bc150814edb7 100644 --- a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/HashGenerationOptimizer.java +++ b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/HashGenerationOptimizer.java @@ -34,6 +34,7 @@ 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.TopNRowNumberNode; import com.facebook.presto.spi.plan.UnionNode; import com.facebook.presto.spi.plan.UnnestNode; import com.facebook.presto.spi.plan.WindowNode; @@ -49,7 +50,6 @@ import com.facebook.presto.sql.planner.plan.LateralJoinNode; import com.facebook.presto.sql.planner.plan.RowNumberNode; import com.facebook.presto.sql.planner.plan.SequenceNode; -import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; import com.google.common.collect.BiMap; import com.google.common.collect.ImmutableBiMap; import com.google.common.collect.ImmutableList; diff --git a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/HistoricalStatisticsEquivalentPlanMarkingOptimizer.java b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/HistoricalStatisticsEquivalentPlanMarkingOptimizer.java index 185bee6925035..509eeb9ff5a80 100644 --- a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/HistoricalStatisticsEquivalentPlanMarkingOptimizer.java +++ b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/HistoricalStatisticsEquivalentPlanMarkingOptimizer.java @@ -26,10 +26,10 @@ 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.spi.plan.TopNRowNumberNode; import com.facebook.presto.sql.planner.StatsEquivalentPlanNodeWithLimit; import com.facebook.presto.sql.planner.TypeProvider; import com.facebook.presto.sql.planner.plan.SimplePlanRewriter; -import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; diff --git a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/KeyBasedSampler.java b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/KeyBasedSampler.java index 1c7856a62caea..e2fbc4575bc8b 100644 --- a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/KeyBasedSampler.java +++ b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/KeyBasedSampler.java @@ -33,6 +33,7 @@ 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.TopNRowNumberNode; import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.relation.ConstantExpression; import com.facebook.presto.spi.relation.RowExpression; @@ -40,7 +41,6 @@ import com.facebook.presto.sql.planner.TypeProvider; 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.type.TypeUtils; import com.google.common.collect.ImmutableList; diff --git a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/PlanNodeDecorrelator.java b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/PlanNodeDecorrelator.java index 97bb384a588ce..590f4c507b3a4 100644 --- a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/PlanNodeDecorrelator.java +++ b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/PlanNodeDecorrelator.java @@ -28,6 +28,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.TopNRowNumberNode; 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.EnforceSingleRowNode; 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.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMultimap; diff --git a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/PropertyDerivations.java b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/PropertyDerivations.java index 7dc181ca661e0..2291096606f44 100644 --- a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/PropertyDerivations.java +++ b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/PropertyDerivations.java @@ -50,6 +50,7 @@ import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.spi.plan.TableWriterNode; import com.facebook.presto.spi.plan.TopNNode; +import com.facebook.presto.spi.plan.TopNRowNumberNode; import com.facebook.presto.spi.plan.UnnestNode; import com.facebook.presto.spi.plan.ValuesNode; import com.facebook.presto.spi.plan.WindowNode; @@ -77,7 +78,6 @@ import com.facebook.presto.sql.planner.plan.TableFunctionNode; import com.facebook.presto.sql.planner.plan.TableFunctionProcessorNode; import com.facebook.presto.sql.planner.plan.TableWriterMergeNode; -import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; import com.facebook.presto.sql.planner.plan.UpdateNode; import com.facebook.presto.sql.relational.RowExpressionDomainTranslator; import com.google.common.collect.ImmutableBiMap; diff --git a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/PruneUnreferencedOutputs.java b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/PruneUnreferencedOutputs.java index 6ea24ac7b046e..032c2ad3a2406 100644 --- a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/PruneUnreferencedOutputs.java +++ b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/PruneUnreferencedOutputs.java @@ -47,6 +47,7 @@ import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.spi.plan.TableWriterNode; import com.facebook.presto.spi.plan.TopNNode; +import com.facebook.presto.spi.plan.TopNRowNumberNode; import com.facebook.presto.spi.plan.UnionNode; import com.facebook.presto.spi.plan.UnnestNode; import com.facebook.presto.spi.plan.ValuesNode; @@ -70,7 +71,6 @@ import com.facebook.presto.sql.planner.plan.StatisticsWriterNode; import com.facebook.presto.sql.planner.plan.TableFunctionProcessorNode; import com.facebook.presto.sql.planner.plan.TableWriterMergeNode; -import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; import com.facebook.presto.sql.planner.plan.UpdateNode; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableListMultimap; diff --git a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/PushdownSubfields.java b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/PushdownSubfields.java index 9121a6ca44844..73fbebf9b457f 100644 --- a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/PushdownSubfields.java +++ b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/PushdownSubfields.java @@ -56,6 +56,7 @@ import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.spi.plan.TableWriterNode; import com.facebook.presto.spi.plan.TopNNode; +import com.facebook.presto.spi.plan.TopNRowNumberNode; import com.facebook.presto.spi.plan.UnionNode; import com.facebook.presto.spi.plan.UnnestNode; import com.facebook.presto.spi.plan.WindowNode; @@ -74,7 +75,6 @@ import com.facebook.presto.sql.planner.plan.GroupIdNode; 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.relational.FunctionResolution; import com.facebook.presto.sql.tree.QualifiedName; import com.google.common.collect.ImmutableList; diff --git a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/SimplifyPlanWithEmptyInput.java b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/SimplifyPlanWithEmptyInput.java index c6c0077747caa..e9e5d05d4df09 100644 --- a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/SimplifyPlanWithEmptyInput.java +++ b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/SimplifyPlanWithEmptyInput.java @@ -31,6 +31,7 @@ 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.TopNRowNumberNode; import com.facebook.presto.spi.plan.UnionNode; import com.facebook.presto.spi.plan.UnnestNode; import com.facebook.presto.spi.plan.ValuesNode; @@ -43,7 +44,6 @@ import com.facebook.presto.sql.planner.plan.SampleNode; 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.google.common.collect.ImmutableList; import java.util.ArrayList; diff --git a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/StreamPropertyDerivations.java b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/StreamPropertyDerivations.java index 3effedf6638fb..fe7086c8b91d5 100644 --- a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/StreamPropertyDerivations.java +++ b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/StreamPropertyDerivations.java @@ -40,6 +40,7 @@ import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.spi.plan.TableWriterNode; import com.facebook.presto.spi.plan.TopNNode; +import com.facebook.presto.spi.plan.TopNRowNumberNode; import com.facebook.presto.spi.plan.UnionNode; import com.facebook.presto.spi.plan.UnnestNode; import com.facebook.presto.spi.plan.ValuesNode; @@ -66,7 +67,6 @@ import com.facebook.presto.sql.planner.plan.TableFunctionNode; import com.facebook.presto.sql.planner.plan.TableFunctionProcessorNode; import com.facebook.presto.sql.planner.plan.TableWriterMergeNode; -import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; import com.facebook.presto.sql.planner.plan.UpdateNode; import com.google.common.collect.ImmutableBiMap; import com.google.common.collect.ImmutableList; diff --git a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/UnaliasSymbolReferences.java b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/UnaliasSymbolReferences.java index 4df265d694700..30153f473ef0d 100644 --- a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/UnaliasSymbolReferences.java +++ b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/UnaliasSymbolReferences.java @@ -51,6 +51,7 @@ import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.spi.plan.TableWriterNode; import com.facebook.presto.spi.plan.TopNNode; +import com.facebook.presto.spi.plan.TopNRowNumberNode; import com.facebook.presto.spi.plan.UnionNode; import com.facebook.presto.spi.plan.UnnestNode; import com.facebook.presto.spi.plan.ValuesNode; @@ -80,7 +81,6 @@ import com.facebook.presto.sql.planner.plan.TableFunctionNode; import com.facebook.presto.sql.planner.plan.TableFunctionProcessorNode; import com.facebook.presto.sql.planner.plan.TableWriterMergeNode; -import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; import com.facebook.presto.sql.planner.plan.UpdateNode; import com.facebook.presto.sql.relational.RowExpressionDeterminismEvaluator; import com.facebook.presto.sql.tree.SymbolReference; diff --git a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/WindowFilterPushDown.java b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/WindowFilterPushDown.java index 3164106d1c3f3..4c07777ea6e04 100644 --- a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/optimizations/WindowFilterPushDown.java +++ b/presto-main-base/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.TopNRowNumberNode; import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.relation.DomainTranslator.ExtractionResult; import com.facebook.presto.spi.relation.RowExpression; @@ -36,7 +37,6 @@ import com.facebook.presto.sql.planner.TypeProvider; 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.relational.FunctionResolution; import com.facebook.presto.sql.relational.RowExpressionDeterminismEvaluator; import com.facebook.presto.sql.relational.RowExpressionDomainTranslator; diff --git a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/plan/InternalPlanVisitor.java b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/plan/InternalPlanVisitor.java index 6bfa05d32a9a8..f2eb1076289a1 100644 --- a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/plan/InternalPlanVisitor.java +++ b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/plan/InternalPlanVisitor.java @@ -88,11 +88,6 @@ public R visitRowNumber(RowNumberNode node, C context) return visitPlan(node, context); } - public R visitTopNRowNumber(TopNRowNumberNode node, C context) - { - return visitPlan(node, context); - } - public R visitExchange(ExchangeNode node, C context) { return visitPlan(node, context); diff --git a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/planPrinter/PlanPrinter.java b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/planPrinter/PlanPrinter.java index c35f28525bb09..ca00f8ad64d75 100644 --- a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/planPrinter/PlanPrinter.java +++ b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/planPrinter/PlanPrinter.java @@ -75,6 +75,7 @@ import com.facebook.presto.spi.plan.TableWriterNode; import com.facebook.presto.spi.plan.TableWriterNode.CallDistributedProcedureTarget; import com.facebook.presto.spi.plan.TopNNode; +import com.facebook.presto.spi.plan.TopNRowNumberNode; import com.facebook.presto.spi.plan.UnionNode; import com.facebook.presto.spi.plan.UnnestNode; import com.facebook.presto.spi.plan.ValuesNode; @@ -108,7 +109,6 @@ import com.facebook.presto.sql.planner.plan.TableFunctionNode.TableArgumentProperties; import com.facebook.presto.sql.planner.plan.TableFunctionProcessorNode; import com.facebook.presto.sql.planner.plan.TableWriterMergeNode; -import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; import com.facebook.presto.sql.planner.plan.UpdateNode; import com.facebook.presto.sql.relational.FunctionResolution; import com.facebook.presto.sql.relational.RowExpressionDeterminismEvaluator; diff --git a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/sanity/ValidateDependenciesChecker.java b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/sanity/ValidateDependenciesChecker.java index 1a88f259c882e..bfd5651f37169 100644 --- a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/sanity/ValidateDependenciesChecker.java +++ b/presto-main-base/src/main/java/com/facebook/presto/sql/planner/sanity/ValidateDependenciesChecker.java @@ -48,6 +48,7 @@ import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.spi.plan.TableWriterNode; import com.facebook.presto.spi.plan.TopNNode; +import com.facebook.presto.spi.plan.TopNRowNumberNode; import com.facebook.presto.spi.plan.UnionNode; import com.facebook.presto.spi.plan.UnnestNode; import com.facebook.presto.spi.plan.ValuesNode; @@ -77,7 +78,6 @@ import com.facebook.presto.sql.planner.plan.TableFunctionNode.PassThroughColumn; import com.facebook.presto.sql.planner.plan.TableFunctionProcessorNode; import com.facebook.presto.sql.planner.plan.TableWriterMergeNode; -import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; import com.facebook.presto.sql.planner.plan.UpdateNode; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; diff --git a/presto-main-base/src/main/java/com/facebook/presto/util/GraphvizPrinter.java b/presto-main-base/src/main/java/com/facebook/presto/util/GraphvizPrinter.java index 1f2a47c8d4083..e227f7ec2d578 100644 --- a/presto-main-base/src/main/java/com/facebook/presto/util/GraphvizPrinter.java +++ b/presto-main-base/src/main/java/com/facebook/presto/util/GraphvizPrinter.java @@ -45,6 +45,7 @@ import com.facebook.presto.spi.plan.TableWriterNode; import com.facebook.presto.spi.plan.TableWriterNode.CallDistributedProcedureTarget; import com.facebook.presto.spi.plan.TopNNode; +import com.facebook.presto.spi.plan.TopNRowNumberNode; import com.facebook.presto.spi.plan.UnionNode; import com.facebook.presto.spi.plan.UnnestNode; import com.facebook.presto.spi.plan.ValuesNode; @@ -73,7 +74,6 @@ import com.facebook.presto.sql.planner.plan.TableFunctionNode; import com.facebook.presto.sql.planner.plan.TableFunctionProcessorNode; import com.facebook.presto.sql.planner.plan.TableWriterMergeNode; -import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; import com.facebook.presto.sql.planner.plan.UpdateNode; import com.facebook.presto.sql.planner.planPrinter.RowExpressionFormatter; import com.facebook.presto.sql.tree.ComparisonExpression; diff --git a/presto-main-base/src/test/java/com/facebook/presto/sql/planner/assertions/TopNRowNumberMatcher.java b/presto-main-base/src/test/java/com/facebook/presto/sql/planner/assertions/TopNRowNumberMatcher.java index 590625570cbd7..728940e930ce2 100644 --- a/presto-main-base/src/test/java/com/facebook/presto/sql/planner/assertions/TopNRowNumberMatcher.java +++ b/presto-main-base/src/test/java/com/facebook/presto/sql/planner/assertions/TopNRowNumberMatcher.java @@ -19,9 +19,9 @@ import com.facebook.presto.metadata.Metadata; import com.facebook.presto.spi.plan.DataOrganizationSpecification; import com.facebook.presto.spi.plan.PlanNode; +import com.facebook.presto.spi.plan.TopNRowNumberNode; import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.Symbol; -import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; import java.util.List; import java.util.Map; diff --git a/presto-main-base/src/test/java/com/facebook/presto/sql/planner/optimizations/TestWindowFilterPushDown.java b/presto-main-base/src/test/java/com/facebook/presto/sql/planner/optimizations/TestWindowFilterPushDown.java index fefc10a4d78a9..3719322bb8922 100644 --- a/presto-main-base/src/test/java/com/facebook/presto/sql/planner/optimizations/TestWindowFilterPushDown.java +++ b/presto-main-base/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.TopNRowNumberNode; import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.sql.planner.assertions.BasePlanTest; -import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; import org.intellij.lang.annotations.Language; import org.testng.annotations.Test; diff --git a/presto-native-execution/presto_cpp/main/tests/TaskStatusTest.cpp b/presto-native-execution/presto_cpp/main/tests/TaskStatusTest.cpp index 3fbbea4c4f4e3..6550684e57642 100644 --- a/presto-native-execution/presto_cpp/main/tests/TaskStatusTest.cpp +++ b/presto-native-execution/presto_cpp/main/tests/TaskStatusTest.cpp @@ -37,7 +37,8 @@ TEST_F(TaskStatusTest, errorCode) { "code": 1234, "name": "name", "type": "INTERNAL_ERROR", - "retriable": false + "retriable": false, + "catchableByTry": false })"; json j = json::parse(str); @@ -65,7 +66,8 @@ TEST_F(TaskStatusTest, executionFailureInfoOptionalFieldsEmpty) { "code": 1234, "name": "name", "type": "INTERNAL_ERROR", - "retriable": false + "retriable": false, + "catchableByTry": false }, "remoteHost": "localhost:8080", "errorCause": "EXCEEDS_BROADCAST_MEMORY_LIMIT" diff --git a/presto-native-execution/presto_cpp/main/tests/data/ExecutionFailureInfo.json b/presto-native-execution/presto_cpp/main/tests/data/ExecutionFailureInfo.json index 3e2f60ec1da12..c1663e6d2bfed 100644 --- a/presto-native-execution/presto_cpp/main/tests/data/ExecutionFailureInfo.json +++ b/presto-native-execution/presto_cpp/main/tests/data/ExecutionFailureInfo.json @@ -14,7 +14,8 @@ "code": 1234, "name": "name", "type": "INSUFFICIENT_RESOURCES", - "retriable": true + "retriable": true, + "catchableByTry": false }, "remoteHost": "localhost:8080", "errorCause": "UNKNOWN" @@ -32,7 +33,8 @@ "code": 1234, "name": "name", "type": "EXTERNAL", - "retriable": true + "retriable": true, + "catchableByTry": false }, "remoteHost": "localhost:8080", "errorCause": "LOW_PARTITION_COUNT" @@ -50,7 +52,8 @@ "code": 1234, "name": "name", "type": "INTERNAL_ERROR", - "retriable": true + "retriable": true, + "catchableByTry": false }, "remoteHost": "localhost:8080", "errorCause": "EXCEEDS_BROADCAST_MEMORY_LIMIT" @@ -64,7 +67,8 @@ "code": 1234, "name": "name", "type": "INTERNAL_ERROR", - "retriable": false + "retriable": false, + "catchableByTry": false }, "remoteHost": "localhost:8080", "errorCause": "EXCEEDS_BROADCAST_MEMORY_LIMIT" 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 6df1d0c478daf..39b1686cf0692 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 @@ -752,7 +752,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.TopNRowNumberNode") { + if (type == ".TopNRowNumberNode") { j = *std::static_pointer_cast(p); return; } @@ -940,7 +940,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.TopNRowNumberNode") { + if (type == ".TopNRowNumberNode") { std::shared_ptr k = std::make_shared(); j.get_to(*k); @@ -5206,6 +5206,13 @@ void to_json(json& j, const ErrorCode& p) { to_json_key(j, "name", p.name, "ErrorCode", "String", "name"); to_json_key(j, "type", p.type, "ErrorCode", "ErrorType", "type"); to_json_key(j, "retriable", p.retriable, "ErrorCode", "bool", "retriable"); + to_json_key( + j, + "catchableByTry", + p.catchableByTry, + "ErrorCode", + "bool", + "catchableByTry"); } void from_json(const json& j, ErrorCode& p) { @@ -5213,6 +5220,13 @@ void from_json(const json& j, ErrorCode& p) { from_json_key(j, "name", p.name, "ErrorCode", "String", "name"); from_json_key(j, "type", p.type, "ErrorCode", "ErrorType", "type"); from_json_key(j, "retriable", p.retriable, "ErrorCode", "bool", "retriable"); + from_json_key( + j, + "catchableByTry", + p.catchableByTry, + "ErrorCode", + "bool", + "catchableByTry"); } } // namespace facebook::presto::protocol namespace facebook::presto::protocol { @@ -12177,7 +12191,7 @@ void from_json(const json& j, TopNNode& p) { } } // namespace facebook::presto::protocol namespace facebook::presto::protocol { -// Loosly copied this here from NLOHMANN_JSON_SERIALIZE_ENUM() +// Loosely copied this here from NLOHMANN_JSON_SERIALIZE_ENUM() // NOLINTNEXTLINE: cppcoreguidelines-avoid-c-arrays static const std::pair RankingFunction_enum_table[] = @@ -12216,12 +12230,12 @@ void from_json(const json& j, RankingFunction& e) { } // namespace facebook::presto::protocol namespace facebook::presto::protocol { TopNRowNumberNode::TopNRowNumberNode() noexcept { - _type = "com.facebook.presto.sql.planner.plan.TopNRowNumberNode"; + _type = ".TopNRowNumberNode"; } void to_json(json& j, const TopNRowNumberNode& p) { j = json::object(); - j["@type"] = "com.facebook.presto.sql.planner.plan.TopNRowNumberNode"; + j["@type"] = ".TopNRowNumberNode"; to_json_key(j, "id", p.id, "TopNRowNumberNode", "PlanNodeId", "id"); to_json_key(j, "source", p.source, "TopNRowNumberNode", "PlanNode", "source"); to_json_key( diff --git a/presto-native-execution/presto_cpp/presto_protocol/core/presto_protocol_core.h b/presto-native-execution/presto_cpp/presto_protocol/core/presto_protocol_core.h index 82e2a33963827..a20589ae571ff 100644 --- a/presto-native-execution/presto_cpp/presto_protocol/core/presto_protocol_core.h +++ b/presto-native-execution/presto_cpp/presto_protocol/core/presto_protocol_core.h @@ -1271,6 +1271,7 @@ struct ErrorCode { String name = {}; ErrorType type = {}; bool retriable = {}; + bool catchableByTry = {}; }; void to_json(json& j, const ErrorCode& p); void from_json(const json& j, ErrorCode& p); 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 3407aadb10541..2036ea37a8d4b 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 @@ -172,7 +172,7 @@ AbstractClasses: - { name: TableWriterNode, key: .TableWriterNode } - { name: TableWriterMergeNode, key: com.facebook.presto.sql.planner.plan.TableWriterMergeNode } - { name: TopNNode, key: .TopNNode } - - { name: TopNRowNumberNode, key: com.facebook.presto.sql.planner.plan.TopNRowNumberNode } + - { name: TopNRowNumberNode, key: .TopNRowNumberNode } - { name: UnnestNode, key: .UnnestNode } - { name: ValuesNode, key: .ValuesNode } - { name: AssignUniqueId, key: com.facebook.presto.sql.planner.plan.AssignUniqueId } @@ -249,7 +249,7 @@ JavaClasses: - presto-main-base/src/main/java/com/facebook/presto/sql/planner/plan/GroupIdNode.java - presto-main-base/src/main/java/com/facebook/presto/sql/planner/plan/RowNumberNode.java - presto-main-base/src/main/java/com/facebook/presto/sql/planner/plan/SampleNode.java - - presto-main-base/src/main/java/com/facebook/presto/sql/planner/plan/TopNRowNumberNode.java + - presto-spi/src/main/java/com/facebook/presto/spi/plan/TopNRowNumberNode.java - presto-spi/src/main/java/com/facebook/presto/spi/plan/TableWriterNode.java - presto-main-base/src/main/java/com/facebook/presto/sql/planner/plan/TableWriterMergeNode.java - presto-spi/src/main/java/com/facebook/presto/spi/plan/UnnestNode.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 adf58e95f1ced..6b561fa93c7c6 100644 --- a/presto-native-execution/presto_cpp/presto_protocol/presto_protocol.yml +++ b/presto-native-execution/presto_cpp/presto_protocol/presto_protocol.yml @@ -161,7 +161,7 @@ AbstractClasses: - { name: TableWriterNode, key: .TableWriterNode } - { name: TableWriterMergeNode, key: com.facebook.presto.sql.planner.plan.TableWriterMergeNode } - { name: TopNNode, key: .TopNNode } - - { name: TopNRowNumberNode, key: com.facebook.presto.sql.planner.plan.TopNRowNumberNode } + - { name: TopNRowNumberNode, key: .TopNRowNumberNode } - { name: UnnestNode, key: .UnnestNode } - { name: ValuesNode, key: .ValuesNode } - { name: AssignUniqueId, key: com.facebook.presto.sql.planner.plan.AssignUniqueId } @@ -238,7 +238,7 @@ JavaClasses: - presto-main/src/main/java/com/facebook/presto/sql/planner/plan/GroupIdNode.java - presto-main/src/main/java/com/facebook/presto/sql/planner/plan/RowNumberNode.java - presto-main/src/main/java/com/facebook/presto/sql/planner/plan/SampleNode.java - - presto-main/src/main/java/com/facebook/presto/sql/planner/plan/TopNRowNumberNode.java + - presto-spi/src/main/java/com/facebook/presto/spi/plan/TopNRowNumberNode.java - presto-spi/src/main/java/com/facebook/presto/spi/plan/TableWriterNode.java - presto-main/src/main/java/com/facebook/presto/sql/planner/plan/TableWriterMergeNode.java - presto-spi/src/main/java/com/facebook/presto/spi/plan/UnnestNode.java diff --git a/presto-native-execution/src/test/java/com/facebook/presto/nativeworker/AbstractTestNativeWindowQueries.java b/presto-native-execution/src/test/java/com/facebook/presto/nativeworker/AbstractTestNativeWindowQueries.java index b3e45f8c2a16a..02a1a80ab668b 100644 --- a/presto-native-execution/src/test/java/com/facebook/presto/nativeworker/AbstractTestNativeWindowQueries.java +++ b/presto-native-execution/src/test/java/com/facebook/presto/nativeworker/AbstractTestNativeWindowQueries.java @@ -15,8 +15,8 @@ import com.facebook.presto.SystemSessionProperties; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.TopNRowNumberNode; import com.facebook.presto.sql.planner.assertions.PlanMatchPattern; -import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; import com.facebook.presto.testing.QueryRunner; import com.facebook.presto.tests.AbstractTestQueryFramework; import com.google.common.collect.ImmutableList; 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 2bf40c8e525ce..342c421dc8106 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 @@ -169,4 +169,9 @@ public R visitMaterializedViewScan(MaterializedViewScanNode node, C context) { return visitPlan(node, context); } + + public R visitTopNRowNumber(TopNRowNumberNode node, C context) + { + return visitPlan(node, context); + } } diff --git a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/plan/TopNRowNumberNode.java b/presto-spi/src/main/java/com/facebook/presto/spi/plan/TopNRowNumberNode.java similarity index 84% rename from presto-main-base/src/main/java/com/facebook/presto/sql/planner/plan/TopNRowNumberNode.java rename to presto-spi/src/main/java/com/facebook/presto/spi/plan/TopNRowNumberNode.java index 9969ad1a950ef..4c156e3a91c65 100644 --- a/presto-main-base/src/main/java/com/facebook/presto/sql/planner/plan/TopNRowNumberNode.java +++ b/presto-spi/src/main/java/com/facebook/presto/spi/plan/TopNRowNumberNode.java @@ -11,29 +11,26 @@ * 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.DataOrganizationSpecification; -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.VariableReferenceExpression; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.Iterables; import com.google.errorprone.annotations.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.singletonList; +import static java.util.Collections.unmodifiableList; import static java.util.Objects.requireNonNull; @Immutable public final class TopNRowNumberNode - extends InternalPlanNode + extends PlanNode { public enum RankingFunction { @@ -99,18 +96,17 @@ public TopNRowNumberNode( @Override public List getSources() { - return ImmutableList.of(source); + return singletonList(source); } @Override public List getOutputVariables() { - ImmutableList.Builder builder = ImmutableList.builder().addAll(source.getOutputVariables()); - + List outputVariables = new ArrayList<>(source.getOutputVariables()); if (!partial) { - builder.add(rowNumberVariable); + outputVariables.add(rowNumberVariable); } - return builder.build(); + return unmodifiableList(outputVariables); } @JsonProperty @@ -166,7 +162,7 @@ public Optional getHashVariable() } @Override - public R accept(InternalPlanVisitor visitor, C context) + public R accept(PlanVisitor visitor, C context) { return visitor.visitTopNRowNumber(this, context); } @@ -174,7 +170,8 @@ public R accept(InternalPlanVisitor visitor, C context) @Override public PlanNode replaceChildren(List newChildren) { - return new TopNRowNumberNode(getSourceLocation(), getId(), getStatsEquivalentPlanNode(), Iterables.getOnlyElement(newChildren), specification, rankingFunction, rowNumberVariable, maxRowCountPerPartition, partial, hashVariable); + checkArgument(newChildren.size() == 1, "expected newChildren to contain 1 node"); + return new TopNRowNumberNode(getSourceLocation(), getId(), getStatsEquivalentPlanNode(), newChildren.get(0), specification, rankingFunction, rowNumberVariable, maxRowCountPerPartition, partial, hashVariable); } @Override 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 e1e6e1c63646a..fddc4fc06371d 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 @@ -29,6 +29,7 @@ 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.TopNRowNumberNode; import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.statistics.CostBasedSourceInfo; import com.facebook.presto.spi.statistics.HistoryBasedPlanStatisticsProvider; @@ -38,7 +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.RowNumberNode; -import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; 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 1cdfb35ec377e..01c6773751c1a 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 @@ -29,6 +29,7 @@ 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.TopNRowNumberNode; import com.facebook.presto.spi.plan.WindowNode; import com.facebook.presto.spi.statistics.HistoryBasedPlanStatisticsProvider; import com.facebook.presto.sql.planner.assertions.MatchResult; @@ -36,7 +37,6 @@ import com.facebook.presto.sql.planner.assertions.SymbolAliases; import com.facebook.presto.sql.planner.plan.ExchangeNode; import com.facebook.presto.sql.planner.plan.RowNumberNode; -import com.facebook.presto.sql.planner.plan.TopNRowNumberNode; import com.facebook.presto.testing.QueryRunner; import com.facebook.presto.tests.AbstractTestQueryFramework; import com.facebook.presto.tests.DistributedQueryRunner;