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

Reply via email to