Class TransformCorrelatedScalarSubquery
java.lang.Object
io.trino.sql.planner.iterative.rule.TransformCorrelatedScalarSubquery
- All Implemented Interfaces:
Rule<CorrelatedJoinNode>
Scalar filter scan query is something like:
SELECT a,b,c FROM rel WHERE a = correlated1 AND b = correlated2
This optimizer can rewrite to mark distinct and filter over a left outer join:
From:
- CorrelatedJoin (with correlation list: [C])
- (input) plan which produces symbols: [A, B, C]
- (scalar subquery) Project F
- Filter(D = C AND E > 5)
- plan which produces symbols: [D, E, F]
to:
- Filter(CASE isDistinct WHEN true THEN true ELSE fail('Scalar sub-query has returned multiple rows'))
- MarkDistinct(isDistinct)
- CorrelatedJoin (with correlation list: [C])
- AssignUniqueId(adds symbol U)
- (input) plan which produces symbols: [A, B, C]
- non scalar subquery
This must be run after aggregation decorrelation rules.
-
Nested Class Summary
Nested classes/interfaces inherited from interface io.trino.sql.planner.iterative.Rule
Rule.Context, Rule.Result -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionapply(CorrelatedJoinNode correlatedJoinNode, Captures captures, Rule.Context context) Returns a pattern to which plan nodes this rule applies.
-
Constructor Details
-
TransformCorrelatedScalarSubquery
-
-
Method Details
-
getPattern
Description copied from interface:RuleReturns a pattern to which plan nodes this rule applies.- Specified by:
getPatternin interfaceRule<CorrelatedJoinNode>
-