github-7821.slt 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  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 database-issues#7821.
  10. simple conn=mz_system,user=mz_system
  11. ALTER SYSTEM SET enable_variadic_left_join_lowering TO true;
  12. ----
  13. COMPLETE 0
  14. statement ok
  15. CREATE TABLE ft(pk int, k1 int, k2 int, k3 int);
  16. statement ok
  17. CREATE TABLE d1(k1 int, v1 text);
  18. statement ok
  19. CREATE TABLE d2(k2 int, v2 text);
  20. statement ok
  21. CREATE TABLE d3(k3 int, v3 text);
  22. statement ok
  23. INSERT INTO ft VALUES
  24. ( 0 , null , null , null ),
  25. ( 1 , 1 , null , null ),
  26. ( 2 , null , 2 , null ),
  27. ( 3 , null , null , 3 ),
  28. ( 4 , 2 , 3 , null ),
  29. ( 5 , null , 2 , 1 ),
  30. ( 6 , 1 , 2 , 3 );
  31. statement ok
  32. INSERT INTO d1 VALUES
  33. ( 1 , 'd1-0001'),
  34. ( 2 , 'd1-0002'),
  35. ( 3 , 'd1-0003'),
  36. ( null , 'd1-null');
  37. statement ok
  38. INSERT INTO d2 VALUES
  39. ( 1 , 'd2-0001'),
  40. ( 2 , 'd2-0002'),
  41. ( 3 , 'd2-0003'),
  42. ( null , 'd2-null');
  43. statement ok
  44. INSERT INTO d3 VALUES
  45. ( 1 , 'd3-0001'),
  46. ( 2 , 'd3-0002'),
  47. ( 3 , 'd3-0003'),
  48. ( null , 'd3-null');
  49. # Entries where kx IS NULL in ft should not be joined against actual dx rows.
  50. # Star schema with a single key.
  51. query ITTT rowsort
  52. SELECT
  53. ft.pk,
  54. d1.v1,
  55. d2.v2,
  56. d3.v3
  57. FROM
  58. ft
  59. LEFT JOIN d1 ON(ft.k1 = d1.k1)
  60. LEFT JOIN d2 ON(ft.k2 = d2.k2)
  61. LEFT JOIN d3 ON(ft.k3 = d3.k3)
  62. ORDER BY
  63. ft.pk;
  64. ----
  65. 0
  66. NULL
  67. NULL
  68. NULL
  69. 1
  70. d1-0001
  71. NULL
  72. NULL
  73. 2
  74. NULL
  75. d2-0002
  76. NULL
  77. 3
  78. NULL
  79. NULL
  80. d3-0003
  81. 4
  82. d1-0002
  83. d2-0003
  84. NULL
  85. 5
  86. NULL
  87. d2-0002
  88. d3-0001
  89. 6
  90. d1-0001
  91. d2-0002
  92. d3-0003
  93. # Entries where kx IS NULL in ft should not be joined against actual dx rows.
  94. # Chain schema with a single key.
  95. query ITTT rowsort
  96. SELECT
  97. ft.pk,
  98. d1.v1,
  99. d2.v2,
  100. d3.v3
  101. FROM
  102. ft
  103. LEFT JOIN d1 ON(ft.k1 = d1.k1)
  104. LEFT JOIN d2 ON(d1.k1 = d2.k2)
  105. LEFT JOIN d3 ON(d2.k2 = d3.k3)
  106. ORDER BY
  107. ft.pk;
  108. ----
  109. 0
  110. NULL
  111. NULL
  112. NULL
  113. 1
  114. d1-0001
  115. d2-0001
  116. d3-0001
  117. 2
  118. NULL
  119. NULL
  120. NULL
  121. 3
  122. NULL
  123. NULL
  124. NULL
  125. 4
  126. d1-0002
  127. d2-0002
  128. d3-0002
  129. 5
  130. NULL
  131. NULL
  132. NULL
  133. 6
  134. d1-0001
  135. d2-0001
  136. d3-0001