@@ -611,20 +611,7 @@ class Analyzer(
611611 result
612612 case UnresolvedExtractValue (child, fieldExpr) if child.resolved =>
613613 ExtractValue (child, fieldExpr, resolver)
614- case l : LazilyDeterminedAttribute =>
615- val foundPlanOpt = q.findByBreadthFirst(_.planId == l.plan.planId)
616- val foundPlan = foundPlanOpt.getOrElse {
617- failAnalysis(s """ Cannot resolve column name " ${l.name}" """ )
618- }
619-
620- if (foundPlan == l.plan) {
621- l.namedExpr
622- } else {
623- foundPlan.resolveQuoted(l.name, resolver).getOrElse {
624- failAnalysis(s """ Cannot resolve column name " ${l.name}" """ +
625- s """ among ( ${foundPlan.schema.fieldNames.mkString(" , " )}) """ )
626- }
627- }
614+ case l : LazilyDeterminedAttribute => resolveLazilyDeterminedAttribute(l, q)
628615 }
629616 }
630617
@@ -697,6 +684,25 @@ class Analyzer(
697684 exprs.exists(_.find(_.isInstanceOf [UnresolvedDeserializer ]).isDefined)
698685 }
699686
687+ private def resolveLazilyDeterminedAttribute (
688+ expr : LazilyDeterminedAttribute ,
689+ plan : LogicalPlan ): Expression = {
690+
691+ val foundPlanOpt = plan.findByBreadthFirst(_.planId == expr.plan.planId)
692+ val foundPlan = foundPlanOpt.getOrElse {
693+ failAnalysis(s """ Cannot resolve column name " ${expr.name}" """ )
694+ }
695+
696+ if (foundPlan == expr.plan) {
697+ expr.namedExpr
698+ } else {
699+ foundPlan.resolveQuoted(expr.name, resolver).getOrElse {
700+ failAnalysis(s """ Cannot resolve column name " ${expr.name}" """ +
701+ s """ among ( ${foundPlan.schema.fieldNames.mkString(" , " )}) """ )
702+ }
703+ }
704+ }
705+
700706 protected [sql] def resolveExpression (
701707 expr : Expression ,
702708 plan : LogicalPlan ,
@@ -712,20 +718,7 @@ class Analyzer(
712718 withPosition(u) { plan.resolve(nameParts, resolver).getOrElse(u) }
713719 case UnresolvedExtractValue (child, fieldName) if child.resolved =>
714720 ExtractValue (child, fieldName, resolver)
715- case l : LazilyDeterminedAttribute =>
716- val foundPlanOpt = plan.findByBreadthFirst(_.planId == l.plan.planId)
717- val foundPlan = foundPlanOpt.getOrElse {
718- failAnalysis(s """ Cannot resolve column name " ${l.name}" """ )
719- }
720-
721- if (foundPlan == l.plan) {
722- l.namedExpr
723- } else {
724- foundPlan.resolveQuoted(l.name, resolver).getOrElse {
725- failAnalysis(s """ Cannot resolve column name " ${l.name}" """ +
726- s """ among ( ${foundPlan.schema.fieldNames.mkString(" , " )}) """ )
727- }
728- }
721+ case l : LazilyDeterminedAttribute => resolveLazilyDeterminedAttribute(l, plan)
729722 }
730723 } catch {
731724 case a : AnalysisException if ! throws => expr
0 commit comments