in5.test 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. # 2012 September 18
  2. #
  3. # The author disclaims copyright to this source code. In place of
  4. # a legal notice, here is a blessing:
  5. #
  6. # May you do good and not evil.
  7. # May you find forgiveness for yourself and forgive others.
  8. # May you share freely, never taking more than you give.
  9. #
  10. #***********************************************************************
  11. #
  12. set testdir [file dirname $argv0]
  13. source $testdir/tester.tcl
  14. do_test in5-1.1 {
  15. execsql {
  16. CREATE TABLE t1x(x INTEGER PRIMARY KEY);
  17. INSERT INTO t1x VALUES(1),(3),(5),(7),(9);
  18. CREATE TABLE t1y(y INTEGER UNIQUE);
  19. INSERT INTO t1y VALUES(2),(4),(6),(8);
  20. CREATE TABLE t1z(z TEXT UNIQUE);
  21. INSERT INTO t1z VALUES('a'),('c'),('e'),('g');
  22. CREATE TABLE t2(a INTEGER, b INTEGER, c TEXT, d TEXT);
  23. INSERT INTO t2 VALUES(1,2,'a','12a'),(1,2,'b','12b'),
  24. (2,3,'g','23g'),(3,5,'c','35c'),
  25. (4,6,'h','46h'),(5,6,'e','56e');
  26. CREATE TABLE t3x AS SELECT x FROM t1x;
  27. CREATE TABLE t3y AS SELECT y FROM t1y;
  28. CREATE TABLE t3z AS SELECT z FROM t1z;
  29. SELECT d FROM t2 WHERE a IN t1x AND b IN t1y AND c IN t1z ORDER BY c;
  30. }
  31. } {12a 56e}
  32. do_test in5-1.2 {
  33. execsql {
  34. SELECT d FROM t2 WHERE a IN t1y AND b IN t1x AND c IN t1z ORDER BY d;
  35. }
  36. } {23g}
  37. do_test in5-1.3 {
  38. execsql {
  39. SELECT d FROM t2 WHERE a IN t3x AND b IN t3y AND c IN t3z ORDER BY d;
  40. }
  41. } {12a 56e}
  42. do_test in5-2.1 {
  43. execsql {
  44. CREATE INDEX t2abc ON t2(a,b,c);
  45. SELECT d FROM t2 WHERE a IN t1x AND b IN t1y AND c IN t1z ORDER BY d;
  46. }
  47. } {12a 56e}
  48. do_test in5-2.2 {
  49. execsql {
  50. SELECT d FROM t2 WHERE a IN t1y AND b IN t1x AND c IN t1z ORDER BY d;
  51. }
  52. } {23g}
  53. do_test in5-2.3 {
  54. regexp {OpenEphemeral} [db eval {
  55. EXPLAIN SELECT d FROM t2 WHERE a IN t1x AND b IN t1y AND c IN t1z
  56. }]
  57. } {0}
  58. do_test in5-2.4 {
  59. execsql {
  60. SELECT d FROM t2 WHERE a IN t3x AND b IN t3y AND c IN t3z ORDER BY d;
  61. }
  62. } {12a 56e}
  63. do_test in5-2.5.1 {
  64. regexp {OpenEphemeral} [db eval {
  65. EXPLAIN SELECT d FROM t2 WHERE a IN t3x AND b IN t1y AND c IN t1z
  66. }]
  67. } {1}
  68. do_test in5-2.5.2 {
  69. regexp {OpenEphemeral} [db eval {
  70. EXPLAIN SELECT d FROM t2 WHERE a IN t1x AND b IN t3y AND c IN t1z
  71. }]
  72. } {1}
  73. do_test in5-2.5.3 {
  74. regexp {OpenEphemeral} [db eval {
  75. EXPLAIN SELECT d FROM t2 WHERE a IN t1x AND b IN t1y AND c IN t3z
  76. }]
  77. } {1}
  78. do_test in5-3.1 {
  79. execsql {
  80. DROP INDEX t2abc;
  81. CREATE INDEX t2ab ON t2(a,b);
  82. SELECT d FROM t2 WHERE a IN t1x AND b IN t1y AND c IN t1z ORDER BY d;
  83. }
  84. } {12a 56e}
  85. do_test in5-3.2 {
  86. execsql {
  87. SELECT d FROM t2 WHERE a IN t1y AND b IN t1x AND c IN t1z ORDER BY d;
  88. }
  89. } {23g}
  90. do_test in5-3.3 {
  91. regexp {OpenEphemeral} [db eval {
  92. EXPLAIN SELECT d FROM t2 WHERE a IN t1x AND b IN t1y AND c IN t1z
  93. }]
  94. } {0}
  95. do_test in5-4.1 {
  96. execsql {
  97. DROP INDEX t2ab;
  98. CREATE INDEX t2abcd ON t2(a,b,c,d);
  99. SELECT d FROM t2 WHERE a IN t1x AND b IN t1y AND c IN t1z ORDER BY d;
  100. }
  101. } {12a 56e}
  102. do_test in5-4.2 {
  103. execsql {
  104. SELECT d FROM t2 WHERE a IN t1y AND b IN t1x AND c IN t1z ORDER BY d;
  105. }
  106. } {23g}
  107. do_test in5-4.3 {
  108. regexp {OpenEphemeral} [db eval {
  109. EXPLAIN SELECT d FROM t2 WHERE a IN t1x AND b IN t1y AND c IN t1z
  110. }]
  111. } {0}
  112. do_test in5-5.1 {
  113. execsql {
  114. DROP INDEX t2abcd;
  115. CREATE INDEX t2cbad ON t2(c,b,a,d);
  116. SELECT d FROM t2 WHERE a IN t1x AND b IN t1y AND c IN t1z ORDER BY d;
  117. }
  118. } {12a 56e}
  119. do_test in5-5.2 {
  120. execsql {
  121. SELECT d FROM t2 WHERE a IN t1y AND b IN t1x AND c IN t1z ORDER BY d;
  122. }
  123. } {23g}
  124. do_test in5-5.3 {
  125. regexp {OpenEphemeral} [db eval {
  126. EXPLAIN SELECT d FROM t2 WHERE a IN t1x AND b IN t1y AND c IN t1z
  127. }]
  128. } {0}
  129. finish_test