milanisvet commented on code in PR #49518: URL: https://github.com/apache/spark/pull/49518#discussion_r1920073718
########## sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/CheckAnalysis.scala: ########## @@ -1042,6 +1043,75 @@ trait CheckAnalysis extends PredicateHelper with LookupCatalog with QueryErrorsB if (Utils.isTesting) scrubOutIds(result) else result } + /** + * Recursion, according to SQL standard, comes with several limitations: + * 1. Recursive term can contain one recursive reference only. + * 2. Recursive reference can't be used in some kinds of joins and aggregations. Review Comment: I just checked now again with this query: ``` WITH RECURSIVE t as ( SELECT 1 UNION ALL SELECT (SELECT max(col) FROM t) ) select * from t ``` And it indeed throws: _[TABLE_OR_VIEW_NOT_FOUND] The table or view `t` cannot be found..._. Not really sure as I don't know a lot about subquery resolution, but at the point of going into the subquery it is still not aware of the recursiveCTERelation ("t") that we prepend to the known relations in CTESubstitution. So the error is thrown even before we come to `checkRecursion` function as far as I understood it correctly, and the specific error message about forbidding self-reference in subquery should be added at some other place. What do you think? -- 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