From 8c507bc7e3176a7ffd3b7eef651eeb71fb2564bd Mon Sep 17 00:00:00 2001 From: Rebecca Schlussel Date: Wed, 5 Mar 2025 10:06:51 -0500 Subject: [PATCH] Move IndexSourceNode to the SPI Move IndexSourceNode to the SPI so it can be used in ConnectorPlanOptimizers and PlanCheckers --- .../facebook/presto/index/IndexManager.java | 2 +- .../presto/metadata/ResolvedIndex.java | 1 + .../presto/sql/planner/InputExtractor.java | 2 +- .../sql/planner/LocalExecutionPlanner.java | 2 +- .../rule/PruneIndexSourceColumns.java | 2 +- .../planner/optimizations/AddExchanges.java | 2 +- .../optimizations/IndexJoinOptimizer.java | 2 +- .../optimizations/PropertyDerivations.java | 2 +- .../PruneUnreferencedOutputs.java | 2 +- .../StreamPropertyDerivations.java | 2 +- .../UnaliasSymbolReferences.java | 2 +- .../sql/planner/plan/InternalPlanVisitor.java | 5 ---- .../presto/sql/planner/plan/Patterns.java | 1 + .../planner/planPrinter/IOPlanPrinter.java | 2 +- .../sql/planner/planPrinter/PlanPrinter.java | 2 +- .../sanity/ValidateDependenciesChecker.java | 3 +- .../facebook/presto/util/GraphvizPrinter.java | 2 +- .../planner/assertions/ColumnReference.java | 2 +- .../assertions/IndexSourceMatcher.java | 2 +- .../planner/assertions/PlanMatchPattern.java | 2 +- .../iterative/rule/test/PlanBuilder.java | 4 +-- .../com/facebook/presto/spi}/IndexHandle.java | 4 +-- .../presto/spi}/plan/IndexSourceNode.java | 30 ++++++++++--------- .../facebook/presto/spi/plan/PlanVisitor.java | 5 ++++ 24 files changed, 44 insertions(+), 41 deletions(-) rename {presto-main/src/main/java/com/facebook/presto/metadata => presto-spi/src/main/java/com/facebook/presto/spi}/IndexHandle.java (95%) rename {presto-main/src/main/java/com/facebook/presto/sql/planner => presto-spi/src/main/java/com/facebook/presto/spi}/plan/IndexSourceNode.java (84%) diff --git a/presto-main/src/main/java/com/facebook/presto/index/IndexManager.java b/presto-main/src/main/java/com/facebook/presto/index/IndexManager.java index 034e60ea5b286..13858c86ab182 100644 --- a/presto-main/src/main/java/com/facebook/presto/index/IndexManager.java +++ b/presto-main/src/main/java/com/facebook/presto/index/IndexManager.java @@ -14,11 +14,11 @@ package com.facebook.presto.index; import com.facebook.presto.Session; -import com.facebook.presto.metadata.IndexHandle; import com.facebook.presto.spi.ColumnHandle; import com.facebook.presto.spi.ConnectorId; import com.facebook.presto.spi.ConnectorIndex; import com.facebook.presto.spi.ConnectorSession; +import com.facebook.presto.spi.IndexHandle; import com.facebook.presto.spi.connector.ConnectorIndexProvider; import java.util.List; diff --git a/presto-main/src/main/java/com/facebook/presto/metadata/ResolvedIndex.java b/presto-main/src/main/java/com/facebook/presto/metadata/ResolvedIndex.java index 0890bce5027ba..48affb3084769 100644 --- a/presto-main/src/main/java/com/facebook/presto/metadata/ResolvedIndex.java +++ b/presto-main/src/main/java/com/facebook/presto/metadata/ResolvedIndex.java @@ -17,6 +17,7 @@ import com.facebook.presto.spi.ColumnHandle; import com.facebook.presto.spi.ConnectorId; import com.facebook.presto.spi.ConnectorResolvedIndex; +import com.facebook.presto.spi.IndexHandle; import com.facebook.presto.spi.connector.ConnectorTransactionHandle; import static java.util.Objects.requireNonNull; 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 28f07cd5d0a3f..5fa416acc165e 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,13 +23,13 @@ import com.facebook.presto.spi.SchemaTableName; import com.facebook.presto.spi.TableHandle; import com.facebook.presto.spi.TableMetadata; +import com.facebook.presto.spi.plan.IndexSourceNode; 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.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; 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 b6034d0c95b93..7e5a476b9b50a 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 @@ -151,6 +151,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.IndexSourceNode; import com.facebook.presto.spi.plan.JoinDistributionType; import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.LimitNode; @@ -203,7 +204,6 @@ 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.IndexSourceNode; import com.facebook.presto.sql.planner.plan.InternalPlanVisitor; import com.facebook.presto.sql.planner.plan.MetadataDeleteNode; import com.facebook.presto.sql.planner.plan.RemoteSourceNode; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PruneIndexSourceColumns.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PruneIndexSourceColumns.java index 133a6aaa3e081..2158855a8bef6 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PruneIndexSourceColumns.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/PruneIndexSourceColumns.java @@ -16,10 +16,10 @@ import com.facebook.presto.common.predicate.TupleDomain; import com.facebook.presto.spi.ColumnHandle; import com.facebook.presto.spi.VariableAllocator; +import com.facebook.presto.spi.plan.IndexSourceNode; 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.IndexSourceNode; import com.google.common.collect.Maps; import java.util.List; 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 460c5272fdc89..2c36c1d98c91b 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.DistinctLimitNode; import com.facebook.presto.spi.plan.EquiJoinClause; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.IndexSourceNode; import com.facebook.presto.spi.plan.JoinDistributionType; import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.LimitNode; @@ -68,7 +69,6 @@ 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.IndexSourceNode; import com.facebook.presto.sql.planner.plan.InternalPlanVisitor; import com.facebook.presto.sql.planner.plan.LateralJoinNode; import com.facebook.presto.sql.planner.plan.RowNumberNode; 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 9ebe5c6c7b1b4..a64d798f09aa5 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,6 +24,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.IndexSourceNode; import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.PlanNodeIdAllocator; @@ -36,7 +37,6 @@ import com.facebook.presto.spi.relation.VariableReferenceExpression; import com.facebook.presto.sql.planner.TypeProvider; 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.SimplePlanRewriter; import com.facebook.presto.sql.relational.FunctionResolution; 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 71e64a09370a5..d62c9e17bf1fc 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 @@ -28,6 +28,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.IndexSourceNode; import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.JoinType; import com.facebook.presto.spi.plan.LimitNode; @@ -59,7 +60,6 @@ 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.IndexSourceNode; import com.facebook.presto.sql.planner.plan.InternalPlanVisitor; import com.facebook.presto.sql.planner.plan.LateralJoinNode; import com.facebook.presto.sql.planner.plan.RemoteSourceNode; 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 921bb4ec3a2a7..a595f1768d6b6 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.EquiJoinClause; import com.facebook.presto.spi.plan.ExceptNode; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.IndexSourceNode; import com.facebook.presto.spi.plan.IntersectNode; import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.LimitNode; @@ -58,7 +59,6 @@ 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.IndexSourceNode; import com.facebook.presto.sql.planner.plan.LateralJoinNode; import com.facebook.presto.sql.planner.plan.RowNumberNode; import com.facebook.presto.sql.planner.plan.SequenceNode; 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 3dea1cefdc7e5..9bb82623312ca 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 @@ -22,6 +22,7 @@ import com.facebook.presto.spi.plan.DeleteNode; import com.facebook.presto.spi.plan.DistinctLimitNode; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.IndexSourceNode; import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.LimitNode; import com.facebook.presto.spi.plan.MarkDistinctNode; @@ -49,7 +50,6 @@ 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.IndexSourceNode; import com.facebook.presto.sql.planner.plan.InternalPlanVisitor; import com.facebook.presto.sql.planner.plan.LateralJoinNode; import com.facebook.presto.sql.planner.plan.RemoteSourceNode; 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 6344ebffac9bc..5f90e0015dde6 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.EquiJoinClause; import com.facebook.presto.spi.plan.ExceptNode; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.IndexSourceNode; import com.facebook.presto.spi.plan.IntersectNode; import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.LimitNode; @@ -62,7 +63,6 @@ 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.IndexSourceNode; import com.facebook.presto.sql.planner.plan.LateralJoinNode; import com.facebook.presto.sql.planner.plan.OffsetNode; import com.facebook.presto.sql.planner.plan.RemoteSourceNode; 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 e1935487c6abb..43608a98ec271 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 @@ -37,11 +37,6 @@ public R visitExplainAnalyze(ExplainAnalyzeNode node, C context) return visitPlan(node, context); } - public R visitIndexSource(IndexSourceNode node, C context) - { - return visitPlan(node, context); - } - public R visitIndexJoin(IndexJoinNode 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 8bc7a49cc1500..21a54b9b325a6 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,6 +21,7 @@ import com.facebook.presto.spi.plan.CteReferenceNode; import com.facebook.presto.spi.plan.DeleteNode; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.IndexSourceNode; import com.facebook.presto.spi.plan.IntersectNode; import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.JoinType; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/planPrinter/IOPlanPrinter.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/planPrinter/IOPlanPrinter.java index 5b37bfc9bb0e8..cae2a0f85f93b 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/planPrinter/IOPlanPrinter.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/planPrinter/IOPlanPrinter.java @@ -33,11 +33,11 @@ import com.facebook.presto.spi.PrestoException; import com.facebook.presto.spi.TableHandle; import com.facebook.presto.spi.TableMetadata; +import com.facebook.presto.spi.plan.IndexSourceNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.TableFinishNode; import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.spi.plan.TableWriterNode; -import com.facebook.presto.sql.planner.plan.IndexSourceNode; import com.facebook.presto.sql.planner.plan.InternalPlanVisitor; import com.facebook.presto.sql.planner.planPrinter.IOPlanPrinter.IOPlan.IOPlanBuilder; import com.fasterxml.jackson.annotation.JsonCreator; 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 cb348844589b1..66e22db410f84 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 @@ -45,6 +45,7 @@ import com.facebook.presto.spi.plan.EquiJoinClause; import com.facebook.presto.spi.plan.ExceptNode; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.IndexSourceNode; import com.facebook.presto.spi.plan.IntersectNode; import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.LimitNode; @@ -86,7 +87,6 @@ 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.IndexSourceNode; import com.facebook.presto.sql.planner.plan.InternalPlanVisitor; import com.facebook.presto.sql.planner.plan.LateralJoinNode; import com.facebook.presto.sql.planner.plan.MetadataDeleteNode; 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 dd597c3788757..ecc264a2518af 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,6 +26,7 @@ import com.facebook.presto.spi.plan.EquiJoinClause; import com.facebook.presto.spi.plan.ExceptNode; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.IndexSourceNode; import com.facebook.presto.spi.plan.IntersectNode; import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.LimitNode; @@ -58,7 +59,6 @@ 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.IndexSourceNode; import com.facebook.presto.sql.planner.plan.InternalPlanVisitor; import com.facebook.presto.sql.planner.plan.LateralJoinNode; import com.facebook.presto.sql.planner.plan.MetadataDeleteNode; @@ -618,6 +618,7 @@ public Void visitDelete(DeleteNode node, Set boundV return null; } + @Override public Void visitUpdate(UpdateNode node, Set boundVariables) { 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 9edd782e049b7..2c725b65abbd4 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 @@ -26,6 +26,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.IndexSourceNode; import com.facebook.presto.spi.plan.JoinNode; import com.facebook.presto.spi.plan.LimitNode; import com.facebook.presto.spi.plan.MarkDistinctNode; @@ -56,7 +57,6 @@ 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.IndexSourceNode; import com.facebook.presto.sql.planner.plan.InternalPlanVisitor; import com.facebook.presto.sql.planner.plan.LateralJoinNode; import com.facebook.presto.sql.planner.plan.MetadataDeleteNode; diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/ColumnReference.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/ColumnReference.java index 8b8a3dbed6238..c918c8bbbc60e 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/ColumnReference.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/ColumnReference.java @@ -18,10 +18,10 @@ import com.facebook.presto.spi.ColumnHandle; import com.facebook.presto.spi.TableHandle; import com.facebook.presto.spi.TableMetadata; +import com.facebook.presto.spi.plan.IndexSourceNode; import com.facebook.presto.spi.plan.PlanNode; import com.facebook.presto.spi.plan.TableScanNode; import com.facebook.presto.spi.relation.VariableReferenceExpression; -import com.facebook.presto.sql.planner.plan.IndexSourceNode; import java.util.Map; import java.util.Optional; diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/IndexSourceMatcher.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/IndexSourceMatcher.java index f79b1233078ca..9200bb2920a8d 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/IndexSourceMatcher.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/IndexSourceMatcher.java @@ -18,8 +18,8 @@ import com.facebook.presto.cost.StatsProvider; import com.facebook.presto.metadata.Metadata; import com.facebook.presto.spi.TableMetadata; +import com.facebook.presto.spi.plan.IndexSourceNode; import com.facebook.presto.spi.plan.PlanNode; -import com.facebook.presto.sql.planner.plan.IndexSourceNode; import com.google.common.collect.ImmutableMap; import java.util.Map; 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 8702e3c0f7a1b..7d79307417df8 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 @@ -26,6 +26,7 @@ import com.facebook.presto.spi.plan.EquiJoinClause; import com.facebook.presto.spi.plan.ExceptNode; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.IndexSourceNode; import com.facebook.presto.spi.plan.IntersectNode; import com.facebook.presto.spi.plan.JoinDistributionType; import com.facebook.presto.spi.plan.JoinNode; @@ -59,7 +60,6 @@ import com.facebook.presto.sql.planner.plan.EnforceSingleRowNode; 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.LateralJoinNode; import com.facebook.presto.sql.planner.plan.OffsetNode; import com.facebook.presto.sql.planner.plan.RemoteSourceNode; 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 6e541d36606aa..590601b3d7f9b 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 @@ -18,10 +18,10 @@ import com.facebook.presto.common.function.OperatorType; import com.facebook.presto.common.predicate.TupleDomain; import com.facebook.presto.common.type.Type; -import com.facebook.presto.metadata.IndexHandle; import com.facebook.presto.metadata.Metadata; import com.facebook.presto.spi.ColumnHandle; import com.facebook.presto.spi.ConnectorId; +import com.facebook.presto.spi.IndexHandle; import com.facebook.presto.spi.SchemaTableName; import com.facebook.presto.spi.TableHandle; import com.facebook.presto.spi.WarningCollector; @@ -37,6 +37,7 @@ import com.facebook.presto.spi.plan.EquiJoinClause; import com.facebook.presto.spi.plan.ExceptNode; import com.facebook.presto.spi.plan.FilterNode; +import com.facebook.presto.spi.plan.IndexSourceNode; import com.facebook.presto.spi.plan.IntersectNode; import com.facebook.presto.spi.plan.JoinDistributionType; import com.facebook.presto.spi.plan.JoinNode; @@ -78,7 +79,6 @@ import com.facebook.presto.sql.planner.plan.ExchangeNode; 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.LateralJoinNode; import com.facebook.presto.sql.planner.plan.OffsetNode; import com.facebook.presto.sql.planner.plan.RemoteSourceNode; diff --git a/presto-main/src/main/java/com/facebook/presto/metadata/IndexHandle.java b/presto-spi/src/main/java/com/facebook/presto/spi/IndexHandle.java similarity index 95% rename from presto-main/src/main/java/com/facebook/presto/metadata/IndexHandle.java rename to presto-spi/src/main/java/com/facebook/presto/spi/IndexHandle.java index eeec686126395..f837fc731d0e7 100644 --- a/presto-main/src/main/java/com/facebook/presto/metadata/IndexHandle.java +++ b/presto-spi/src/main/java/com/facebook/presto/spi/IndexHandle.java @@ -11,10 +11,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.facebook.presto.metadata; +package com.facebook.presto.spi; -import com.facebook.presto.spi.ConnectorId; -import com.facebook.presto.spi.ConnectorIndexHandle; import com.facebook.presto.spi.connector.ConnectorTransactionHandle; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/plan/IndexSourceNode.java b/presto-spi/src/main/java/com/facebook/presto/spi/plan/IndexSourceNode.java similarity index 84% rename from presto-main/src/main/java/com/facebook/presto/sql/planner/plan/IndexSourceNode.java rename to presto-spi/src/main/java/com/facebook/presto/spi/plan/IndexSourceNode.java index 8f8a3abf57dd3..6e5b684cd829c 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/plan/IndexSourceNode.java +++ b/presto-spi/src/main/java/com/facebook/presto/spi/plan/IndexSourceNode.java @@ -11,32 +11,34 @@ * 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.common.predicate.TupleDomain; -import com.facebook.presto.metadata.IndexHandle; import com.facebook.presto.spi.ColumnHandle; +import com.facebook.presto.spi.IndexHandle; import com.facebook.presto.spi.SourceLocation; import com.facebook.presto.spi.TableHandle; -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.ImmutableMap; -import com.google.common.collect.ImmutableSet; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; import java.util.List; import java.util.Map; 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.emptyList; +import static java.util.Collections.unmodifiableList; +import static java.util.Collections.unmodifiableMap; +import static java.util.Collections.unmodifiableSet; import static java.util.Objects.requireNonNull; public class IndexSourceNode - extends InternalPlanNode + extends PlanNode { private final IndexHandle indexHandle; private final TableHandle tableHandle; @@ -73,9 +75,9 @@ public IndexSourceNode( super(sourceLocation, id, statsEquivalentPlanNode); this.indexHandle = requireNonNull(indexHandle, "indexHandle is null"); this.tableHandle = requireNonNull(tableHandle, "tableHandle is null"); - this.lookupVariables = ImmutableSet.copyOf(requireNonNull(lookupVariables, "lookupVariables is null")); - this.outputVariables = ImmutableList.copyOf(requireNonNull(outputVariables, "outputVariables is null")); - this.assignments = ImmutableMap.copyOf(requireNonNull(assignments, "assignments is null")); + this.lookupVariables = unmodifiableSet(new LinkedHashSet<>(requireNonNull(lookupVariables, "lookupVariables is null"))); + this.outputVariables = unmodifiableList(new ArrayList<>(requireNonNull(outputVariables, "outputVariables is null"))); + this.assignments = unmodifiableMap(new LinkedHashMap<>(requireNonNull(assignments, "assignments is null"))); this.currentConstraint = requireNonNull(currentConstraint, "effectiveTupleDomain is null"); checkArgument(!lookupVariables.isEmpty(), "lookupVariables is empty"); checkArgument(!outputVariables.isEmpty(), "outputVariables is empty"); @@ -123,11 +125,11 @@ public TupleDomain getCurrentConstraint() @Override public List getSources() { - return ImmutableList.of(); + return emptyList(); } @Override - public R accept(InternalPlanVisitor visitor, C context) + public R accept(PlanVisitor visitor, C context) { return visitor.visitIndexSource(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 b353ba88768de..926fbec239105 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 @@ -144,4 +144,9 @@ public R visitTableFinish(TableFinishNode node, C context) { return visitPlan(node, context); } + + public R visitIndexSource(IndexSourceNode node, C context) + { + return visitPlan(node, context); + } }