1# 2010 October 6 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 ticket [38cb5df375078d3f9711482d2a1615d09f6b3f33] has 13# been resolved. 14# 15 16set testdir [file dirname $argv0] 17source $testdir/tester.tcl 18 19ifcapable !compound { 20 finish_test 21 return 22} 23 24do_test tkt-38cb5df375.0 { 25 execsql { 26 CREATE TABLE t1(a); 27 INSERT INTO t1 VALUES(1); 28 INSERT INTO t1 VALUES(2); 29 INSERT INTO t1 SELECT a+2 FROM t1; 30 INSERT INTO t1 SELECT a+4 FROM t1; 31 } 32} {} 33 34foreach ii {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16} { 35 do_test tkt-38cb5df375.1.$ii { 36 execsql { 37 SELECT * FROM (SELECT * FROM t1 ORDER BY a) 38 UNION ALL SELECT 9 FROM (SELECT a FROM t1) 39 LIMIT $::ii; 40 } 41 } [lrange {1 2 3 4 5 6 7 8 9 9 9 9 9 9 9 9} 0 [expr {$ii-1}]] 42} 43foreach ii {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16} { 44 do_test tkt-38cb5df375.2.$ii { 45 execsql { 46 SELECT 9 FROM (SELECT * FROM t1) 47 UNION ALL SELECT a FROM (SELECT a FROM t1 ORDER BY a) 48 LIMIT $::ii; 49 } 50 } [lrange {9 9 9 9 9 9 9 9 1 2 3 4 5 6 7 8} 0 [expr {$ii-1}]] 51} 52foreach ii {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16} { 53 do_test tkt-38cb5df375.3.$ii { 54 execsql { 55 SELECT a FROM (SELECT * FROM t1 ORDER BY a) 56 UNION ALL SELECT a FROM (SELECT a FROM t1 ORDER BY a) 57 LIMIT $::ii; 58 } 59 } [lrange {1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8} 0 [expr {$ii-1}]] 60} 61foreach ii {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16} { 62 do_test tkt-38cb5df375.4.$ii { 63 execsql { 64 SELECT 0 FROM (SELECT * FROM t1) 65 UNION ALL SELECT 9 FROM (SELECT a FROM t1) 66 LIMIT $::ii; 67 } 68 } [lrange {0 0 0 0 0 0 0 0 9 9 9 9 9 9 9 9} 0 [expr {$ii-1}]] 69} 70foreach ii {1 2 3 4} { 71 do_test tkt-38cb5df375.5.$ii { 72 execsql { 73 SELECT 0 FROM (SELECT * FROM t1) 74 UNION SELECT 9 FROM (SELECT a FROM t1) 75 LIMIT $::ii; 76 } 77 } [lrange {0 9} 0 [expr {$ii-1}]] 78} 79 80foreach ii {1 2 3 4 5 6 7 8 9 10 11} { 81 do_test tkt-38cb5df375.11.$ii { 82 execsql { 83 SELECT * FROM (SELECT * FROM t1 ORDER BY a LIMIT 3) 84 UNION ALL SELECT 9 FROM (SELECT a FROM t1) 85 LIMIT $::ii; 86 } 87 } [lrange {1 2 3 9 9 9 9 9 9 9 9} 0 [expr {$ii-1}]] 88} 89foreach ii {1 2 3 4 5 6 7 8 9 10 11} { 90 do_test tkt-38cb5df375.12.$ii { 91 execsql { 92 SELECT 9 FROM (SELECT * FROM t1) 93 UNION ALL SELECT a FROM (SELECT a FROM t1 ORDER BY a LIMIT 3) 94 LIMIT $::ii; 95 } 96 } [lrange {9 9 9 9 9 9 9 9 1 2 3} 0 [expr {$ii-1}]] 97} 98foreach ii {1 2 3 4 5 6} { 99 do_test tkt-38cb5df375.13.$ii { 100 execsql { 101 SELECT a FROM (SELECT * FROM t1 ORDER BY a LIMIT 3) 102 UNION ALL SELECT a FROM (SELECT a FROM t1 ORDER BY a LIMIT 3) 103 LIMIT $::ii; 104 } 105 } [lrange {1 2 3 1 2 3} 0 [expr {$ii-1}]] 106} 107foreach ii {1 2 3 4 5 6} { 108 do_test tkt-38cb5df375.14.$ii { 109 execsql { 110 SELECT 0 FROM (SELECT * FROM t1 LIMIT 3) 111 UNION ALL SELECT 9 FROM (SELECT a FROM t1 LIMIT 3) 112 LIMIT $::ii; 113 } 114 } [lrange {0 0 0 9 9 9} 0 [expr {$ii-1}]] 115} 116 117foreach ii {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16} { 118 do_test tkt-38cb5df375.21.$ii { 119 execsql { 120 SELECT * FROM (SELECT * FROM t1 ORDER BY a) 121 UNION ALL SELECT 9 FROM (SELECT a FROM t1) 122 ORDER BY 1 123 LIMIT $::ii; 124 } 125 } [lrange {1 2 3 4 5 6 7 8 9 9 9 9 9 9 9 9} 0 [expr {$ii-1}]] 126} 127foreach ii {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16} { 128 do_test tkt-38cb5df375.22.$ii { 129 execsql { 130 SELECT 9 FROM (SELECT * FROM t1) 131 UNION ALL SELECT a FROM (SELECT a FROM t1 ORDER BY a) 132 ORDER BY 1 133 LIMIT $::ii; 134 } 135 } [lrange {1 2 3 4 5 6 7 8 9 9 9 9 9 9 9 9} 0 [expr {$ii-1}]] 136} 137foreach ii {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16} { 138 do_test tkt-38cb5df375.23.$ii { 139 execsql { 140 SELECT a FROM (SELECT * FROM t1 ORDER BY a) 141 UNION ALL SELECT a FROM (SELECT a FROM t1 ORDER BY a) 142 ORDER BY 1 DESC 143 LIMIT $::ii; 144 } 145 } [lrange {8 8 7 7 6 6 5 5 4 4 3 3 2 2 1 1} 0 [expr {$ii-1}]] 146} 147foreach ii {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16} { 148 do_test tkt-38cb5df375.24.$ii { 149 execsql { 150 SELECT 0 FROM (SELECT * FROM t1) 151 UNION ALL SELECT 9 FROM (SELECT a FROM t1) 152 ORDER BY 1 153 LIMIT $::ii; 154 } 155 } [lrange {0 0 0 0 0 0 0 0 9 9 9 9 9 9 9 9} 0 [expr {$ii-1}]] 156} 157 158foreach ii {1 2 3 4 5 6 7 8 9 10 11} { 159 do_test tkt-38cb5df375.31.$ii { 160 execsql { 161 SELECT * FROM (SELECT * FROM t1 ORDER BY a LIMIT 3) 162 UNION ALL SELECT 9 FROM (SELECT a FROM t1) 163 ORDER BY 1 164 LIMIT $::ii; 165 } 166 } [lrange {1 2 3 9 9 9 9 9 9 9 9} 0 [expr {$ii-1}]] 167} 168foreach ii {1 2 3 4 5 6 7 8 9 10 11} { 169 do_test tkt-38cb5df375.32.$ii { 170 execsql { 171 SELECT 9 FROM (SELECT * FROM t1) 172 UNION ALL SELECT a FROM (SELECT a FROM t1 ORDER BY a LIMIT 3) 173 ORDER BY 1 174 LIMIT $::ii; 175 } 176 } [lrange {1 2 3 9 9 9 9 9 9 9 9} 0 [expr {$ii-1}]] 177} 178foreach ii {1 2 3 4 5 6 7} { 179 do_test tkt-38cb5df375.33.$ii { 180 execsql { 181 SELECT a FROM (SELECT * FROM t1 ORDER BY a LIMIT 4) 182 UNION ALL SELECT 90+a FROM (SELECT a FROM t1 ORDER BY a LIMIT 3) 183 ORDER BY 1 184 LIMIT $::ii; 185 } 186 } [lrange {1 2 3 4 91 92 93} 0 [expr {$ii-1}]] 187} 188foreach ii {1 2 3 4 5 6 7} { 189 do_test tkt-38cb5df375.34.$ii { 190 execsql { 191 SELECT a FROM (SELECT * FROM t1 ORDER BY a LIMIT 2) 192 UNION ALL SELECT a FROM (SELECT a FROM t1 ORDER BY a LIMIT 5) 193 ORDER BY 1 194 LIMIT $::ii; 195 } 196 } [lrange {1 1 2 2 3 4 5} 0 [expr {$ii-1}]] 197} 198foreach ii {1 2 3 4 5 6 7} { 199 do_test tkt-38cb5df375.35.$ii { 200 execsql { 201 SELECT a FROM (SELECT * FROM t1 ORDER BY a LIMIT 5) 202 UNION ALL SELECT a FROM (SELECT a FROM t1 ORDER BY a LIMIT 2) 203 ORDER BY 1 204 LIMIT $::ii; 205 } 206 } [lrange {1 1 2 2 3 4 5} 0 [expr {$ii-1}]] 207} 208foreach ii {1 2 3 4 5 6 7} { 209 do_test tkt-38cb5df375.35b.$ii { 210 execsql { 211 SELECT a FROM (SELECT * FROM t1 ORDER BY a LIMIT 5) 212 UNION ALL SELECT a+10 FROM (SELECT a FROM t1 ORDER BY a LIMIT 2) 213 ORDER BY 1 214 LIMIT $::ii; 215 } 216 } [lrange {1 2 3 4 5 11 12} 0 [expr {$ii-1}]] 217} 218foreach ii {1 2 3 4 5 6 7} { 219 do_test tkt-38cb5df375.35c.$ii { 220 execsql { 221 SELECT a FROM (SELECT * FROM t1 ORDER BY a LIMIT 5) 222 UNION SELECT a+10 FROM (SELECT a FROM t1 ORDER BY a LIMIT 2) 223 ORDER BY 1 224 LIMIT $::ii; 225 } 226 } [lrange {1 2 3 4 5 11 12} 0 [expr {$ii-1}]] 227} 228foreach ii {1 2 3 4 5 6 7} { 229 do_test tkt-38cb5df375.35d.$ii { 230 execsql { 231 SELECT a FROM (SELECT * FROM t1 ORDER BY a LIMIT 5) 232 INTERSECT SELECT a FROM (SELECT a FROM t1 ORDER BY a LIMIT 2) 233 ORDER BY 1 234 LIMIT $::ii; 235 } 236 } [lrange {1 2} 0 [expr {$ii-1}]] 237} 238foreach ii {1 2 3 4 5 6 7} { 239 do_test tkt-38cb5df375.35e.$ii { 240 execsql { 241 SELECT a FROM (SELECT * FROM t1 ORDER BY a LIMIT 5) 242 EXCEPT SELECT a FROM (SELECT a FROM t1 ORDER BY a LIMIT 2) 243 ORDER BY 1 244 LIMIT $::ii; 245 } 246 } [lrange {3 4 5} 0 [expr {$ii-1}]] 247} 248foreach ii {1 2 3 4 5 6 7} { 249 do_test tkt-38cb5df375.36.$ii { 250 execsql { 251 SELECT 0 FROM (SELECT * FROM t1 LIMIT 3) 252 UNION ALL SELECT 9 FROM (SELECT a FROM t1 LIMIT 4) 253 ORDER BY 1 254 LIMIT $::ii; 255 } 256 } [lrange {0 0 0 9 9 9 9} 0 [expr {$ii-1}]] 257} 258foreach ii {1 2 3 4 5 6 7} { 259 do_test tkt-38cb5df375.37.$ii { 260 execsql { 261 SELECT 0 FROM (SELECT * FROM t1 LIMIT 3) 262 UNION SELECT 9 FROM (SELECT a FROM t1 LIMIT 4) 263 ORDER BY 1 264 LIMIT $::ii; 265 } 266 } [lrange {0 9} 0 [expr {$ii-1}]] 267} 268foreach ii {1 2 3 4 5 6 7} { 269 do_test tkt-38cb5df375.38.$ii { 270 execsql { 271 SELECT 0 FROM (SELECT * FROM t1 LIMIT 3) 272 EXCEPT SELECT 9 FROM (SELECT a FROM t1 LIMIT 4) 273 ORDER BY 1 274 LIMIT $::ii; 275 } 276 } [lrange {0} 0 [expr {$ii-1}]] 277} 278 279foreach ii {1 2 3 4 5 6 7 8 9} { 280 do_test tkt-38cb5df375.41.$ii { 281 execsql { 282 SELECT 0 FROM (SELECT * FROM t1 LIMIT 3) 283 UNION ALL SELECT 9 FROM (SELECT a FROM t1 LIMIT 4) 284 UNION ALL SELECT 88 FROM (SELECT a FROM t1 LIMIT 2) 285 ORDER BY 1 286 LIMIT $::ii; 287 } 288 } [lrange {0 0 0 9 9 9 9 88 88} 0 [expr {$ii-1}]] 289} 290foreach ii {1 2 3 4 5 6 7 8 9} { 291 do_test tkt-38cb5df375.42.$ii { 292 execsql { 293 SELECT a FROM (SELECT * FROM t1 ORDER BY a LIMIT 3) 294 UNION ALL SELECT a+10 FROM (SELECT a FROM t1 ORDER BY a LIMIT 4) 295 UNION ALL SELECT a+20 FROM (SELECT a FROM t1 ORDER BY a LIMIT 2) 296 ORDER BY 1 297 LIMIT $::ii; 298 } 299 } [lrange {1 2 3 11 12 13 14 21 22} 0 [expr {$ii-1}]] 300} 301foreach ii {1 2 3 4 5 6 7 8 9} { 302 do_test tkt-38cb5df375.43.$ii { 303 execsql { 304 SELECT a FROM (SELECT * FROM t1 ORDER BY a LIMIT 3) 305 UNION SELECT a+10 FROM (SELECT a FROM t1 ORDER BY a LIMIT 4) 306 UNION SELECT a+20 FROM (SELECT a FROM t1 ORDER BY a LIMIT 2) 307 ORDER BY 1 308 LIMIT $::ii; 309 } 310 } [lrange {1 2 3 11 12 13 14 21 22} 0 [expr {$ii-1}]] 311} 312 313foreach ii {1 2 3 4 5 6 7} { 314 set jj [expr {7-$ii}] 315 do_test tkt-38cb5df375.51.$ii { 316 execsql { 317 SELECT a FROM (SELECT * FROM t1 ORDER BY a) 318 EXCEPT SELECT a FROM (SELECT a FROM t1 ORDER BY a LIMIT $::ii) 319 ORDER BY a DESC 320 LIMIT $::jj; 321 } 322 } [lrange {8 7 6 5 4 3 2 1} 0 [expr {$jj-1}]] 323} 324 325 326finish_test 327