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: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]