diff options
Diffstat (limited to 'tests/fixtures/optimizer/qualify_columns.sql')
-rw-r--r-- | tests/fixtures/optimizer/qualify_columns.sql | 50 |
1 files changed, 48 insertions, 2 deletions
diff --git a/tests/fixtures/optimizer/qualify_columns.sql b/tests/fixtures/optimizer/qualify_columns.sql index 2be8838..b9a6fc1 100644 --- a/tests/fixtures/optimizer/qualify_columns.sql +++ b/tests/fixtures/optimizer/qualify_columns.sql @@ -227,7 +227,32 @@ START WITH title = 'President' CONNECT BY manager_ID = PRIOR employee_id ORDER BY employee_ID NULLS LAST; -WITH EMPLOYEES AS (SELECT T.TITLE AS TITLE, T.EMPLOYEE_ID AS EMPLOYEE_ID, T.MANAGER_ID AS MANAGER_ID FROM (VALUES ('President', 1, NULL), ('Vice President Engineering', 10, 1), ('Programmer', 100, 10), ('QA Engineer', 101, 10), ('Vice President HR', 20, 1), ('Health Insurance Analyst', 200, 20)) AS T(TITLE, EMPLOYEE_ID, MANAGER_ID)) SELECT EMPLOYEES.EMPLOYEE_ID AS EMPLOYEE_ID, EMPLOYEES.MANAGER_ID AS MANAGER_ID, EMPLOYEES.TITLE AS TITLE, EMPLOYEES.LEVEL AS LEVEL FROM EMPLOYEES AS EMPLOYEES START WITH EMPLOYEES.TITLE = 'President' CONNECT BY EMPLOYEES.MANAGER_ID = PRIOR EMPLOYEES.EMPLOYEE_ID ORDER BY EMPLOYEE_ID; +WITH EMPLOYEES AS (SELECT T.TITLE AS TITLE, T.EMPLOYEE_ID AS EMPLOYEE_ID, T.MANAGER_ID AS MANAGER_ID FROM (VALUES ('President', 1, NULL), ('Vice President Engineering', 10, 1), ('Programmer', 100, 10), ('QA Engineer', 101, 10), ('Vice President HR', 20, 1), ('Health Insurance Analyst', 200, 20)) AS T(TITLE, EMPLOYEE_ID, MANAGER_ID)) SELECT EMPLOYEES.EMPLOYEE_ID AS EMPLOYEE_ID, EMPLOYEES.MANAGER_ID AS MANAGER_ID, EMPLOYEES.TITLE AS TITLE, LEVEL AS LEVEL FROM EMPLOYEES AS EMPLOYEES START WITH EMPLOYEES.TITLE = 'President' CONNECT BY EMPLOYEES.MANAGER_ID = PRIOR EMPLOYEES.EMPLOYEE_ID ORDER BY EMPLOYEE_ID; + +# execute: false +# dialect: oracle +WITH +t1 AS ( + SELECT + 1 AS c1, + 1 AS c2, + 'Y' AS TOP_PARENT_INDICATOR, + 1 AS id + FROM DUAL +), +t2 AS ( + SELECT + 1 AS c2, + 2 AS id + FROM DUAL +) +SELECT t1.c1 +FROM t1 +LEFT JOIN t2 ON t1.c2 = t2.c2 +WHERE (t1.TOP_PARENT_INDICATOR = 'Y' OR LEVEL = 1) +START WITH (t1.id IS NOT NULL) +CONNECT BY PRIOR t1.id = t2.id; +WITH T1 AS (SELECT 1 AS C1, 1 AS C2, 'Y' AS TOP_PARENT_INDICATOR, 1 AS ID FROM DUAL DUAL), T2 AS (SELECT 1 AS C2, 2 AS ID FROM DUAL DUAL) SELECT T1.C1 AS C1 FROM T1 T1 LEFT JOIN T2 T2 ON T1.C2 = T2.C2 WHERE (T1.TOP_PARENT_INDICATOR = 'Y' OR LEVEL = 1) START WITH (NOT T1.ID IS NULL) CONNECT BY PRIOR T1.ID = T2.ID; -------------------------------------- -- Derived tables @@ -785,4 +810,25 @@ SELECT X.A AS FOO FROM X AS X GROUP BY X.A = 1; # dialect: snowflake # execute: false SELECT x.a AS foo FROM x WHERE foo = 1; -SELECT X.A AS FOO FROM X AS X WHERE X.A = 1;
\ No newline at end of file +SELECT X.A AS FOO FROM X AS X WHERE X.A = 1; + + +-------------------------------------- +-- SEMI / ANTI Joins +-------------------------------------- + +# title: SEMI JOIN table is excluded from the scope +SELECT * FROM x SEMI JOIN y USING (b); +SELECT x.a AS a, x.b AS b FROM x AS x SEMI JOIN y AS y ON x.b = y.b; + +# title: ANTI JOIN table is excluded from the scope +SELECT * FROM x ANTI JOIN y USING (b); +SELECT x.a AS a, x.b AS b FROM x AS x ANTI JOIN y AS y ON x.b = y.b; + +# title: SEMI + normal joins reinclude the table on scope +SELECT * FROM x SEMI JOIN y USING (b) JOIN y USING (b); +SELECT x.a AS a, COALESCE(x.b, y_2.b) AS b, y_2.c AS c FROM x AS x SEMI JOIN y AS y ON x.b = y.b JOIN y AS y_2 ON x.b = y_2.b; + +# title: ANTI + normal joins reinclude the table on scope +SELECT * FROM x ANTI JOIN y USING (b) JOIN y USING (b); +SELECT x.a AS a, COALESCE(x.b, y_2.b) AS b, y_2.c AS c FROM x AS x ANTI JOIN y AS y ON x.b = y.b JOIN y AS y_2 ON x.b = y_2.b; |