OLD | NEW |
(Empty) | |
| 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 |
| 16 set testdir [file dirname $argv0] |
| 17 source $testdir/tester.tcl |
| 18 |
| 19 ifcapable !compound { |
| 20 finish_test |
| 21 return |
| 22 } |
| 23 |
| 24 do_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 |
| 34 foreach 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 } |
| 43 foreach 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 } |
| 52 foreach 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 } |
| 61 foreach 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 } |
| 70 foreach 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 |
| 80 foreach 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 } |
| 89 foreach 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 } |
| 98 foreach 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 } |
| 107 foreach 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 |
| 117 foreach 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 } |
| 127 foreach 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 } |
| 137 foreach 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 } |
| 147 foreach 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 |
| 158 foreach 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 } |
| 168 foreach 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 } |
| 178 foreach 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 } |
| 188 foreach 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 } |
| 198 foreach 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 } |
| 208 foreach 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 } |
| 218 foreach 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 } |
| 228 foreach 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 } |
| 238 foreach 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 } |
| 248 foreach 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 } |
| 258 foreach 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 } |
| 268 foreach 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 |
| 279 foreach 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 } |
| 290 foreach 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 } |
| 301 foreach 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 |
| 313 foreach 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 |
| 326 finish_test |
OLD | NEW |