subquery2.test 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. # 2011 September 16
  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. # This file implements regression tests for SQLite library. The
  12. # focus of this script is testing correlated subqueries
  13. #
  14. #
  15. set testdir [file dirname $argv0]
  16. source $testdir/tester.tcl
  17. set ::testprefix subquery2
  18. ifcapable !subquery {
  19. finish_test
  20. return
  21. }
  22. do_test subquery2-1.1 {
  23. execsql {
  24. BEGIN;
  25. CREATE TABLE t1(a,b);
  26. INSERT INTO t1 VALUES(1,2);
  27. INSERT INTO t1 VALUES(3,4);
  28. INSERT INTO t1 VALUES(5,6);
  29. INSERT INTO t1 VALUES(7,8);
  30. CREATE TABLE t2(c,d);
  31. INSERT INTO t2 VALUES(1,1);
  32. INSERT INTO t2 VALUES(3,9);
  33. INSERT INTO t2 VALUES(5,25);
  34. INSERT INTO t2 VALUES(7,49);
  35. CREATE TABLE t3(e,f);
  36. INSERT INTO t3 VALUES(1,1);
  37. INSERT INTO t3 VALUES(3,27);
  38. INSERT INTO t3 VALUES(5,125);
  39. INSERT INTO t3 VALUES(7,343);
  40. COMMIT;
  41. }
  42. execsql {
  43. SELECT a FROM t1
  44. WHERE b IN (SELECT x+1 FROM (SELECT DISTINCT f/(a*a) AS x FROM t3));
  45. }
  46. } {1 3 5 7}
  47. do_test subquery2-1.2 {
  48. execsql {
  49. CREATE INDEX t1b ON t1(b);
  50. SELECT a FROM t1
  51. WHERE b IN (SELECT x+1 FROM (SELECT DISTINCT f/(a*a) AS x FROM t3));
  52. }
  53. } {1 3 5 7}
  54. do_test subquery2-1.11 {
  55. execsql {
  56. SELECT a FROM t1
  57. WHERE +b=(SELECT x+1 FROM (SELECT DISTINCT f/(a*a) AS x FROM t3));
  58. }
  59. } {1}
  60. do_test subquery2-1.12 {
  61. execsql {
  62. SELECT a FROM t1
  63. WHERE b=(SELECT x+1 FROM (SELECT DISTINCT f/(a*a) AS x FROM t3));
  64. }
  65. } {1}
  66. do_test subquery2-1.21 {
  67. execsql {
  68. SELECT a FROM t1
  69. WHERE +b=(SELECT x+1 FROM
  70. (SELECT DISTINCT f/d AS x FROM t2 JOIN t3 ON d*a=f))
  71. }
  72. } {1 3 5 7}
  73. do_test subquery2-1.22 {
  74. execsql {
  75. SELECT a FROM t1
  76. WHERE b=(SELECT x+1 FROM
  77. (SELECT DISTINCT f/d AS x FROM t2 JOIN t3 ON d*a=f))
  78. }
  79. } {1 3 5 7}
  80. #-------------------------------------------------------------------------
  81. # Test that ticket d6b36be38a has been fixed.
  82. do_execsql_test 2.1 {
  83. CREATE TABLE t4(a, b);
  84. CREATE TABLE t5(a, b);
  85. INSERT INTO t5 VALUES(3, 5);
  86. INSERT INTO t4 VALUES(1, 1);
  87. INSERT INTO t4 VALUES(2, 3);
  88. INSERT INTO t4 VALUES(3, 6);
  89. INSERT INTO t4 VALUES(4, 10);
  90. INSERT INTO t4 VALUES(5, 15);
  91. }
  92. do_execsql_test 2.2 {
  93. SELECT *
  94. FROM (SELECT * FROM t4 ORDER BY a LIMIT -1 OFFSET 1)
  95. LIMIT (SELECT a FROM t5)
  96. } {2 3 3 6 4 10}
  97. finish_test