IITDBGroup / gprom

GProM is a middleware that adds support for provenance to database backends.
http://www.cs.iit.edu/%7edbgroup/research/gprom.php
Apache License 2.0
8 stars 5 forks source link

nested subqueries - sqlserializer - use nesting level specific FROM clause aliases #52

Closed lordpretzel closed 3 years ago

lordpretzel commented 5 years ago

Current we give predefined aliases like F0, F1, ... to FROM clause items based on position in the FROM clause that leads to ambiguities for correlated attributes.

Example problematic query:

SELECT * FROM R WHERE EXISTS (SELECT * FROM S x WHERE B = x.d AND EXISTS (SELECT * FROM T));

ERROR (metadata_lookup_oracle.c:151) METADATA LOOKUP - OCILIB Error ORA-00904 - msg : ORA-00904: "F0"."F": invalid identifier

SQL
===

SELECT F0.A AS A, F0.B AS B
FROM (R F0), LATERAL (SELECT CASE WHEN count(*) > 0 THEN 1 ELSE 0 END AS "nesting_eval_1" FROM (
SELECT F0.C AS C, F0.D AS D
FROM (S F0), LATERAL (SELECT CASE WHEN count(*) > 0 THEN 1 ELSE 0 END AS "nesting_eval_1" FROM (
SELECT F0.E AS E, F0.F AS F
FROM (T F0)) F0) F1
WHERE ((F0.D = F0.F) AND (F1."nesting_eval_1" = 1))) F0) F1
WHERE (F1."nesting_eval_1" = 1)