tkt3493.test 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. # 2008 October 13
  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. Specifically,
  12. # it tests that affinities and collation sequences are correctly applied
  13. # in aggregate queries.
  14. #
  15. # $Id: tkt3493.test,v 1.2 2009/06/05 17:09:12 drh Exp $
  16. set testdir [file dirname $argv0]
  17. source $testdir/tester.tcl
  18. do_test tkt3493-1.1 {
  19. execsql {
  20. BEGIN;
  21. CREATE TABLE A (id INTEGER PRIMARY KEY AUTOINCREMENT, val TEXT);
  22. INSERT INTO A VALUES(1,'123');
  23. INSERT INTO A VALUES(2,'456');
  24. CREATE TABLE B (id INTEGER PRIMARY KEY AUTOINCREMENT, val TEXT);
  25. INSERT INTO B VALUES(1,1);
  26. INSERT INTO B VALUES(2,2);
  27. CREATE TABLE A_B (B_id INTEGER NOT NULL, A_id INTEGER);
  28. INSERT INTO A_B VALUES(1,1);
  29. INSERT INTO A_B VALUES(2,2);
  30. COMMIT;
  31. }
  32. } {}
  33. do_test tkt3493-1.2 {
  34. execsql {
  35. SELECT
  36. CASE
  37. WHEN B.val = 1 THEN 'XYZ'
  38. ELSE A.val
  39. END AS Col1
  40. FROM B
  41. LEFT OUTER JOIN A_B ON B.id = A_B.B_id
  42. LEFT OUTER JOIN A ON A.id = A_B.A_id
  43. ORDER BY Col1 ASC;
  44. }
  45. } {456 XYZ}
  46. do_test tkt3493-1.3 {
  47. execsql {
  48. SELECT DISTINCT
  49. CASE
  50. WHEN B.val = 1 THEN 'XYZ'
  51. ELSE A.val
  52. END AS Col1
  53. FROM B
  54. LEFT OUTER JOIN A_B ON B.id = A_B.B_id
  55. LEFT OUTER JOIN A ON A.id = A_B.A_id
  56. ORDER BY Col1 ASC;
  57. }
  58. } {456 XYZ}
  59. do_test tkt3493-1.4 {
  60. execsql {
  61. SELECT b.val, CASE WHEN b.val = 1 THEN 'xyz' ELSE b.val END AS col1 FROM b;
  62. }
  63. } {1 xyz 2 2}
  64. do_test tkt3493-1.5 {
  65. execsql {
  66. SELECT DISTINCT
  67. b.val,
  68. CASE WHEN b.val = 1 THEN 'xyz' ELSE b.val END AS col1
  69. FROM b;
  70. }
  71. } {1 xyz 2 2}
  72. do_test tkt3493-1.6 {
  73. execsql {
  74. SELECT DISTINCT
  75. b.val,
  76. CASE WHEN b.val = '1' THEN 'xyz' ELSE b.val END AS col1
  77. FROM b;
  78. }
  79. } {1 xyz 2 2}
  80. do_test tkt3493-2.1 {
  81. execsql {
  82. CREATE TABLE t1(a TEXT, b INT);
  83. INSERT INTO t1 VALUES(123, 456);
  84. }
  85. } {}
  86. do_test tkt3493-2.2.1 {
  87. execsql { SELECT a=123 FROM t1 GROUP BY a }
  88. } {1}
  89. do_test tkt3493-2.2.2 {
  90. execsql { SELECT a=123 FROM t1 }
  91. } {1}
  92. do_test tkt3493-2.2.3 {
  93. execsql { SELECT a='123' FROM t1 }
  94. } {1}
  95. do_test tkt3493-2.2.4 {
  96. execsql { SELECT count(*), a=123 FROM t1 }
  97. } {1 1}
  98. do_test tkt3493-2.2.5 {
  99. execsql { SELECT count(*), +a=123 FROM t1 }
  100. } {1 0}
  101. do_test tkt3493-2.3.3 {
  102. execsql { SELECT b='456' FROM t1 GROUP BY a }
  103. } {1}
  104. do_test tkt3493-2.3.1 {
  105. execsql { SELECT b='456' FROM t1 GROUP BY b }
  106. } {1}
  107. do_test tkt3493-2.3.2 {
  108. execsql { SELECT b='456' FROM t1 }
  109. } {1}
  110. do_test tkt3493-2.4.1 {
  111. execsql { SELECT typeof(a), a FROM t1 GROUP BY a HAVING a=123 }
  112. } {text 123}
  113. do_test tkt3493-2.4.2 {
  114. execsql { SELECT typeof(a), a FROM t1 GROUP BY b HAVING a=123 }
  115. } {text 123}
  116. do_test tkt3493-2.5.1 {
  117. execsql { SELECT typeof(b), b FROM t1 GROUP BY a HAVING b='456' }
  118. } {integer 456}
  119. do_test tkt3493-2.5.2 {
  120. execsql { SELECT typeof(b), b FROM t1 GROUP BY b HAVING b='456' }
  121. } {integer 456}
  122. do_test tkt3493-3.1 {
  123. execsql {
  124. CREATE TABLE t2(a COLLATE NOCASE, b COLLATE BINARY);
  125. INSERT INTO t2 VALUES('aBc', 'DeF');
  126. }
  127. } {}
  128. do_test tkt3493-3.2.1 {
  129. execsql { SELECT a='abc' FROM t2 GROUP BY a }
  130. } {1}
  131. do_test tkt3493-3.2.2 {
  132. execsql { SELECT a='abc' FROM t2 }
  133. } {1}
  134. do_test tkt3493-3.3.1 {
  135. execsql { SELECT a>b FROM t2 GROUP BY a, b}
  136. } {0}
  137. do_test tkt3493-3.3.2 {
  138. execsql { SELECT a>b COLLATE BINARY FROM t2 GROUP BY a, b}
  139. } {1}
  140. do_test tkt3493-3.3.3 {
  141. execsql { SELECT b>a FROM t2 GROUP BY a, b}
  142. } {0}
  143. do_test tkt3493-3.3.4 {
  144. execsql { SELECT b>a COLLATE NOCASE FROM t2 GROUP BY a, b}
  145. } {1}
  146. finish_test