Merging upstream version 7.1.3.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
964bd62de9
commit
e6b3d2fe54
42 changed files with 1430 additions and 253 deletions
317
tests/fixtures/optimizer/eliminate_joins.sql
vendored
Normal file
317
tests/fixtures/optimizer/eliminate_joins.sql
vendored
Normal file
|
@ -0,0 +1,317 @@
|
|||
# title: Remove left join on distinct derived table
|
||||
SELECT
|
||||
x.a
|
||||
FROM x
|
||||
LEFT JOIN (
|
||||
SELECT DISTINCT
|
||||
y.b
|
||||
FROM y
|
||||
) AS y
|
||||
ON x.b = y.b;
|
||||
SELECT
|
||||
x.a
|
||||
FROM x;
|
||||
|
||||
# title: Remove left join on grouped derived table
|
||||
SELECT
|
||||
x.a
|
||||
FROM x
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
y.b,
|
||||
SUM(y.c)
|
||||
FROM y
|
||||
GROUP BY y.b
|
||||
) AS y
|
||||
ON x.b = y.b;
|
||||
SELECT
|
||||
x.a
|
||||
FROM x;
|
||||
|
||||
# title: Remove left join on aggregate derived table
|
||||
SELECT
|
||||
x.a
|
||||
FROM x
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
SUM(y.b) AS b
|
||||
FROM y
|
||||
) AS y
|
||||
ON x.b = y.b;
|
||||
SELECT
|
||||
x.a
|
||||
FROM x;
|
||||
|
||||
# title: Noop - not all distinct columns in condition
|
||||
SELECT
|
||||
x.a
|
||||
FROM x
|
||||
LEFT JOIN (
|
||||
SELECT DISTINCT
|
||||
y.b,
|
||||
y.c
|
||||
FROM y
|
||||
) AS y
|
||||
ON x.b = y.b;
|
||||
SELECT
|
||||
x.a
|
||||
FROM x
|
||||
LEFT JOIN (
|
||||
SELECT DISTINCT
|
||||
y.b,
|
||||
y.c
|
||||
FROM y
|
||||
) AS y
|
||||
ON x.b = y.b;
|
||||
|
||||
# title: Noop - not all grouped columns in condition
|
||||
SELECT
|
||||
x.a
|
||||
FROM x
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
y.b,
|
||||
y.c
|
||||
FROM y
|
||||
GROUP BY
|
||||
y.b,
|
||||
y.c
|
||||
) AS y
|
||||
ON x.b = y.b;
|
||||
SELECT
|
||||
x.a
|
||||
FROM x
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
y.b,
|
||||
y.c
|
||||
FROM y
|
||||
GROUP BY
|
||||
y.b,
|
||||
y.c
|
||||
) AS y
|
||||
ON x.b = y.b;
|
||||
|
||||
# title: Noop - not left join
|
||||
SELECT
|
||||
x.a
|
||||
FROM x
|
||||
JOIN (
|
||||
SELECT DISTINCT
|
||||
y.b
|
||||
FROM y
|
||||
) AS y
|
||||
ON x.b = y.b;
|
||||
SELECT
|
||||
x.a
|
||||
FROM x
|
||||
JOIN (
|
||||
SELECT DISTINCT
|
||||
y.b
|
||||
FROM y
|
||||
) AS y
|
||||
ON x.b = y.b;
|
||||
|
||||
# title: Noop - unqualified columns
|
||||
SELECT
|
||||
a
|
||||
FROM x
|
||||
LEFT JOIN (
|
||||
SELECT DISTINCT
|
||||
y.b
|
||||
FROM y
|
||||
) AS y
|
||||
ON x.b = y.b;
|
||||
SELECT
|
||||
a
|
||||
FROM x
|
||||
LEFT JOIN (
|
||||
SELECT DISTINCT
|
||||
y.b
|
||||
FROM y
|
||||
) AS y
|
||||
ON x.b = y.b;
|
||||
|
||||
# title: Noop - cross join
|
||||
SELECT
|
||||
a
|
||||
FROM x
|
||||
CROSS JOIN (
|
||||
SELECT DISTINCT
|
||||
y.b
|
||||
FROM y
|
||||
) AS y;
|
||||
SELECT
|
||||
a
|
||||
FROM x
|
||||
CROSS JOIN (
|
||||
SELECT DISTINCT
|
||||
y.b
|
||||
FROM y
|
||||
) AS y;
|
||||
|
||||
# title: Noop - column is used
|
||||
SELECT
|
||||
x.a,
|
||||
y.b
|
||||
FROM x
|
||||
LEFT JOIN (
|
||||
SELECT DISTINCT
|
||||
y.b
|
||||
FROM y
|
||||
) AS y
|
||||
ON x.b = y.b;
|
||||
SELECT
|
||||
x.a,
|
||||
y.b
|
||||
FROM x
|
||||
LEFT JOIN (
|
||||
SELECT DISTINCT
|
||||
y.b
|
||||
FROM y
|
||||
) AS y
|
||||
ON x.b = y.b;
|
||||
|
||||
# title: Multiple group by columns
|
||||
SELECT
|
||||
x.a
|
||||
FROM x
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
y.b AS b,
|
||||
y.c + 1 AS d,
|
||||
COUNT(1)
|
||||
FROM y
|
||||
GROUP BY y.b, y.c + 1
|
||||
) AS y
|
||||
ON x.b = y.b
|
||||
AND 1 = y.d;
|
||||
SELECT
|
||||
x.a
|
||||
FROM x;
|
||||
|
||||
# title: Chained left joins
|
||||
SELECT
|
||||
x.a
|
||||
FROM x
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
y.b AS b
|
||||
FROM y
|
||||
GROUP BY y.b
|
||||
) AS y
|
||||
ON x.b = y.b
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
y.b AS c
|
||||
FROM y
|
||||
GROUP BY y.b
|
||||
) AS z
|
||||
ON y.b = z.c;
|
||||
SELECT
|
||||
x.a
|
||||
FROM x;
|
||||
|
||||
# title: CTE
|
||||
WITH z AS (
|
||||
SELECT DISTINCT
|
||||
y.b
|
||||
FROM y
|
||||
)
|
||||
SELECT
|
||||
x.a
|
||||
FROM x
|
||||
LEFT JOIN z
|
||||
ON x.b = z.b;
|
||||
WITH z AS (
|
||||
SELECT DISTINCT
|
||||
y.b
|
||||
FROM y
|
||||
)
|
||||
SELECT
|
||||
x.a
|
||||
FROM x;
|
||||
|
||||
# title: Noop - Not all grouped expressions are in outputs
|
||||
SELECT
|
||||
x.a
|
||||
FROM x
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
y.b
|
||||
FROM y
|
||||
GROUP BY
|
||||
y.b,
|
||||
y.c
|
||||
) AS y
|
||||
ON x.b = y.b;
|
||||
SELECT
|
||||
x.a
|
||||
FROM x
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
y.b
|
||||
FROM y
|
||||
GROUP BY
|
||||
y.b,
|
||||
y.c
|
||||
) AS y
|
||||
ON x.b = y.b;
|
||||
|
||||
# title: Cross join on aggregate derived table
|
||||
SELECT
|
||||
x.a
|
||||
FROM x
|
||||
CROSS JOIN (
|
||||
SELECT
|
||||
SUM(y.b) AS b
|
||||
FROM y
|
||||
) AS y;
|
||||
SELECT
|
||||
x.a
|
||||
FROM x;
|
||||
|
||||
# title: Cross join on derived table with LIMIT 1
|
||||
SELECT
|
||||
x.a
|
||||
FROM x
|
||||
CROSS JOIN (
|
||||
SELECT
|
||||
y.b AS b
|
||||
FROM y
|
||||
LIMIT 1
|
||||
) AS y;
|
||||
SELECT
|
||||
x.a
|
||||
FROM x;
|
||||
|
||||
# title: Cross join on derived table with no FROM clause
|
||||
SELECT
|
||||
x.a
|
||||
FROM x
|
||||
CROSS JOIN (
|
||||
SELECT
|
||||
1 AS b,
|
||||
2 AS c
|
||||
) AS y;
|
||||
SELECT
|
||||
x.a
|
||||
FROM x;
|
||||
|
||||
# title: Noop - cross join on non-aggregate subquery
|
||||
SELECT
|
||||
x.a
|
||||
FROM x
|
||||
CROSS JOIN (
|
||||
SELECT
|
||||
y.b
|
||||
FROM y
|
||||
) AS y;
|
||||
SELECT
|
||||
x.a
|
||||
FROM x
|
||||
CROSS JOIN (
|
||||
SELECT
|
||||
y.b
|
||||
FROM y
|
||||
) AS y;
|
Loading…
Add table
Add a link
Reference in a new issue