Merging upstream version 15.0.0.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
8deb804d23
commit
fc63828ee4
167 changed files with 58268 additions and 51337 deletions
24
tests/fixtures/identity.sql
vendored
24
tests/fixtures/identity.sql
vendored
|
@ -174,6 +174,8 @@ SET variable = value
|
|||
SET GLOBAL variable = value
|
||||
SET LOCAL variable = value
|
||||
SET @user OFF
|
||||
@x
|
||||
@"x"
|
||||
COMMIT
|
||||
USE db
|
||||
USE role x
|
||||
|
@ -183,6 +185,7 @@ USE schema x.y
|
|||
NOT 1
|
||||
NOT NOT 1
|
||||
SELECT * FROM test
|
||||
SELECT * FROM db.FOO()
|
||||
SELECT *, 1 FROM test
|
||||
SELECT * FROM a.b
|
||||
SELECT * FROM a.b.c
|
||||
|
@ -288,10 +291,6 @@ SELECT a FROM test ORDER BY a, b
|
|||
SELECT x FROM tests ORDER BY a DESC, b DESC, c
|
||||
SELECT a FROM test ORDER BY a > 1
|
||||
SELECT * FROM test ORDER BY DATE DESC, TIMESTAMP DESC
|
||||
SELECT * FROM test DISTRIBUTE BY y SORT BY x DESC ORDER BY l
|
||||
SELECT * FROM test CLUSTER BY y
|
||||
SELECT * FROM test CLUSTER BY y
|
||||
SELECT * FROM test WHERE RAND() <= 0.1 DISTRIBUTE BY RAND() SORT BY RAND()
|
||||
SELECT a, b FROM test GROUP BY 1
|
||||
SELECT a, b FROM test GROUP BY a
|
||||
SELECT a, b FROM test WHERE a = 1 GROUP BY a HAVING a = 2
|
||||
|
@ -414,7 +413,7 @@ SELECT 1 AS delete, 2 AS alter
|
|||
SELECT * FROM (x)
|
||||
SELECT * FROM ((x))
|
||||
SELECT * FROM ((SELECT 1))
|
||||
SELECT * FROM (x LATERAL VIEW EXPLODE(y) JOIN foo)
|
||||
SELECT * FROM (x CROSS JOIN foo LATERAL VIEW EXPLODE(y))
|
||||
SELECT * FROM (SELECT 1) AS x
|
||||
SELECT * FROM (SELECT 1 UNION SELECT 2) AS x
|
||||
SELECT * FROM (SELECT 1 UNION ALL SELECT 2) AS x
|
||||
|
@ -447,10 +446,6 @@ SELECT 1 UNION (SELECT 2)
|
|||
(SELECT 1) ORDER BY x LIMIT 1 OFFSET 1
|
||||
(SELECT 1 UNION SELECT 2) UNION (SELECT 2 UNION ALL SELECT 3)
|
||||
(SELECT 1 UNION SELECT 2) ORDER BY x LIMIT 1 OFFSET 1
|
||||
(SELECT 1 UNION SELECT 2) CLUSTER BY y DESC
|
||||
(SELECT 1 UNION SELECT 2) SORT BY z
|
||||
(SELECT 1 UNION SELECT 2) DISTRIBUTE BY z
|
||||
(SELECT 1 UNION SELECT 2) DISTRIBUTE BY z SORT BY x
|
||||
SELECT 1 UNION (SELECT 2) ORDER BY x
|
||||
(SELECT 1) UNION SELECT 2 ORDER BY x
|
||||
SELECT * FROM (((SELECT 1) UNION SELECT 2) ORDER BY x LIMIT 1 OFFSET 1)
|
||||
|
@ -563,6 +558,7 @@ CREATE TABLE foo (bar INT REFERENCES baz(baz_id) ON UPDATE SET DEFAULT)
|
|||
CREATE TABLE asd AS SELECT asd FROM asd WITH NO DATA
|
||||
CREATE TABLE asd AS SELECT asd FROM asd WITH DATA
|
||||
CREATE TABLE products (x INT GENERATED BY DEFAULT AS IDENTITY)
|
||||
CREATE TABLE products (x INT GENERATED BY DEFAULT ON NULL AS IDENTITY)
|
||||
CREATE TABLE products (x INT GENERATED ALWAYS AS IDENTITY)
|
||||
CREATE TABLE konyvszerzo (szerzo_azon INT CONSTRAINT konyvszerzo_szerzo_fk REFERENCES szerzo)
|
||||
CREATE TABLE IF NOT EXISTS customer (pk BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY (INCREMENT BY 1))
|
||||
|
@ -610,6 +606,7 @@ CREATE FUNCTION a.b(x INT) RETURNS INT AS RETURN x + 1
|
|||
CREATE FUNCTION a.b.c()
|
||||
CREATE INDEX abc ON t (a)
|
||||
CREATE INDEX abc ON t (a, b, b)
|
||||
CREATE INDEX abc ON t (a NULLS LAST)
|
||||
CREATE UNIQUE INDEX abc ON t (a, b, b)
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS my_idx ON tbl (a, b)
|
||||
CREATE SCHEMA x
|
||||
|
@ -685,6 +682,7 @@ INSERT OVERWRITE TABLE a.b IF EXISTS SELECT * FROM y
|
|||
INSERT OVERWRITE DIRECTORY 'x' SELECT 1
|
||||
INSERT OVERWRITE LOCAL DIRECTORY 'x' SELECT 1
|
||||
INSERT OVERWRITE LOCAL DIRECTORY 'x' ROW FORMAT DELIMITED FIELDS TERMINATED BY '1' COLLECTION ITEMS TERMINATED BY '2' MAP KEYS TERMINATED BY '3' LINES TERMINATED BY '4' NULL DEFINED AS '5' SELECT 1
|
||||
LOAD foo
|
||||
LOAD DATA INPATH 'x' INTO TABLE y PARTITION(ds = 'yyyy')
|
||||
LOAD DATA LOCAL INPATH 'x' INTO TABLE y PARTITION(ds = 'yyyy')
|
||||
LOAD DATA LOCAL INPATH 'x' INTO TABLE y PARTITION(ds = 'yyyy') INPUTFORMAT 'y'
|
||||
|
@ -721,9 +719,9 @@ SELECT ((SELECT 1) + 1)
|
|||
SELECT * FROM project.dataset.INFORMATION_SCHEMA.TABLES
|
||||
SELECT * FROM (table1 AS t1 LEFT JOIN table2 AS t2 ON 1 = 1)
|
||||
SELECT * FROM (tbl1 LEFT JOIN tbl2 ON 1 = 1)
|
||||
SELECT * FROM (tbl1 JOIN tbl2 JOIN tbl3)
|
||||
SELECT * FROM (tbl1 JOIN (tbl2 JOIN tbl3) ON bla = foo)
|
||||
SELECT * FROM (tbl1 JOIN LATERAL (SELECT * FROM bla) AS tbl)
|
||||
SELECT * FROM (tbl1, tbl2 JOIN tbl3 ON TRUE)
|
||||
SELECT * FROM (tbl1 JOIN (tbl2 CROSS JOIN tbl3) ON bla = foo)
|
||||
SELECT * FROM (tbl1, LATERAL (SELECT * FROM bla) AS tbl)
|
||||
SELECT CAST(x AS INT) /* comment */ FROM foo
|
||||
SELECT a /* x */, b /* x */
|
||||
SELECT a /* x */ /* y */ /* z */, b /* k */ /* m */
|
||||
|
@ -826,3 +824,5 @@ SELECT NEXT VALUE FOR db.schema.sequence_name OVER (ORDER BY foo), col
|
|||
SELECT PERCENTILE_CONT(x, 0.5) OVER ()
|
||||
SELECT PERCENTILE_CONT(x, 0.5 RESPECT NULLS) OVER ()
|
||||
SELECT PERCENTILE_CONT(x, 0.5 IGNORE NULLS) OVER ()
|
||||
WITH my_cte AS (SELECT 'a' AS desc) SELECT desc AS description FROM my_cte
|
||||
WITH my_cte AS (SELECT 'a' AS asc) SELECT asc AS description FROM my_cte
|
||||
|
|
4
tests/fixtures/optimizer/canonicalize.sql
vendored
4
tests/fixtures/optimizer/canonicalize.sql
vendored
|
@ -10,8 +10,8 @@ SELECT CAST(1 AS VARCHAR) AS "a" FROM "w" AS "w";
|
|||
SELECT CAST(1 + 3.2 AS DOUBLE) AS a FROM w AS w;
|
||||
SELECT 1 + 3.2 AS "a" FROM "w" AS "w";
|
||||
|
||||
SELECT CAST("2022-01-01" AS DATE) + INTERVAL '1' day;
|
||||
SELECT CAST("2022-01-01" AS DATE) + INTERVAL '1' day AS "_col_0";
|
||||
SELECT CAST('2022-01-01' AS DATE) + INTERVAL '1' day;
|
||||
SELECT CAST('2022-01-01' AS DATE) + INTERVAL '1' day AS "_col_0";
|
||||
|
||||
--------------------------------------
|
||||
-- Ensure boolean predicates
|
||||
|
|
|
@ -35,8 +35,8 @@ SELECT * FROM (SELECT * FROM (SELECT a FROM x) AS x) AS y JOIN (SELECT * FROM x)
|
|||
WITH x_2 AS (SELECT a FROM x), y AS (SELECT * FROM x_2 AS x), z AS (SELECT * FROM x) SELECT * FROM y AS y JOIN z AS z ON x.a = y.a;
|
||||
|
||||
-- Name conflicts with table alias
|
||||
SELECT a FROM (SELECT a FROM (SELECT a FROM x) AS y) AS z JOIN q AS y;
|
||||
WITH y AS (SELECT a FROM x), z AS (SELECT a FROM y AS y) SELECT a FROM z AS z JOIN q AS y;
|
||||
SELECT a FROM (SELECT a FROM (SELECT a FROM x) AS y) AS z CROSS JOIN q AS y;
|
||||
WITH y AS (SELECT a FROM x), z AS (SELECT a FROM y AS y) SELECT a FROM z AS z CROSS JOIN q AS y;
|
||||
|
||||
-- Name conflicts with existing CTE
|
||||
WITH y AS (SELECT a FROM (SELECT a FROM x) AS y) SELECT a FROM y;
|
||||
|
@ -63,12 +63,12 @@ SELECT a FROM x WHERE b = (SELECT c FROM y WHERE y.a = x.a);
|
|||
SELECT a FROM x WHERE b = (SELECT c FROM y WHERE y.a = x.a);
|
||||
|
||||
-- Duplicate CTE
|
||||
SELECT a FROM (SELECT b FROM x) AS y JOIN (SELECT b FROM x) AS z;
|
||||
WITH y AS (SELECT b FROM x) SELECT a FROM y AS y JOIN y AS z;
|
||||
SELECT a FROM (SELECT b FROM x) AS y CROSS JOIN (SELECT b FROM x) AS z;
|
||||
WITH y AS (SELECT b FROM x) SELECT a FROM y AS y CROSS JOIN y AS z;
|
||||
|
||||
-- Doubly duplicate CTE
|
||||
SELECT * FROM (SELECT * FROM x JOIN (SELECT * FROM x) AS y) AS z JOIN (SELECT * FROM x JOIN (SELECT * FROM x) AS y) AS q;
|
||||
WITH y AS (SELECT * FROM x), z AS (SELECT * FROM x JOIN y AS y) SELECT * FROM z AS z JOIN z AS q;
|
||||
WITH y AS (SELECT * FROM x), z AS (SELECT * FROM x, y AS y) SELECT * FROM z AS z, z AS q;
|
||||
|
||||
-- Another duplicate...
|
||||
SELECT x.id FROM (SELECT * FROM x AS x JOIN y AS y ON x.id = y.id) AS x JOIN (SELECT * FROM x AS x JOIN y AS y ON x.id = y.id) AS y ON x.id = y.id;
|
||||
|
@ -79,8 +79,8 @@ WITH x_2 AS (SELECT * FROM x AS x JOIN y AS y ON x.id = y.id) SELECT x.id FROM x
|
|||
(WITH cte AS (SELECT * FROM x) SELECT * FROM cte AS cte) LIMIT 1;
|
||||
|
||||
-- Existing duplicate CTE
|
||||
WITH y AS (SELECT a FROM x) SELECT a FROM (SELECT a FROM x) AS y JOIN y AS z;
|
||||
WITH y AS (SELECT a FROM x) SELECT a FROM y AS y JOIN y AS z;
|
||||
WITH y AS (SELECT a FROM x) SELECT a FROM (SELECT a FROM x) AS y CROSS JOIN y AS z;
|
||||
WITH y AS (SELECT a FROM x) SELECT a FROM y AS y CROSS JOIN y AS z;
|
||||
|
||||
-- Nested CTE
|
||||
WITH cte1 AS (SELECT a FROM x) SELECT a FROM (WITH cte2 AS (SELECT a FROM cte1) SELECT a FROM cte2);
|
||||
|
|
40
tests/fixtures/optimizer/expand_laterals.sql
vendored
40
tests/fixtures/optimizer/expand_laterals.sql
vendored
|
@ -1,40 +0,0 @@
|
|||
# title: expand alias reference
|
||||
SELECT
|
||||
x.a + 1 AS i,
|
||||
i + 1 AS j,
|
||||
j + 1 AS k
|
||||
FROM x;
|
||||
SELECT
|
||||
x.a + 1 AS i,
|
||||
x.a + 1 + 1 AS j,
|
||||
x.a + 1 + 1 + 1 AS k
|
||||
FROM x;
|
||||
|
||||
# title: noop - reference comes before alias
|
||||
SELECT
|
||||
b + 1 AS j,
|
||||
x.a + 1 AS i
|
||||
FROM x;
|
||||
SELECT
|
||||
b + 1 AS j,
|
||||
x.a + 1 AS i
|
||||
FROM x;
|
||||
|
||||
|
||||
# title: subquery
|
||||
SELECT
|
||||
*
|
||||
FROM (
|
||||
SELECT
|
||||
x.a + 1 AS i,
|
||||
i + 1 AS j
|
||||
FROM x
|
||||
);
|
||||
SELECT
|
||||
*
|
||||
FROM (
|
||||
SELECT
|
||||
x.a + 1 AS i,
|
||||
x.a + 1 + 1 AS j
|
||||
FROM x
|
||||
);
|
|
@ -1,11 +0,0 @@
|
|||
--------------------------------------
|
||||
-- Multi Table Selects
|
||||
--------------------------------------
|
||||
SELECT * FROM x AS x, y AS y WHERE x.a = y.a;
|
||||
SELECT * FROM x AS x CROSS JOIN y AS y WHERE x.a = y.a;
|
||||
|
||||
SELECT * FROM x AS x, y AS y WHERE x.a = y.a AND x.a = 1 and y.b = 1;
|
||||
SELECT * FROM x AS x CROSS JOIN y AS y WHERE x.a = y.a AND x.a = 1 AND y.b = 1;
|
||||
|
||||
SELECT * FROM x AS x, y AS y WHERE x.a > y.a;
|
||||
SELECT * FROM x AS x CROSS JOIN y AS y WHERE x.a > y.a;
|
|
@ -4,20 +4,20 @@ SELECT * FROM (SELECT * FROM x AS x) AS x, (SELECT * FROM y AS y) AS y2;
|
|||
SELECT * FROM x AS x WHERE x = 1;
|
||||
SELECT * FROM x AS x WHERE x = 1;
|
||||
|
||||
SELECT * FROM x AS x JOIN y AS y;
|
||||
SELECT * FROM (SELECT * FROM x AS x) AS x JOIN (SELECT * FROM y AS y) AS y;
|
||||
SELECT * FROM x AS x CROSS JOIN y AS y;
|
||||
SELECT * FROM (SELECT * FROM x AS x) AS x CROSS JOIN (SELECT * FROM y AS y) AS y;
|
||||
|
||||
SELECT * FROM (SELECT 1) AS x JOIN y AS y;
|
||||
SELECT * FROM (SELECT 1) AS x JOIN (SELECT * FROM y AS y) AS y;
|
||||
SELECT * FROM (SELECT 1) AS x CROSS JOIN y AS y;
|
||||
SELECT * FROM (SELECT 1) AS x CROSS JOIN (SELECT * FROM y AS y) AS y;
|
||||
|
||||
SELECT * FROM x AS x JOIN (SELECT * FROM y) AS y;
|
||||
SELECT * FROM (SELECT * FROM x AS x) AS x JOIN (SELECT * FROM y) AS y;
|
||||
SELECT * FROM (SELECT * FROM x AS x) AS x, (SELECT * FROM y) AS y;
|
||||
|
||||
WITH y AS (SELECT *) SELECT * FROM x AS x;
|
||||
WITH y AS (SELECT *) SELECT * FROM x AS x;
|
||||
|
||||
WITH y AS (SELECT * FROM y AS y2 JOIN x AS z2) SELECT * FROM x AS x JOIN y as y;
|
||||
WITH y AS (SELECT * FROM (SELECT * FROM y AS y) AS y2 JOIN (SELECT * FROM x AS x) AS z2) SELECT * FROM (SELECT * FROM x AS x) AS x JOIN y AS y;
|
||||
WITH y AS (SELECT * FROM y AS y2 CROSS JOIN x AS z2) SELECT * FROM x AS x CROSS JOIN y as y;
|
||||
WITH y AS (SELECT * FROM (SELECT * FROM y AS y) AS y2 CROSS JOIN (SELECT * FROM x AS x) AS z2) SELECT * FROM (SELECT * FROM x AS x) AS x CROSS JOIN y AS y;
|
||||
|
||||
SELECT * FROM x AS x JOIN xx AS y;
|
||||
SELECT * FROM (SELECT * FROM x AS x) AS x JOIN xx AS y;
|
||||
SELECT * FROM x AS x CROSS JOIN xx AS y;
|
||||
SELECT * FROM (SELECT * FROM x AS x) AS x CROSS JOIN xx AS y;
|
||||
|
|
|
@ -48,8 +48,8 @@ SELECT r.b FROM (SELECT b FROM x AS x) AS q JOIN (SELECT b FROM x) AS r ON q.b =
|
|||
SELECT x_2.b AS b FROM x AS x JOIN x AS x_2 ON x.b = x_2.b;
|
||||
|
||||
# title: WHERE clause in joined derived table is merged to ON clause
|
||||
SELECT x.a, y.c FROM x JOIN (SELECT b, c FROM y WHERE c > 1) AS y ON x.b = y.b;
|
||||
SELECT x.a AS a, y.c AS c FROM x AS x JOIN y AS y ON x.b = y.b AND y.c > 1;
|
||||
SELECT x.a, y.c FROM x JOIN (SELECT b, c FROM y WHERE c > 1) AS y ON x.b = y.b ORDER BY x.a;
|
||||
SELECT x.a AS a, y.c AS c FROM x AS x JOIN y AS y ON x.b = y.b AND y.c > 1 ORDER BY x.a;
|
||||
|
||||
# title: Comma JOIN in outer query
|
||||
SELECT x.a, y.c FROM (SELECT a FROM x) AS x, (SELECT c FROM y) AS y;
|
||||
|
@ -57,7 +57,7 @@ SELECT x.a AS a, y.c AS c FROM x AS x, y AS y;
|
|||
|
||||
# title: Comma JOIN in inner query
|
||||
SELECT x.a, x.c FROM (SELECT x.a, z.c FROM x, y AS z) AS x;
|
||||
SELECT x.a AS a, z.c AS c FROM x AS x CROSS JOIN y AS z;
|
||||
SELECT x.a AS a, z.c AS c FROM x AS x, y AS z;
|
||||
|
||||
# title: (Regression) Column in ORDER BY
|
||||
SELECT * FROM (SELECT * FROM (SELECT * FROM x)) ORDER BY a LIMIT 1;
|
||||
|
|
3
tests/fixtures/optimizer/normalize.sql
vendored
3
tests/fixtures/optimizer/normalize.sql
vendored
|
@ -42,3 +42,6 @@ A OR ((((B OR C) AND (B OR D)) OR C) AND (((B OR C) AND (B OR D)) OR D));
|
|||
|
||||
SELECT * FROM x WHERE (A AND B) OR C;
|
||||
SELECT * FROM x WHERE (A OR C) AND (B OR C);
|
||||
|
||||
dt2 between '2022-01-01 12:00:00' and '2022-12-31' and dt2 >= '2022-05-01 12:00:00' or dt2 = '2021-06-01 12:00:00';
|
||||
(dt2 <= '2022-12-31' OR dt2 = '2021-06-01 12:00:00') AND (dt2 = '2021-06-01 12:00:00' OR dt2 >= '2022-01-01 12:00:00') AND (dt2 = '2021-06-01 12:00:00' OR dt2 >= '2022-05-01 12:00:00')
|
||||
|
|
|
@ -1,11 +1,19 @@
|
|||
SELECT a FROM x;
|
||||
SELECT a FROM x;
|
||||
|
||||
# dialect: snowflake
|
||||
SELECT A FROM X;
|
||||
SELECT A FROM X;
|
||||
|
||||
SELECT "A" FROM "X";
|
||||
SELECT "A" FROM "X";
|
||||
|
||||
SELECT a AS A FROM x;
|
||||
SELECT a AS A FROM x;
|
||||
SELECT a AS a FROM x;
|
||||
|
||||
# dialect: snowflake
|
||||
SELECT A AS a FROM X;
|
||||
SELECT A AS A FROM X;
|
||||
|
||||
SELECT * FROM x;
|
||||
SELECT * FROM x;
|
||||
|
@ -13,29 +21,37 @@ SELECT * FROM x;
|
|||
SELECT A FROM x;
|
||||
SELECT a FROM x;
|
||||
|
||||
# dialect: snowflake
|
||||
SELECT a FROM X;
|
||||
SELECT A FROM X;
|
||||
|
||||
SELECT a FROM X;
|
||||
SELECT a FROM x;
|
||||
|
||||
# dialect: snowflake
|
||||
SELECT A FROM x;
|
||||
SELECT A FROM X;
|
||||
|
||||
SELECT A AS A FROM (SELECT a AS A FROM x);
|
||||
SELECT a AS A FROM (SELECT a AS a FROM x);
|
||||
SELECT a AS a FROM (SELECT a AS a FROM x);
|
||||
|
||||
SELECT a AS B FROM x ORDER BY B;
|
||||
SELECT a AS B FROM x ORDER BY B;
|
||||
SELECT a AS b FROM x ORDER BY b;
|
||||
|
||||
SELECT A FROM x ORDER BY A;
|
||||
SELECT a FROM x ORDER BY a;
|
||||
|
||||
SELECT A AS B FROM X GROUP BY A HAVING SUM(B) > 0;
|
||||
SELECT a AS B FROM x GROUP BY a HAVING SUM(b) > 0;
|
||||
SELECT a AS b FROM x GROUP BY a HAVING SUM(b) > 0;
|
||||
|
||||
SELECT A AS B, SUM(B) AS C FROM X GROUP BY A HAVING C > 0;
|
||||
SELECT a AS B, SUM(b) AS C FROM x GROUP BY a HAVING C > 0;
|
||||
SELECT a AS b, SUM(b) AS c FROM x GROUP BY a HAVING c > 0;
|
||||
|
||||
SELECT A FROM X UNION SELECT A FROM X;
|
||||
SELECT a FROM x UNION SELECT a FROM x;
|
||||
|
||||
SELECT A AS A FROM X UNION SELECT A AS A FROM X;
|
||||
SELECT a AS A FROM x UNION SELECT a AS A FROM x;
|
||||
SELECT a AS a FROM x UNION SELECT a AS a FROM x;
|
||||
|
||||
(SELECT A AS A FROM X);
|
||||
(SELECT a AS A FROM x);
|
||||
(SELECT a AS a FROM x);
|
16
tests/fixtures/optimizer/optimize_joins.sql
vendored
16
tests/fixtures/optimizer/optimize_joins.sql
vendored
|
@ -10,11 +10,23 @@ SELECT * FROM x JOIN z ON x.a = z.a AND TRUE JOIN y ON y.a = z.a;
|
|||
SELECT * FROM x LEFT JOIN y ON y.a = 1 JOIN z ON x.a = z.a AND y.a = z.a;
|
||||
SELECT * FROM x JOIN z ON x.a = z.a AND TRUE LEFT JOIN y ON y.a = 1 AND y.a = z.a;
|
||||
|
||||
SELECT * FROM x INNER JOIN z;
|
||||
SELECT * FROM x JOIN z;
|
||||
SELECT * FROM x INNER JOIN z ON x.id = z.id;
|
||||
SELECT * FROM x JOIN z ON x.id = z.id;
|
||||
|
||||
SELECT * FROM x LEFT OUTER JOIN z;
|
||||
SELECT * FROM x LEFT JOIN z;
|
||||
|
||||
SELECT * FROM x CROSS JOIN z;
|
||||
SELECT * FROM x CROSS JOIN z;
|
||||
|
||||
SELECT * FROM x JOIN z;
|
||||
SELECT * FROM x CROSS JOIN z;
|
||||
|
||||
SELECT * FROM x NATURAL JOIN z;
|
||||
SELECT * FROM x NATURAL JOIN z;
|
||||
|
||||
SELECT * FROM x RIGHT JOIN z;
|
||||
SELECT * FROM x RIGHT JOIN z;
|
||||
|
||||
SELECT * FROM x JOIN z USING (id);
|
||||
SELECT * FROM x JOIN z USING (id);
|
||||
|
|
121
tests/fixtures/optimizer/optimizer.sql
vendored
121
tests/fixtures/optimizer/optimizer.sql
vendored
|
@ -101,10 +101,10 @@ SELECT
|
|||
"x"."a" AS "a",
|
||||
SUM("y"."b") AS "sum_b"
|
||||
FROM "x" AS "x"
|
||||
LEFT JOIN "_u_0" AS "_u_0"
|
||||
ON "x"."b" = "_u_0"."_u_1"
|
||||
JOIN "y" AS "y"
|
||||
ON "x"."b" = "y"."b"
|
||||
LEFT JOIN "_u_0" AS "_u_0"
|
||||
ON "x"."b" = "_u_0"."_u_1"
|
||||
WHERE
|
||||
"_u_0"."_col_0" >= 0 AND "x"."a" > 1
|
||||
GROUP BY
|
||||
|
@ -502,3 +502,120 @@ WHERE
|
|||
"unioned"."source_system" = 'bamboohr' OR "unioned"."source_system" = 'workday'
|
||||
QUALIFY
|
||||
ROW_NUMBER() OVER (PARTITION BY "unioned"."unique_filter_key" ORDER BY "unioned"."sort_order" DESC, 1) = 1;
|
||||
|
||||
# title: pivoted source with explicit selections
|
||||
# execute: false
|
||||
SELECT * FROM (SELECT a, b, c FROM sc.tb) PIVOT (SUM(c) FOR b IN ('x','y','z'));
|
||||
SELECT
|
||||
"_q_1"."a" AS "a",
|
||||
"_q_1"."x" AS "x",
|
||||
"_q_1"."y" AS "y",
|
||||
"_q_1"."z" AS "z"
|
||||
FROM (
|
||||
SELECT
|
||||
"tb"."a" AS "a",
|
||||
"tb"."b" AS "b",
|
||||
"tb"."c" AS "c"
|
||||
FROM "sc"."tb" AS "tb"
|
||||
) AS "_q_0" PIVOT(SUM("_q_0"."c") FOR "_q_0"."b" IN ('x', 'y', 'z')) AS "_q_1";
|
||||
|
||||
# title: pivoted source with implicit selections
|
||||
# execute: false
|
||||
SELECT * FROM (SELECT * FROM u) PIVOT (SUM(f) FOR h IN ('x', 'y'));
|
||||
SELECT
|
||||
"_q_1"."g" AS "g",
|
||||
"_q_1"."x" AS "x",
|
||||
"_q_1"."y" AS "y"
|
||||
FROM (
|
||||
SELECT
|
||||
"u"."f" AS "f",
|
||||
"u"."g" AS "g",
|
||||
"u"."h" AS "h"
|
||||
FROM "u" AS "u"
|
||||
) AS "_q_0" PIVOT(SUM("_q_0"."f") FOR "_q_0"."h" IN ('x', 'y')) AS "_q_1";
|
||||
|
||||
# title: selecting explicit qualified columns from pivoted source with explicit selections
|
||||
# execute: false
|
||||
SELECT piv.x, piv.y FROM (SELECT f, h FROM u) PIVOT (SUM(f) FOR h IN ('x', 'y')) AS piv;
|
||||
SELECT
|
||||
"piv"."x" AS "x",
|
||||
"piv"."y" AS "y"
|
||||
FROM (
|
||||
SELECT
|
||||
"u"."f" AS "f",
|
||||
"u"."h" AS "h"
|
||||
FROM "u" AS "u"
|
||||
) AS "_q_0" PIVOT(SUM("_q_0"."f") FOR "_q_0"."h" IN ('x', 'y')) AS "piv";
|
||||
|
||||
# title: selecting explicit unqualified columns from pivoted source with implicit selections
|
||||
# execute: false
|
||||
SELECT x, y FROM u PIVOT (SUM(f) FOR h IN ('x', 'y'));
|
||||
SELECT
|
||||
"_q_0"."x" AS "x",
|
||||
"_q_0"."y" AS "y"
|
||||
FROM "u" AS "u" PIVOT(SUM("u"."f") FOR "u"."h" IN ('x', 'y')) AS "_q_0";
|
||||
|
||||
# title: selecting all columns from a pivoted CTE source, using alias for the aggregation and generating bigquery
|
||||
# execute: false
|
||||
# dialect: bigquery
|
||||
WITH u_cte(f, g, h) AS (SELECT * FROM u) SELECT * FROM u_cte PIVOT(SUM(f) AS sum FOR h IN ('x', 'y'));
|
||||
WITH `u_cte` AS (
|
||||
SELECT
|
||||
`u`.`f` AS `f`,
|
||||
`u`.`g` AS `g`,
|
||||
`u`.`h` AS `h`
|
||||
FROM `u` AS `u`
|
||||
)
|
||||
SELECT
|
||||
`_q_0`.`g` AS `g`,
|
||||
`_q_0`.`sum_x` AS `sum_x`,
|
||||
`_q_0`.`sum_y` AS `sum_y`
|
||||
FROM `u_cte` AS `u_cte` PIVOT(SUM(`u_cte`.`f`) AS `sum` FOR `u_cte`.`h` IN ('x', 'y')) AS `_q_0`;
|
||||
|
||||
# title: selecting all columns from a pivoted source and generating snowflake
|
||||
# execute: false
|
||||
# dialect: snowflake
|
||||
SELECT * FROM u PIVOT (SUM(f) FOR h IN ('x', 'y'));
|
||||
SELECT
|
||||
"_q_0"."G" AS "G",
|
||||
"_q_0"."'x'" AS "'x'",
|
||||
"_q_0"."'y'" AS "'y'"
|
||||
FROM "U" AS "U" PIVOT(SUM("U"."F") FOR "U"."H" IN ('x', 'y')) AS "_q_0"
|
||||
;
|
||||
|
||||
# title: selecting all columns from a pivoted source and generating spark
|
||||
# note: spark doesn't allow pivot aliases or qualified columns for the pivot's "field" (`h`)
|
||||
# execute: false
|
||||
# dialect: spark
|
||||
SELECT * FROM u PIVOT (SUM(f) FOR h IN ('x', 'y'));
|
||||
SELECT
|
||||
`_q_0`.`g` AS `g`,
|
||||
`_q_0`.`x` AS `x`,
|
||||
`_q_0`.`y` AS `y`
|
||||
FROM (
|
||||
SELECT
|
||||
*
|
||||
FROM `u` AS `u` PIVOT(SUM(`u`.`f`) FOR `h` IN ('x', 'y'))
|
||||
) AS `_q_0`;
|
||||
|
||||
# title: quoting is maintained
|
||||
# dialect: snowflake
|
||||
with cte1("id", foo) as (select 1, 2) select "id" from cte1;
|
||||
WITH "CTE1" AS (
|
||||
SELECT
|
||||
1 AS "id"
|
||||
)
|
||||
SELECT
|
||||
"CTE1"."id" AS "id"
|
||||
FROM "CTE1";
|
||||
|
||||
# title: ensures proper quoting happens after all optimizations
|
||||
# execute: false
|
||||
SELECT "foO".x FROM (SELECT 1 AS x) AS "foO";
|
||||
WITH "foO" AS (
|
||||
SELECT
|
||||
1 AS "x"
|
||||
)
|
||||
SELECT
|
||||
"foO"."x" AS "x"
|
||||
FROM "foO" AS "foO";
|
||||
|
|
|
@ -4,8 +4,8 @@ SELECT x.a AS a FROM (SELECT x.a FROM x AS x WHERE x.a = 1 AND x.b = 1) AS x JOI
|
|||
WITH x AS (SELECT y.a FROM y) SELECT * FROM x WHERE x.a = 1;
|
||||
WITH x AS (SELECT y.a FROM y WHERE y.a = 1) SELECT * FROM x WHERE TRUE;
|
||||
|
||||
SELECT x.a FROM (SELECT * FROM x) AS x JOIN y WHERE y.a = 1 OR (x.a = 1 AND x.b = 1);
|
||||
SELECT x.a FROM (SELECT * FROM x) AS x JOIN y WHERE (x.a = 1 AND x.b = 1) OR y.a = 1;
|
||||
SELECT x.a FROM (SELECT * FROM x) AS x CROSS JOIN y WHERE y.a = 1 OR (x.a = 1 AND x.b = 1);
|
||||
SELECT x.a FROM (SELECT * FROM x) AS x CROSS JOIN y WHERE (x.a = 1 AND x.b = 1) OR y.a = 1;
|
||||
|
||||
SELECT x.a FROM (SELECT * FROM x) AS x JOIN y WHERE (x.a = y.a AND x.a = 1 AND x.b = 1) OR x.a = y.a;
|
||||
SELECT x.a FROM (SELECT * FROM x) AS x JOIN y ON x.a = y.a WHERE TRUE;
|
||||
|
|
|
@ -61,9 +61,13 @@ SELECT q.x AS x FROM (VALUES (1, 2)) AS q(x, y);
|
|||
SELECT i.a FROM x AS i LEFT JOIN (SELECT a, b FROM (SELECT a, b FROM x)) AS j ON i.a = j.a;
|
||||
SELECT i.a AS a FROM x AS i LEFT JOIN (SELECT _q_0.a AS a FROM (SELECT x.a AS a FROM x AS x) AS _q_0) AS j ON i.a = j.a;
|
||||
|
||||
WITH cte AS (SELECT source.a AS a, ROW_NUMBER() OVER (PARTITION BY source.id, source.timestamp ORDER BY source.a DESC) AS index FROM source AS source QUALIFY index) SELECT cte.a AS a FROM cte;
|
||||
WITH cte AS (SELECT source.a AS a FROM source AS source QUALIFY ROW_NUMBER() OVER (PARTITION BY source.id, source.timestamp ORDER BY source.a DESC)) SELECT cte.a AS a FROM cte;
|
||||
|
||||
--------------------------------------
|
||||
-- Unknown Star Expansion
|
||||
--------------------------------------
|
||||
|
||||
SELECT a FROM (SELECT * FROM zz) WHERE b = 1;
|
||||
SELECT _q_0.a AS a FROM (SELECT zz.a AS a, zz.b AS b FROM zz AS zz) AS _q_0 WHERE _q_0.b = 1;
|
||||
|
||||
|
|
35
tests/fixtures/optimizer/qualify_columns.sql
vendored
35
tests/fixtures/optimizer/qualify_columns.sql
vendored
|
@ -5,7 +5,7 @@ SELECT a FROM x;
|
|||
SELECT x.a AS a FROM x AS x;
|
||||
|
||||
SELECT "a" FROM x;
|
||||
SELECT x."a" AS "a" FROM x AS x;
|
||||
SELECT x.a AS a FROM x AS x;
|
||||
|
||||
# execute: false
|
||||
SELECT a FROM zz GROUP BY a ORDER BY a;
|
||||
|
@ -396,8 +396,39 @@ SELECT x.a + 1 AS a, ROW_NUMBER() OVER (PARTITION BY x.b ORDER BY x.a) AS row_nu
|
|||
|
||||
# dialect: bigquery
|
||||
SELECT ROW_NUMBER() OVER (PARTITION BY a ORDER BY b) AS row_num FROM x QUALIFY row_num = 1;
|
||||
SELECT ROW_NUMBER() OVER (PARTITION BY x.a ORDER BY x.b) AS row_num FROM x AS x QUALIFY row_num = 1;
|
||||
SELECT ROW_NUMBER() OVER (PARTITION BY x.a ORDER BY x.b) AS row_num FROM x AS x QUALIFY ROW_NUMBER() OVER (PARTITION BY x.a ORDER BY x.b) = 1;
|
||||
|
||||
# dialect: bigquery
|
||||
SELECT x.b, x.a FROM x LEFT JOIN y ON x.b = y.b QUALIFY ROW_NUMBER() OVER(PARTITION BY x.b ORDER BY x.a DESC) = 1;
|
||||
SELECT x.b AS b, x.a AS a FROM x AS x LEFT JOIN y AS y ON x.b = y.b QUALIFY ROW_NUMBER() OVER (PARTITION BY x.b ORDER BY x.a DESC) = 1;
|
||||
|
||||
SELECT * FROM x QUALIFY COUNT(a) OVER (PARTITION BY b) > 1;
|
||||
SELECT x.a AS a, x.b AS b FROM x AS x QUALIFY COUNT(x.a) OVER (PARTITION BY x.b) > 1;
|
||||
|
||||
--------------------------------------
|
||||
-- Expand laterals
|
||||
--------------------------------------
|
||||
|
||||
# title: expand alias reference
|
||||
SELECT
|
||||
x.a + 1 AS i,
|
||||
i + 1 AS j,
|
||||
j + 1 AS k
|
||||
FROM x;
|
||||
SELECT x.a + 1 AS i, x.a + 1 + 1 AS j, x.a + 1 + 1 + 1 AS k FROM x AS x;
|
||||
|
||||
# title: noop - reference comes before alias
|
||||
# execute: false
|
||||
SELECT i + 1 AS j, x.a + 1 AS i FROM x;
|
||||
SELECT i + 1 AS j, x.a + 1 AS i FROM x AS x;
|
||||
|
||||
# title: subquery
|
||||
SELECT
|
||||
*
|
||||
FROM (
|
||||
SELECT
|
||||
x.a + 1 AS i,
|
||||
i + 1 AS j
|
||||
FROM x
|
||||
);
|
||||
SELECT _q_0.i AS i, _q_0.j AS j FROM (SELECT x.a + 1 AS i, x.a + 1 + 1 AS j FROM x AS x) AS _q_0;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
SELECT z.a FROM x;
|
||||
SELECT z.* FROM x;
|
||||
SELECT x FROM x;
|
||||
INSERT INTO x VALUES (1, 2);
|
||||
SELECT x FROM VALUES (1, 2);
|
||||
SELECT a FROM x AS z JOIN y AS z;
|
||||
SELECT a FROM x JOIN (SELECT b FROM y WHERE y.b = x.c);
|
||||
SELECT a FROM x AS y JOIN (SELECT a FROM y) AS q ON y.a = q.a;
|
||||
|
|
|
@ -10,11 +10,11 @@ SELECT x.b AS b FROM x AS x;
|
|||
--------------------------------------
|
||||
-- Derived tables
|
||||
--------------------------------------
|
||||
SELECT x.a FROM x AS x JOIN (SELECT * FROM x);
|
||||
SELECT x.a AS a FROM x AS x JOIN (SELECT x.a AS a FROM x AS x) AS _q_0;
|
||||
SELECT x.a FROM x AS x CROSS JOIN (SELECT * FROM x);
|
||||
SELECT x.a AS a FROM x AS x CROSS JOIN (SELECT x.a AS a FROM x AS x) AS _q_0;
|
||||
|
||||
SELECT x.b FROM x AS x JOIN (SELECT b FROM x);
|
||||
SELECT x.b AS b FROM x AS x JOIN (SELECT x.b AS b FROM x AS x) AS _q_0;
|
||||
SELECT x.b FROM x AS x CROSS JOIN (SELECT b FROM x);
|
||||
SELECT x.b AS b FROM x AS x CROSS JOIN (SELECT x.b AS b FROM x AS x) AS _q_0;
|
||||
|
||||
--------------------------------------
|
||||
-- Expand *
|
||||
|
@ -22,11 +22,11 @@ SELECT x.b AS b FROM x AS x JOIN (SELECT x.b AS b FROM x AS x) AS _q_0;
|
|||
SELECT * FROM x;
|
||||
SELECT x.a AS a FROM x AS x;
|
||||
|
||||
SELECT * FROM y JOIN z ON y.b = z.b;
|
||||
SELECT y.b AS b, z.b AS b FROM y AS y JOIN z AS z ON y.b = z.b;
|
||||
SELECT * FROM y CROSS JOIN z ON y.b = z.b;
|
||||
SELECT y.b AS b, z.b AS b FROM y AS y CROSS JOIN z AS z ON y.b = z.b;
|
||||
|
||||
SELECT * FROM y JOIN z ON y.c = z.c;
|
||||
SELECT y.b AS b, z.b AS b FROM y AS y JOIN z AS z ON y.c = z.c;
|
||||
SELECT * FROM y CROSS JOIN z ON y.c = z.c;
|
||||
SELECT y.b AS b, z.b AS b FROM y AS y CROSS JOIN z AS z ON y.c = z.c;
|
||||
|
||||
SELECT a FROM (SELECT * FROM x);
|
||||
SELECT _q_0.a AS a FROM (SELECT x.a AS a FROM x AS x) AS _q_0;
|
||||
|
|
7
tests/fixtures/optimizer/qualify_tables.sql
vendored
7
tests/fixtures/optimizer/qualify_tables.sql
vendored
|
@ -16,9 +16,12 @@ WITH a AS (SELECT 1 FROM c.db.z AS z) SELECT 1 FROM a;
|
|||
SELECT (SELECT y.c FROM y AS y) FROM x;
|
||||
SELECT (SELECT y.c FROM c.db.y AS y) FROM c.db.x AS x;
|
||||
|
||||
-------------------------
|
||||
SELECT * FROM x PIVOT (SUM(a) FOR b IN ('a', 'b'));
|
||||
SELECT * FROM c.db.x AS x PIVOT(SUM(a) FOR b IN ('a', 'b')) AS _q_0;
|
||||
|
||||
----------------------------
|
||||
-- Expand join constructs
|
||||
-------------------------
|
||||
----------------------------
|
||||
|
||||
-- This is valid in Trino, so we treat the (tbl AS tbl) as a "join construct" per postgres' terminology.
|
||||
SELECT * FROM (tbl AS tbl) AS _q_0;
|
||||
|
|
17
tests/fixtures/optimizer/simplify.sql
vendored
17
tests/fixtures/optimizer/simplify.sql
vendored
|
@ -201,6 +201,21 @@ A AND B AND C AND D;
|
|||
(((((A) AND B)) AND C)) AND D;
|
||||
A AND B AND C AND D;
|
||||
|
||||
(x + 1) + 2;
|
||||
x + 3;
|
||||
|
||||
x + (1 + 2);
|
||||
x + 3;
|
||||
|
||||
(x * 2) * 4 + (1 + 3) + 5;
|
||||
x * 8 + 9;
|
||||
|
||||
(x - 1) - 2;
|
||||
(x - 1) - 2;
|
||||
|
||||
x - (3 - 2);
|
||||
x - 1;
|
||||
|
||||
--------------------------------------
|
||||
-- Comparison and Pruning
|
||||
--------------------------------------
|
||||
|
@ -574,4 +589,4 @@ x > 3;
|
|||
TRUE;
|
||||
|
||||
x = 2018 OR x <> 2018;
|
||||
x <> 2018 OR x = 2018;
|
||||
x <> 2018 OR x = 2018;
|
||||
|
|
540
tests/fixtures/optimizer/tpc-ds/tpc-ds.sql
vendored
540
tests/fixtures/optimizer/tpc-ds/tpc-ds.sql
vendored
File diff suppressed because it is too large
Load diff
40
tests/fixtures/optimizer/tpc-h/tpc-h.sql
vendored
40
tests/fixtures/optimizer/tpc-h/tpc-h.sql
vendored
|
@ -99,19 +99,19 @@ order by
|
|||
p_partkey
|
||||
limit
|
||||
100;
|
||||
WITH "partsupp_2" AS (
|
||||
SELECT
|
||||
"partsupp"."ps_partkey" AS "ps_partkey",
|
||||
"partsupp"."ps_suppkey" AS "ps_suppkey",
|
||||
"partsupp"."ps_supplycost" AS "ps_supplycost"
|
||||
FROM "partsupp" AS "partsupp"
|
||||
), "region_2" AS (
|
||||
WITH "region_2" AS (
|
||||
SELECT
|
||||
"region"."r_regionkey" AS "r_regionkey",
|
||||
"region"."r_name" AS "r_name"
|
||||
FROM "region" AS "region"
|
||||
WHERE
|
||||
"region"."r_name" = 'EUROPE'
|
||||
), "partsupp_2" AS (
|
||||
SELECT
|
||||
"partsupp"."ps_partkey" AS "ps_partkey",
|
||||
"partsupp"."ps_suppkey" AS "ps_suppkey",
|
||||
"partsupp"."ps_supplycost" AS "ps_supplycost"
|
||||
FROM "partsupp" AS "partsupp"
|
||||
), "_u_0" AS (
|
||||
SELECT
|
||||
MIN("partsupp"."ps_supplycost") AS "_col_0",
|
||||
|
@ -136,8 +136,6 @@ SELECT
|
|||
"supplier"."s_phone" AS "s_phone",
|
||||
"supplier"."s_comment" AS "s_comment"
|
||||
FROM "part" AS "part"
|
||||
LEFT JOIN "_u_0" AS "_u_0"
|
||||
ON "part"."p_partkey" = "_u_0"."_u_1"
|
||||
CROSS JOIN "region_2" AS "region"
|
||||
JOIN "nation" AS "nation"
|
||||
ON "nation"."n_regionkey" = "region"."r_regionkey"
|
||||
|
@ -146,6 +144,8 @@ JOIN "partsupp_2" AS "partsupp"
|
|||
JOIN "supplier" AS "supplier"
|
||||
ON "supplier"."s_nationkey" = "nation"."n_nationkey"
|
||||
AND "supplier"."s_suppkey" = "partsupp"."ps_suppkey"
|
||||
LEFT JOIN "_u_0" AS "_u_0"
|
||||
ON "part"."p_partkey" = "_u_0"."_u_1"
|
||||
WHERE
|
||||
"part"."p_size" = 15
|
||||
AND "part"."p_type" LIKE '%BRASS'
|
||||
|
@ -681,11 +681,11 @@ SELECT
|
|||
"partsupp"."ps_partkey" AS "ps_partkey",
|
||||
SUM("partsupp"."ps_supplycost" * "partsupp"."ps_availqty") AS "value"
|
||||
FROM "partsupp" AS "partsupp"
|
||||
CROSS JOIN "_u_0" AS "_u_0"
|
||||
JOIN "supplier_2" AS "supplier"
|
||||
ON "partsupp"."ps_suppkey" = "supplier"."s_suppkey"
|
||||
JOIN "nation_2" AS "nation"
|
||||
ON "supplier"."s_nationkey" = "nation"."n_nationkey"
|
||||
CROSS JOIN "_u_0" AS "_u_0"
|
||||
GROUP BY
|
||||
"partsupp"."ps_partkey"
|
||||
HAVING
|
||||
|
@ -950,13 +950,13 @@ SELECT
|
|||
"part"."p_size" AS "p_size",
|
||||
COUNT(DISTINCT "partsupp"."ps_suppkey") AS "supplier_cnt"
|
||||
FROM "partsupp" AS "partsupp"
|
||||
LEFT JOIN "_u_0" AS "_u_0"
|
||||
ON "partsupp"."ps_suppkey" = "_u_0"."s_suppkey"
|
||||
JOIN "part" AS "part"
|
||||
ON "part"."p_brand" <> 'Brand#45'
|
||||
AND "part"."p_partkey" = "partsupp"."ps_partkey"
|
||||
AND "part"."p_size" IN (49, 14, 23, 45, 19, 3, 36, 9)
|
||||
AND NOT "part"."p_type" LIKE 'MEDIUM POLISHED%'
|
||||
LEFT JOIN "_u_0" AS "_u_0"
|
||||
ON "partsupp"."ps_suppkey" = "_u_0"."s_suppkey"
|
||||
WHERE
|
||||
"_u_0"."s_suppkey" IS NULL
|
||||
GROUP BY
|
||||
|
@ -1066,10 +1066,10 @@ SELECT
|
|||
FROM "customer" AS "customer"
|
||||
JOIN "orders" AS "orders"
|
||||
ON "customer"."c_custkey" = "orders"."o_custkey"
|
||||
LEFT JOIN "_u_0" AS "_u_0"
|
||||
ON "orders"."o_orderkey" = "_u_0"."l_orderkey"
|
||||
JOIN "lineitem" AS "lineitem"
|
||||
ON "orders"."o_orderkey" = "lineitem"."l_orderkey"
|
||||
LEFT JOIN "_u_0" AS "_u_0"
|
||||
ON "orders"."o_orderkey" = "_u_0"."l_orderkey"
|
||||
WHERE
|
||||
NOT "_u_0"."l_orderkey" IS NULL
|
||||
GROUP BY
|
||||
|
@ -1260,10 +1260,10 @@ SELECT
|
|||
"supplier"."s_name" AS "s_name",
|
||||
"supplier"."s_address" AS "s_address"
|
||||
FROM "supplier" AS "supplier"
|
||||
LEFT JOIN "_u_4" AS "_u_4"
|
||||
ON "supplier"."s_suppkey" = "_u_4"."ps_suppkey"
|
||||
JOIN "nation" AS "nation"
|
||||
ON "nation"."n_name" = 'CANADA' AND "supplier"."s_nationkey" = "nation"."n_nationkey"
|
||||
LEFT JOIN "_u_4" AS "_u_4"
|
||||
ON "supplier"."s_suppkey" = "_u_4"."ps_suppkey"
|
||||
WHERE
|
||||
NOT "_u_4"."ps_suppkey" IS NULL
|
||||
ORDER BY
|
||||
|
@ -1337,15 +1337,15 @@ FROM "supplier" AS "supplier"
|
|||
JOIN "lineitem" AS "lineitem"
|
||||
ON "lineitem"."l_receiptdate" > "lineitem"."l_commitdate"
|
||||
AND "supplier"."s_suppkey" = "lineitem"."l_suppkey"
|
||||
LEFT JOIN "_u_0" AS "_u_0"
|
||||
ON "_u_0"."l_orderkey" = "lineitem"."l_orderkey"
|
||||
LEFT JOIN "_u_2" AS "_u_2"
|
||||
ON "_u_2"."l_orderkey" = "lineitem"."l_orderkey"
|
||||
JOIN "orders" AS "orders"
|
||||
ON "orders"."o_orderkey" = "lineitem"."l_orderkey" AND "orders"."o_orderstatus" = 'F'
|
||||
JOIN "nation" AS "nation"
|
||||
ON "nation"."n_name" = 'SAUDI ARABIA'
|
||||
AND "supplier"."s_nationkey" = "nation"."n_nationkey"
|
||||
LEFT JOIN "_u_0" AS "_u_0"
|
||||
ON "_u_0"."l_orderkey" = "lineitem"."l_orderkey"
|
||||
LEFT JOIN "_u_2" AS "_u_2"
|
||||
ON "_u_2"."l_orderkey" = "lineitem"."l_orderkey"
|
||||
WHERE
|
||||
(
|
||||
"_u_2"."l_orderkey" IS NULL
|
||||
|
|
2
tests/fixtures/partial.sql
vendored
2
tests/fixtures/partial.sql
vendored
|
@ -2,7 +2,7 @@ SELECT a FROM
|
|||
SELECT a FROM x WHERE
|
||||
SELECT a +
|
||||
a *
|
||||
SELECT a FROM x JOIN
|
||||
SELECT a FROM x,
|
||||
SELECT a FROM x GROUP BY
|
||||
WITH a AS (SELECT 1), b AS (SELECT 2)
|
||||
SELECT FROM x
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue