coordinator-multiplicities.td 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  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. #
  10. # Tests for Move unrolling of peek multiplicities to coordinator. materialize#10673
  11. #
  12. # The important thing here is to test ORDER BY + LIMIT in the presence of
  13. # records where the diff will be > 1
  14. #
  15. > CREATE TABLE t1 (f1 INTEGER);
  16. > INSERT INTO t1 VALUES (1), (1), (1);
  17. > INSERT INTO t1 VALUES (2), (2);
  18. > INSERT INTO t1 VALUES (NULL), (NULL);
  19. #
  20. # ORDER BY + LIMIT
  21. #
  22. > SELECT * FROM t1 ORDER BY f1 LIMIT 0;
  23. > SELECT * FROM t1 ORDER BY f1 LIMIT 1;
  24. 1
  25. > SELECT * FROM t1 ORDER BY f1 LIMIT 2;
  26. 1
  27. 1
  28. > SELECT * FROM t1 ORDER BY f1 LIMIT 3;
  29. 1
  30. 1
  31. 1
  32. > SELECT * FROM t1 ORDER BY f1 LIMIT 4;
  33. 1
  34. 1
  35. 1
  36. 2
  37. > SELECT * FROM t1 ORDER BY f1 LIMIT 5;
  38. 1
  39. 1
  40. 1
  41. 2
  42. 2
  43. > SELECT * FROM t1 ORDER BY f1 LIMIT 6;
  44. 1
  45. 1
  46. 1
  47. 2
  48. 2
  49. <null>
  50. > SELECT * FROM t1 ORDER BY f1 LIMIT 65535;
  51. 1
  52. 1
  53. 1
  54. 2
  55. 2
  56. <null>
  57. <null>
  58. #
  59. # ORDER BY + LIMIT + OFFSET
  60. #
  61. > SELECT * FROM t1 ORDER BY f1 LIMIT 0 OFFSET 0;
  62. > SELECT * FROM t1 ORDER BY f1 LIMIT 0 OFFSET 1;
  63. > SELECT * FROM t1 ORDER BY f1 LIMIT 1 OFFSET 1;
  64. 1
  65. > SELECT * FROM t1 ORDER BY f1 LIMIT 1 OFFSET 2;
  66. 1
  67. > SELECT * FROM t1 ORDER BY f1 LIMIT 3 OFFSET 2;
  68. 1
  69. 2
  70. 2
  71. > SELECT * FROM t1 ORDER BY f1 LIMIT 4 OFFSET 2;
  72. 1
  73. 2
  74. 2
  75. <null>
  76. > SELECT * FROM t1 ORDER BY f1 LIMIT 3 OFFSET 3;
  77. 2
  78. 2
  79. <null>
  80. #
  81. # OFFSET alone
  82. #
  83. > SELECT * FROM t1 OFFSET 0;
  84. <null>
  85. <null>
  86. 1
  87. 1
  88. 1
  89. 2
  90. 2
  91. > SELECT * FROM t1 ORDER BY 1 OFFSET 4;
  92. 2
  93. <null>
  94. <null>
  95. > SELECT * FROM t1 OFFSET 999999;
  96. #
  97. # And some larger offsets
  98. #
  99. > CREATE TABLE ten (f1 INTEGER);
  100. > INSERT INTO ten VALUES (0),(1), (2),(3),(4),(5),(6),(7),(8),(9);
  101. > CREATE VIEW v1 AS SELECT (a2.f1 * 10) + (a3.f1 * 100) + (a4.f1 * 1000) + (a5.f1 * 10000) + (a6.f1 * 100000) AS f1 FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4, ten AS a5, ten AS a6;
  102. > SELECT * FROM v1 ORDER BY f1 OFFSET 999980;
  103. 999980
  104. 999980
  105. 999980
  106. 999980
  107. 999980
  108. 999980
  109. 999980
  110. 999980
  111. 999980
  112. 999980
  113. 999990
  114. 999990
  115. 999990
  116. 999990
  117. 999990
  118. 999990
  119. 999990
  120. 999990
  121. 999990
  122. 999990
  123. > SELECT * FROM v1 ORDER BY f1 LIMIT 3 OFFSET 999990;
  124. 999990
  125. 999990
  126. 999990
  127. > CREATE VIEW v2 AS SELECT a1.f1 + (a2.f1 * 10) + (a3.f1 * 100) + (a4.f1 * 1000) + (a5.f1 * 10000) + (a6.f1 * 100000) < 999999 AS f1 FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4, ten AS a5, ten AS a6;
  128. > SELECT * FROM v2 ORDER BY f1 DESC LIMIT 33 OFFSET 999990;
  129. true
  130. true
  131. true
  132. true
  133. true
  134. true
  135. true
  136. true
  137. true
  138. false