@@ -68,14 +68,15 @@ abstract class PlanExpression[T <: QueryPlan[_]] extends Expression {
6868 */
6969abstract class SubqueryExpression (
7070 plan : LogicalPlan ,
71- val outerAttrs : Seq [Expression ],
71+ outerAttrs : Seq [Expression ],
7272 exprId : ExprId ,
7373 joinCond : Seq [Expression ] = Nil ) extends PlanExpression [LogicalPlan ] {
7474 override lazy val resolved : Boolean = childrenResolved && plan.resolved
7575 override lazy val references : AttributeSet =
7676 AttributeSet .fromAttributeSets(outerAttrs.map(_.references))
7777 override def children : Seq [Expression ] = outerAttrs ++ joinCond
7878 override def withNewPlan (plan : LogicalPlan ): SubqueryExpression
79+ def isCorrelated : Boolean = outerAttrs.nonEmpty
7980}
8081
8182object SubqueryExpression {
@@ -86,7 +87,7 @@ object SubqueryExpression {
8687 def hasInOrCorrelatedExistsSubquery (e : Expression ): Boolean = {
8788 e.find {
8889 case _ : ListQuery => true
89- case _ : Exists if e.children.nonEmpty => true
90+ case ex : Exists => ex.isCorrelated
9091 case _ => false
9192 }.isDefined
9293 }
@@ -98,7 +99,7 @@ object SubqueryExpression {
9899 */
99100 def hasCorrelatedSubquery (e : Expression ): Boolean = {
100101 e.find {
101- case s : SubqueryExpression => s.children.nonEmpty
102+ case s : SubqueryExpression => s.isCorrelated
102103 case _ => false
103104 }.isDefined
104105 }
@@ -248,7 +249,7 @@ object SubExprUtils extends PredicateHelper {
248249 */
249250case class ScalarSubquery (
250251 plan : LogicalPlan ,
251- override val outerAttrs : Seq [Expression ] = Seq .empty,
252+ outerAttrs : Seq [Expression ] = Seq .empty,
252253 exprId : ExprId = NamedExpression .newExprId,
253254 joinCond : Seq [Expression ] = Seq .empty)
254255 extends SubqueryExpression (plan, outerAttrs, exprId, joinCond) with Unevaluable {
@@ -279,7 +280,7 @@ case class ScalarSubquery(
279280object ScalarSubquery {
280281 def hasCorrelatedScalarSubquery (e : Expression ): Boolean = {
281282 e.find {
282- case s : ScalarSubquery => s.children.nonEmpty
283+ case s : ScalarSubquery => s.isCorrelated
283284 case _ => false
284285 }.isDefined
285286 }
@@ -293,7 +294,7 @@ object ScalarSubquery {
293294 */
294295case class LateralSubquery (
295296 plan : LogicalPlan ,
296- override val outerAttrs : Seq [Expression ] = Seq .empty,
297+ outerAttrs : Seq [Expression ] = Seq .empty,
297298 exprId : ExprId = NamedExpression .newExprId,
298299 joinCond : Seq [Expression ] = Seq .empty)
299300 extends SubqueryExpression (plan, outerAttrs, exprId, joinCond) with Unevaluable {
@@ -332,7 +333,7 @@ case class LateralSubquery(
332333 */
333334case class ListQuery (
334335 plan : LogicalPlan ,
335- override val outerAttrs : Seq [Expression ] = Seq .empty,
336+ outerAttrs : Seq [Expression ] = Seq .empty,
336337 exprId : ExprId = NamedExpression .newExprId,
337338 childOutputs : Seq [Attribute ] = Seq .empty,
338339 joinCond : Seq [Expression ] = Seq .empty)
@@ -391,7 +392,7 @@ case class ListQuery(
391392 */
392393case class Exists (
393394 plan : LogicalPlan ,
394- override val outerAttrs : Seq [Expression ] = Seq .empty,
395+ outerAttrs : Seq [Expression ] = Seq .empty,
395396 exprId : ExprId = NamedExpression .newExprId,
396397 joinCond : Seq [Expression ] = Seq .empty)
397398 extends SubqueryExpression (plan, outerAttrs, exprId, joinCond) with Predicate with Unevaluable {
0 commit comments