github-7318.slt 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. # Copyright Materialize, Inc. and contributors. All rights reserved.
  2. #
  3. # Use of this software is governed by the Business Source License
  4. # included in the LICENSE file at the root of this repository.
  5. #
  6. # As of the Change Date specified in that file, in accordance with
  7. # the Business Source License, use of this software will be governed
  8. # by the Apache License, Version 2.0.
  9. # Regression test for https://github.com/MaterializeInc/database-issues/issues/7318
  10. # This query involves a 1-input join. `JoinImplementation` or other join code shouldn't choke on this.
  11. statement ok
  12. CREATE TABLE t1 (f1 DOUBLE PRECISION, f2 DOUBLE PRECISION NOT NULL);
  13. statement ok
  14. CREATE INDEX t1i1 ON t1(f1);
  15. statement ok
  16. CREATE INDEX t1i2 ON t1(f2, f1);
  17. # one NULL row in t1
  18. statement ok
  19. INSERT INTO t1 VALUES (NULL, 0);
  20. # values 1 and 2 have 2 rows each in t1
  21. statement ok
  22. INSERT INTO t1 VALUES (1, 1), (1, 1), (2, 2), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8);
  23. # value 9 not present in either table
  24. statement ok
  25. CREATE TABLE t2 (f1 DOUBLE PRECISION, f2 DOUBLE PRECISION NOT NULL);
  26. statement ok
  27. CREATE INDEX t2i1 ON t2(f1);
  28. statement ok
  29. CREATE INDEX i2i2 ON t2(f2, f1);
  30. # two NULL rows in t2
  31. statement ok
  32. INSERT INTO t2 VALUES (NULL, 0);
  33. statement ok
  34. INSERT INTO t2 VALUES (NULL, 0);
  35. statement ok
  36. INSERT INTO t2 VALUES (1, 1);
  37. # value 2 has 2 rows in t2
  38. statement ok
  39. INSERT INTO t2 VALUES (2, 2);
  40. statement ok
  41. INSERT INTO t2 VALUES (2, 2);
  42. # value 3 has no rows in t2
  43. statement ok
  44. INSERT INTO t2 VALUES (4, 4), (5, 5), (6, 6), (7, 7), (8, 8);
  45. # value 9 not present in either table
  46. statement ok
  47. CREATE TABLE t3 (f1 DOUBLE PRECISION, f2 DOUBLE PRECISION NOT NULL);
  48. statement ok
  49. CREATE INDEX t3i1 ON t2(f1);
  50. statement ok
  51. CREATE INDEX i3i2 ON t2(f2, f1);
  52. statement ok
  53. CREATE MATERIALIZED VIEW pk1 AS SELECT DISTINCT ON (f1) f1 , f2 FROM t1 WHERE f1 IS NOT NULL AND f2 IS NOT NULL;
  54. statement ok
  55. CREATE MATERIALIZED VIEW pk2 AS SELECT DISTINCT ON (f1) f1 , f2 FROM t2 WHERE f1 IS NOT NULL AND f2 IS NOT NULL;
  56. statement ok
  57. CREATE MATERIALIZED VIEW pk3 AS SELECT DISTINCT ON (f1) f1 , f2 FROM t3 WHERE f1 IS NOT NULL AND f2 IS NOT NULL;
  58. query RR
  59. SELECT
  60. left_object.f1 AS f1,
  61. left_object.f1 AS f2
  62. FROM
  63. (
  64. SELECT
  65. DISTINCT f2 AS f1,
  66. f2 AS f2
  67. FROM
  68. t1
  69. ) AS left_object
  70. LEFT JOIN pk1 AS before ON (left_object.f1 = before.f1)
  71. JOIN LATERAL (
  72. SELECT
  73. f2 AS f1,
  74. f1 AS f2
  75. FROM
  76. t2
  77. LIMIT
  78. left_object.f1
  79. ) AS right_object ON (left_object.f2 = right_object.f1) ;
  80. ----