cloud-fan commented on code in PR #38776: URL: https://github.com/apache/spark/pull/38776#discussion_r1044068904
########## sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/Analyzer.scala: ########## @@ -1761,6 +1763,114 @@ class Analyzer(override val catalogManager: CatalogManager) } } + /** + * The first phase to resolve lateral column alias. See comments in + * [[ResolveLateralColumnAliasReference]] for more detailed explanation. + */ + object WrapLateralColumnAliasReference extends Rule[LogicalPlan] { + import ResolveLateralColumnAliasReference.AliasEntry + + private def insertIntoAliasMap( + a: Alias, + idx: Int, + aliasMap: CaseInsensitiveMap[Seq[AliasEntry]]): CaseInsensitiveMap[Seq[AliasEntry]] = { + val prevAliases = aliasMap.getOrElse(a.name, Seq.empty[AliasEntry]) + aliasMap + (a.name -> (prevAliases :+ AliasEntry(a, idx))) + } + + /** + * Use the given lateral alias to resolve the unresolved attribute with the name parts. + * + * Construct a dummy plan with the given lateral alias as project list, use the output of the + * plan to resolve. + * @return The resolved [[LateralColumnAliasReference]] if succeeds. None if fails to resolve. + */ + private def resolveByLateralAlias( + nameParts: Seq[String], lateralAlias: Alias): Option[LateralColumnAliasReference] = { + // TODO question: everytime it resolves the extract field it generates a new exprId. + // Does it matter? + val resolvedAttr = resolveExpressionByPlanOutput( + expr = UnresolvedAttribute(nameParts), + plan = Project(Seq(lateralAlias), OneRowRelation()), Review Comment: it's simpler to use `LocalRelation(Seq(lateralAlias.toAttribute))` -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org For additional commands, e-mail: reviews-h...@spark.apache.org