123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317 |
- # Copyright Materialize, Inc. and contributors. All rights reserved.
- #
- # Use of this software is governed by the Business Source License
- # included in the LICENSE file at the root of this repository.
- #
- # As of the Change Date specified in that file, in accordance with
- # the Business Source License, use of this software will be governed
- # by the Apache License, Version 2.0.
- # Regression test for database-issues#8261 and database-issues#8463.
- # The setup is based on https://github.com/MaterializeInc/RQG/blob/main/conf/mz/simple.sql
- statement ok
- DROP TABLE IF EXISTS t1 CASCADE;
- statement ok
- DROP TABLE IF EXISTS t2 CASCADE;
- statement ok
- DROP TABLE IF EXISTS t3 CASCADE;
- statement ok
- CREATE TABLE t1 (f1 DOUBLE PRECISION, f2 DOUBLE PRECISION NOT NULL);
- statement ok
- CREATE INDEX t1i1 ON t1(f1);
- statement ok
- CREATE INDEX t1i2 ON t1(f2, f1);
- # one NULL row in t1
- statement ok
- INSERT INTO t1 VALUES (NULL, 0);
- # values 1 and 2 have 2 rows each in t1
- statement ok
- INSERT INTO t1 VALUES (1, 1);
- statement ok
- INSERT INTO t1 VALUES (1, 1);
- statement ok
- INSERT INTO t1 VALUES (2, 2);
- statement ok
- INSERT INTO t1 VALUES (2, 2);
- statement ok
- INSERT INTO t1 VALUES (3, 3);
- statement ok
- INSERT INTO t1 VALUES (4, 4);
- statement ok
- INSERT INTO t1 VALUES (5, 5);
- statement ok
- INSERT INTO t1 VALUES (6, 6);
- statement ok
- INSERT INTO t1 VALUES (7, 7);
- statement ok
- INSERT INTO t1 VALUES (8, 8);
- # value 9 not present in either table
- statement ok
- CREATE TABLE t2 (f1 DOUBLE PRECISION, f2 DOUBLE PRECISION NOT NULL);
- statement ok
- CREATE INDEX t2i1 ON t2(f1);
- statement ok
- CREATE INDEX i2i2 ON t2(f2, f1);
- # two NULL rows in t2
- statement ok
- INSERT INTO t2 VALUES (NULL, 0);
- statement ok
- INSERT INTO t2 VALUES (NULL, 0);
- statement ok
- INSERT INTO t2 VALUES (1, 1);
- # value 2 has 2 rows in t2
- statement ok
- INSERT INTO t2 VALUES (2, 2);
- statement ok
- INSERT INTO t2 VALUES (2, 2);
- # value 3 has no rows in t2
- statement ok
- INSERT INTO t2 VALUES (4, 4);
- statement ok
- INSERT INTO t2 VALUES (5, 5);
- statement ok
- INSERT INTO t2 VALUES (6, 6);
- statement ok
- INSERT INTO t2 VALUES (7, 7);
- statement ok
- INSERT INTO t2 VALUES (8, 8);
- # value 9 not present in either table
- statement ok
- CREATE TABLE t3 (f1 DOUBLE PRECISION, f2 DOUBLE PRECISION NOT NULL);
- statement ok
- CREATE MATERIALIZED VIEW pk1 AS SELECT DISTINCT ON (f1) f1 , f2 FROM t1 WHERE f1 IS NOT NULL AND f2 IS NOT NULL;
- statement ok
- CREATE MATERIALIZED VIEW pk2 AS SELECT DISTINCT ON (f1) f1 , f2 FROM t2 WHERE f1 IS NOT NULL AND f2 IS NOT NULL;
- statement ok
- CREATE MATERIALIZED VIEW pk3 AS SELECT DISTINCT ON (f1) f1 , f2 FROM t3 WHERE f1 IS NOT NULL AND f2 IS NOT NULL;
- # database-issues#8261
- query RRRIR
- SELECT (a1.f1) AS c1, (a2.f1) AS c2, (a1.f2) AS c3, (count(a1.f2)) AS agg1, (max(a1.f1 + a1.f1)) AS agg2
- FROM
- pk2 AS a1
- RIGHT JOIN
- (
- SELECT avg(a2.f1) AS f1, count(a1.f1) AS f2
- FROM pk1 AS a1 RIGHT JOIN pk1 AS a2 ON (NULLIF (a2.f2, a1.f1) = a2.f2 + a2.f2 + a2.f1)
- WHERE
- a2.f2 + a2.f1 IS NOT NULL AND a2.f2 NOT IN ( 4, 9, 9 )
- AND
- a1.f2
- NOT IN (
- SELECT agg1 AS x1
- FROM
- (
- SELECT
- (a1.f1) AS c1,
- (a2.f1) AS c2,
- (a1.f2) AS c3,
- (avg(NULLIF (a2.f2, a2.f2))) AS agg1,
- (max(a2.f2)) AS agg2
- FROM
- (
- SELECT a1.f1 AS f1, a1.f2 AS f2
- FROM t2 AS a1 LEFT JOIN t2 AS a2 USING(f1)
- WHERE
- a2.f2 + a2.f2 IS NULL
- OR
- NOT (NULLIF (a2.f1, a2.f1) IN ( 6, 9, 4, 5, 1 ))
- AND
- NOT (a1.f2 + a2.f2 IS NULL)
- AND
- a1.f2 < a2.f1
- ORDER BY 1, 2
- )
- AS a1
- LEFT JOIN t2 AS a2 USING(f2)
- WHERE a2.f2 NOT IN ( 6, 0, 0 ) AND a2.f2 IS NOT NULL AND a2.f2 IN ( 4, 5 )
- GROUP BY 1, 2, 3
- UNION
- SELECT DISTINCT
- (a2.f2) AS c1,
- (a1.f2) AS c2,
- (NULLIF (a1.f2, a1.f2)) AS c3,
- (avg(a1.f1 + a2.f2)) AS agg1,
- (avg(DISTINCT a1.f1)) AS agg2
- FROM
- (
- SELECT
- count(a1.f2) AS f1,
- min(a2.f1 + NULLIF (a1.f2, a2.f2)) AS f2
- FROM
- pk1 AS a1
- JOIN
- t2 AS a2
- ON
- (
- NOT
- (
- NULLIF (a1.f2, a1.f2)
- NOT IN (
- 4, 9, 3, 5
- )
- )
- )
- WHERE
- a1.f2 IS NULL
- OR
- NULLIF (a1.f2, a2.f2) = a2.f2
- AND
- a1.f1 + a1.f2 IN ( 7, 0, 4, 6 )
- ORDER BY 1, 2
- )
- AS a1
- JOIN t2 AS a2 USING(f1)
- WHERE
- a1.f2 IS NULL
- OR
- NULLIF (a2.f2, a1.f1) IS NOT NULL
- AND
- NOT (NOT (NOT (a1.f2 + NULLIF (a1.f2, a2.f2) IN ( 7, 8 ))))
- AND
- NULLIF (a2.f2, a2.f2) < a1.f1 + NULLIF (a1.f1, a1.f2)
- AND
- NOT (a1.f2 > NULLIF (a2.f2, a1.f1))
- GROUP BY 1, 2, 3
- )
- AS dt
- ORDER BY 1
- )
- ORDER BY 1, 2
- LIMIT 1
- )
- AS a2
- ON (NULLIF (a2.f2, a1.f2) = a1.f2)
- WHERE
- a1.f1
- NOT IN (
- SELECT c1 AS x1
- FROM
- (
- SELECT
- (NULLIF (a1.f2, a2.f2)) AS c1,
- (NULLIF (a2.f1, a2.f1)) AS c2,
- (a2.f1) AS c3,
- (min(a2.f2)) AS agg1,
- (min(a2.f2 + a1.f1)) AS agg2
- FROM t1 AS a1 LEFT JOIN (SELECT * FROM (VALUES (1, 2)) AS pk1 (f1, f2)) AS a2 USING(f1, f2)
- WHERE a2.f2 < a1.f2 OR a1.f2 + a2.f2 > a1.f2 + a2.f2
- GROUP BY 1, 2, 3
- EXCEPT ALL
- SELECT
- (a1.f2) AS c1,
- (a1.f2 + a1.f2) AS c2,
- (a2.f2 + a2.f1) AS c3,
- (max(a1.f1 + a2.f1)) AS agg1,
- (max(a2.f2 + a2.f2)) AS agg2
- FROM
- pk1 AS a1
- JOIN
- (
- SELECT a1.f2 AS f1, NULLIF (a2.f2, a2.f2) AS f2
- FROM pk1 AS a1 RIGHT JOIN t1 AS a2 ON (NULLIF (a2.f1, a2.f2) IS NULL)
- WHERE
- a1.f1 IS NOT NULL AND NULLIF (a2.f1, a2.f1) NOT IN ( 9, 6, 4 )
- AND
- NULLIF (a2.f1, a2.f2) NOT IN ( 9, 1 )
- ORDER BY 1, 2
- LIMIT 1
- OFFSET 4
- )
- AS a2
- ON (a2.f2 + a2.f2 + a1.f2 < a2.f2)
- WHERE a2.f2 + a1.f1 + a1.f2 > a1.f2 + a1.f2 + a1.f1 OR a2.f1 = a2.f2
- GROUP BY 1, 2, 3
- )
- AS dt
- ORDER BY 1
- )
- AND
- a2.f2 NOT IN ( 1, 2, 6, 7 )
- OR
- NOT (NOT (a2.f2 + a1.f1 = a1.f2))
- GROUP BY 1, 2, 3;
- ----
- NULL
- 4.571
- NULL
- 0
- NULL
- # database-issues#8463
- query RR
- SELECT
- a1.f1 AS c3,
- a1.f2
- FROM
- (SELECT 1 AS f1, 2 AS f2) AS a1
- RIGHT JOIN (
- SELECT avg(a2.f2) AS f1, min(a1.f2) AS f2
- FROM pk2 AS a1
- LEFT JOIN pk2 AS a2 USING(f1)
- WHERE a2.f1 IS NULL
- ) AS a2
- ON (NULLIF (a1.f2, a2.f2) = a1.f1 + a2.f2);
- ----
- NULL
- NULL
- # database-issues#9156
- simple conn=mz_system,user=mz_system
- ALTER SYSTEM SET enable_eager_delta_joins TO true;
- ----
- COMPLETE 0
- query
- SELECT
- FROM
- (
- SELECT a2.f2 AS f1, a2.f1 AS f2
- FROM t2 AS a1 JOIN pk1 AS a2 USING(f1, f2)
- WHERE a2.f1 = (NULLIF (a1.f2, a2.f2)) AND (a1.f1 + a2.f2) = a2.f2
- ) AS a1
- JOIN (SELECT a2.f2 AS f1, avg(a2.f2) AS f2 FROM t1 AS a2 GROUP BY 1) AS a2 USING(f1, f2);
- ----
|