You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
`SubqueryExpression` is an [extension](#contract) of the [PlanExpression](PlanExpression.md) abstraction for [subquery expressions](#implementations) with [logical plans](#plan) (for a subquery).
4
8
5
9
## Contract
6
10
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))
`SubqueryExpression` is an abstract class and cannot be created directly. It is created indirectly for the [concrete SubqueryExpressions](#implementations).
41
68
42
69
## References
43
70
44
-
<spanid="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.
48
78
49
79
`references` is...FIXME
50
80
51
-
`references` is part of the [Expression](Expression.md#references) abstraction.
81
+
## resolved
52
82
53
-
## resolved Predicate
83
+
??? note "Expression"
54
84
55
-
<spanid="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.
59
90
60
91
`resolved` is `true` when all of the following hold:
61
92
62
93
*[children are all resolved](Expression.md#childrenResolved)
63
94
*[subquery logical plan](#plan) is [resolved](../logical-operators/LogicalPlan.md#resolved)
64
95
65
-
`resolved` is part of the [Expression](Expression.md#resolved) abstraction.
`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
`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
+
---
88
124
89
125
`hasCorrelatedSubquery` is used when:
90
126
127
+
*[CombineUnions](../logical-optimizations/CombineUnions.md) logical optimization is executed
91
128
*`EliminateOuterJoin` logical optimization is executed
129
+
*`OptimizeOneRowRelationSubquery` logical optimization is executed
92
130
*`Subquery` is created (from an expression)
93
131
*`Filter` logical operator is requested for `validConstraints`
94
132
95
-
## hasSubquery Utility
133
+
## hasSubquery { #hasSubquery }
96
134
97
-
<spanid="hasSubquery">
98
135
```scala
99
136
hasSubquery(
100
137
e: Expression):Boolean
101
138
```
102
139
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:
104
153
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