Skip to content

Commit d70cb07

Browse files
SubqueryExpression Expressions
1 parent d0b20e7 commit d70cb07

File tree

1 file changed

+76
-25
lines changed

1 file changed

+76
-25
lines changed
Lines changed: 76 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,36 @@
1+
---
2+
title: SubqueryExpression
3+
---
4+
15
# SubqueryExpression Expressions
26

37
`SubqueryExpression` is an [extension](#contract) of the [PlanExpression](PlanExpression.md) abstraction for [subquery expressions](#implementations) with [logical plans](#plan) (for a subquery).
48

59
## Contract
610

7-
### withNewPlan
11+
## hint
12+
13+
```scala
14+
hint: Option[HintInfo]
15+
```
16+
17+
Used when:
18+
19+
* [EliminateResolvedHint](../logical-optimizations/EliminateResolvedHint.md) logical optimization is executed (and [pullHintsIntoSubqueries](../logical-optimizations/EliminateResolvedHint.md#pullHintsIntoSubqueries))
20+
21+
## withNewHint { #withNewHint }
22+
23+
```scala
24+
withNewHint(
25+
hint: Option[HintInfo]): SubqueryExpression
26+
```
27+
28+
Used when:
29+
30+
* [EliminateResolvedHint](../logical-optimizations/EliminateResolvedHint.md) logical optimization is executed (and [pullHintsIntoSubqueries](../logical-optimizations/EliminateResolvedHint.md#pullHintsIntoSubqueries))
31+
32+
### withNewPlan { #withNewPlan }
833

9-
<span id="withNewPlan">
1034
```scala
1135
withNewPlan(
1236
plan: LogicalPlan): SubqueryExpression
@@ -25,6 +49,7 @@ withNewPlan(
2549

2650
* [DynamicPruningSubquery](DynamicPruningSubquery.md)
2751
* [Exists](Exists.md)
52+
* `LateralSubquery`
2853
* [ListQuery](ListQuery.md)
2954
* [ScalarSubquery](ScalarSubquery.md)
3055

@@ -33,73 +58,99 @@ withNewPlan(
3358
`SubqueryExpression` takes the following to be created:
3459

3560
* <span id="plan"> [Subquery logical plan](../logical-operators/LogicalPlan.md)
36-
* <span id="children"> Child [Expressions](Expression.md)
61+
* <span id="outerAttrs"> Outer Attributes ([Expression](Expression.md)s)
3762
* <span id="exprId"> Expression ID
63+
* <span id="joinCond"> Join Condition ([Expression](Expression.md)s)
64+
* <span id="hint"> [HintInfo](../hints/HintInfo.md)
3865

3966
!!! note "Abstract Class"
4067
`SubqueryExpression` is an abstract class and cannot be created directly. It is created indirectly for the [concrete SubqueryExpressions](#implementations).
4168

4269
## References
4370

44-
<span id="references">
45-
```scala
46-
references: AttributeSet
47-
```
71+
??? note "Expression"
72+
73+
```scala
74+
references: AttributeSet
75+
```
76+
77+
`references` is part of the [Expression](Expression.md#references) abstraction.
4878

4979
`references` is...FIXME
5080

51-
`references` is part of the [Expression](Expression.md#references) abstraction.
81+
## resolved
5282

53-
## resolved Predicate
83+
??? note "Expression"
5484

55-
<span id="resolved">
56-
```scala
57-
resolved: Boolean
58-
```
85+
```scala
86+
resolved: Boolean
87+
```
88+
89+
`resolved` is part of the [Expression](Expression.md#resolved) abstraction.
5990

6091
`resolved` is `true` when all of the following hold:
6192

6293
* [children are all resolved](Expression.md#childrenResolved)
6394
* [subquery logical plan](#plan) is [resolved](../logical-operators/LogicalPlan.md#resolved)
6495

65-
`resolved` is part of the [Expression](Expression.md#resolved) abstraction.
66-
67-
## hasInOrCorrelatedExistsSubquery Utility
96+
## hasInOrCorrelatedExistsSubquery { #hasInOrCorrelatedExistsSubquery }
6897

69-
<span id="hasInOrCorrelatedExistsSubquery">
7098
```scala
7199
hasInOrCorrelatedExistsSubquery(
72100
e: Expression): Boolean
73101
```
74102

75103
`hasInOrCorrelatedExistsSubquery`...FIXME
76104

77-
`hasInOrCorrelatedExistsSubquery` is used when [RewritePredicateSubquery](../logical-optimizations/RewritePredicateSubquery.md) logical optimization is executed.
105+
---
106+
107+
`hasInOrCorrelatedExistsSubquery` is used when:
108+
109+
* [RewritePredicateSubquery](../logical-optimizations/RewritePredicateSubquery.md) logical optimization is executed
78110

79-
## hasCorrelatedSubquery Utility
111+
## hasCorrelatedSubquery { #hasCorrelatedSubquery }
80112

81-
<span id="hasCorrelatedSubquery">
82113
```scala
83114
hasCorrelatedSubquery(
84115
e: Expression): Boolean
85116
```
86117

87-
`hasCorrelatedSubquery`...FIXME
118+
`hasCorrelatedSubquery` is `true` when the given [Expression](Expression.md) contains a correlated subquery (there is a `SubqueryExpression` with [isCorrelated](#isCorrelated) flag enabled).
119+
120+
!!! note "Correlated Subquery"
121+
**Correlated Subquery** is a subquery with outer references.
122+
123+
---
88124

89125
`hasCorrelatedSubquery` is used when:
90126

127+
* [CombineUnions](../logical-optimizations/CombineUnions.md) logical optimization is executed
91128
* `EliminateOuterJoin` logical optimization is executed
129+
* `OptimizeOneRowRelationSubquery` logical optimization is executed
92130
* `Subquery` is created (from an expression)
93131
* `Filter` logical operator is requested for `validConstraints`
94132

95-
## hasSubquery Utility
133+
## hasSubquery { #hasSubquery }
96134

97-
<span id="hasSubquery">
98135
```scala
99136
hasSubquery(
100137
e: Expression): Boolean
101138
```
102139

103-
`hasSubquery`...FIXME
140+
`hasSubquery` is `true` when the given [Expression](Expression.md) contains a subquery (there is a `SubqueryExpression`).
141+
142+
## isCorrelated { #isCorrelated }
143+
144+
```scala
145+
isCorrelated: Boolean
146+
```
147+
148+
`isCorrelated` is `true` when there is at least one outer attribute (among the [outerAttrs](#outerAttrs)).
149+
150+
---
151+
152+
`isCorrelated` is used when:
104153

105-
`hasSubquery` is used when...FIXME
154+
* `SubqueryExpression` is requested to [hasInOrCorrelatedExistsSubquery](#hasInOrCorrelatedExistsSubquery), [hasCorrelatedSubquery](#hasCorrelatedSubquery)
155+
* `ScalarSubquery` is requested to [hasCorrelatedScalarSubquery](ScalarSubquery.md#hasCorrelatedScalarSubquery)
156+
* `MergeScalarSubqueries` logical optimization is executed

0 commit comments

Comments
 (0)