OLD | NEW |
1 # 2012 August 24 | 1 # 2012 August 24 |
2 # | 2 # |
3 # The author disclaims copyright to this source code. In place of | 3 # The author disclaims copyright to this source code. In place of |
4 # a legal notice, here is a blessing: | 4 # a legal notice, here is a blessing: |
5 # | 5 # |
6 # May you do good and not evil. | 6 # May you do good and not evil. |
7 # May you find forgiveness for yourself and forgive others. | 7 # May you find forgiveness for yourself and forgive others. |
8 # May you share freely, never taking more than you give. | 8 # May you share freely, never taking more than you give. |
9 # | 9 # |
10 #*********************************************************************** | 10 #*********************************************************************** |
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
149 OR (a=1 AND b=(SELECT y FROM t4 WHERE x='a')) | 149 OR (a=1 AND b=(SELECT y FROM t4 WHERE x='a')) |
150 } {2 two 1 one search 6} | 150 } {2 two 1 one search 6} |
151 do_searchcount_test 3.4.4 { | 151 do_searchcount_test 3.4.4 { |
152 SELECT a, b FROM t3 WHERE | 152 SELECT a, b FROM t3 WHERE |
153 (a=2 AND b=(SELECT y FROM t4 WHERE x='b')) | 153 (a=2 AND b=(SELECT y FROM t4 WHERE x='b')) |
154 OR (a=1 AND b=(SELECT y FROM t4 WHERE x='a')) | 154 OR (a=1 AND b=(SELECT y FROM t4 WHERE x='a')) |
155 } {2 two 1 one search 8} | 155 } {2 two 1 one search 8} |
156 | 156 |
157 do_searchcount_test 3.5.1 { | 157 do_searchcount_test 3.5.1 { |
158 SELECT a, b FROM t3 WHERE (a=1 AND b='one') OR rowid=4 | 158 SELECT a, b FROM t3 WHERE (a=1 AND b='one') OR rowid=4 |
159 } {1 one 2 two search 3} | 159 } {1 one 2 two search 2} |
160 do_searchcount_test 3.5.2 { | 160 do_searchcount_test 3.5.2 { |
161 SELECT a, c FROM t3 WHERE (a=1 AND b='one') OR rowid=4 | 161 SELECT a, c FROM t3 WHERE (a=1 AND b='one') OR rowid=4 |
162 } {1 i 2 ii search 3} | 162 } {1 i 2 ii search 3} |
163 | 163 |
164 # Ticket [d02e1406a58ea02d] (2012-10-04) | 164 # Ticket [d02e1406a58ea02d] (2012-10-04) |
165 # LEFT JOIN with an OR in the ON clause causes segfault | 165 # LEFT JOIN with an OR in the ON clause causes segfault |
166 # | 166 # |
167 do_test 4.1 { | 167 do_test 4.1 { |
168 db eval { | 168 db eval { |
169 CREATE TABLE t41(a,b,c); | 169 CREATE TABLE t41(a,b,c); |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
264 DELETE FROM t; | 264 DELETE FROM t; |
265 INSERT INTO t(c0,c15) VALUES(1,1); | 265 INSERT INTO t(c0,c15) VALUES(1,1); |
266 SELECT * FROM t WHERE | 266 SELECT * FROM t WHERE |
267 c0=1 or c1=1 or c2=1 or c3=1 or | 267 c0=1 or c1=1 or c2=1 or c3=1 or |
268 c4=1 or c5=1 or c6=1 or c7=1 or | 268 c4=1 or c5=1 or c6=1 or c7=1 or |
269 c8=1 or c9=1 or c10=1 or c11=1 or | 269 c8=1 or c9=1 or c10=1 or c11=1 or |
270 c12=1 or c13=1 or c14=1 or c15=1 or | 270 c12=1 or c13=1 or c14=1 or c15=1 or |
271 c16=1 or c17=1; | 271 c16=1 or c17=1; |
272 } {1 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 1 {} {}} | 272 } {1 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 1 {} {}} |
273 | 273 |
| 274 #------------------------------------------------------------------------- |
| 275 do_execsql_test 6.1 { |
| 276 CREATE TABLE x1(a, b, c, d, e); |
| 277 CREATE INDEX x1a ON x1(a); |
| 278 CREATE INDEX x1bc ON x1(b, c); |
| 279 CREATE INDEX x1cd ON x1(c, d); |
| 280 |
| 281 INSERT INTO x1 VALUES(1, 2, 3, 4, 'A'); |
| 282 INSERT INTO x1 VALUES(5, 6, 7, 8, 'B'); |
| 283 INSERT INTO x1 VALUES(9, 10, 11, 12, 'C'); |
| 284 INSERT INTO x1 VALUES(13, 14, 15, 16, 'D'); |
| 285 } |
| 286 |
| 287 do_searchcount_test 6.2.1 { |
| 288 SELECT e FROM x1 WHERE b=2 OR c=7; |
| 289 } {A B search 6} |
| 290 do_searchcount_test 6.2.2 { |
| 291 SELECT c FROM x1 WHERE b=2 OR c=7; |
| 292 } {3 7 search 4} |
| 293 |
| 294 do_searchcount_test 6.3.1 { |
| 295 SELECT e FROM x1 WHERE a=1 OR b=10; |
| 296 } {A C search 6} |
| 297 do_searchcount_test 6.3.2 { |
| 298 SELECT c FROM x1 WHERE a=1 OR b=10; |
| 299 } {3 11 search 5} |
| 300 do_searchcount_test 6.3.3 { |
| 301 SELECT rowid FROM x1 WHERE a=1 OR b=10; |
| 302 } {1 3 search 4} |
| 303 |
| 304 do_searchcount_test 6.4.1 { |
| 305 SELECT a FROM x1 WHERE b BETWEEN 1 AND 4 OR c BETWEEN 8 AND 12 |
| 306 } {1 9 search 6} |
| 307 do_searchcount_test 6.4.2 { |
| 308 SELECT b, c FROM x1 WHERE b BETWEEN 1 AND 4 OR c BETWEEN 8 AND 12 |
| 309 } {2 3 10 11 search 5} |
| 310 do_searchcount_test 6.4.3 { |
| 311 SELECT rowid, c FROM x1 WHERE b BETWEEN 1 AND 4 OR c BETWEEN 8 AND 12 |
| 312 } {1 3 3 11 search 4} |
| 313 |
| 314 do_searchcount_test 6.5.1 { |
| 315 SELECT a FROM x1 WHERE rowid = 2 OR c=11 |
| 316 } {5 9 search 3} |
| 317 do_searchcount_test 6.5.2 { |
| 318 SELECT d FROM x1 WHERE rowid = 2 OR c=11 |
| 319 } {8 12 search 2} |
| 320 do_searchcount_test 6.5.3 { |
| 321 SELECT d FROM x1 WHERE c=11 OR rowid = 2 |
| 322 } {12 8 search 2} |
| 323 do_searchcount_test 6.5.4 { |
| 324 SELECT a FROM x1 WHERE c=11 OR rowid = 2 |
| 325 } {9 5 search 3} |
| 326 |
| 327 do_searchcount_test 6.6.1 { |
| 328 SELECT rowid FROM x1 WHERE a=1 OR b=6 OR c=11 |
| 329 } {1 2 3 search 6} |
| 330 do_searchcount_test 6.6.2 { |
| 331 SELECT c FROM x1 WHERE a=1 OR b=6 OR c=11 |
| 332 } {3 7 11 search 7} |
| 333 do_searchcount_test 6.6.3 { |
| 334 SELECT c FROM x1 WHERE c=11 OR a=1 OR b=6 |
| 335 } {11 3 7 search 7} |
| 336 do_searchcount_test 6.6.4 { |
| 337 SELECT c FROM x1 WHERE b=6 OR c=11 OR a=1 |
| 338 } {7 11 3 search 7} |
| 339 |
| 340 #------------------------------------------------------------------------- |
| 341 # |
| 342 do_execsql_test 7.0 { |
| 343 CREATE TABLE y1(a, b); |
| 344 CREATE TABLE y2(x, y); |
| 345 CREATE INDEX y2xy ON y2(x, y); |
| 346 INSERT INTO y1 VALUES(1, 1); |
| 347 INSERT INTO y2 VALUES(3, 3); |
| 348 } |
| 349 |
| 350 do_execsql_test 7.1 { |
| 351 SELECT * FROM y1 LEFT JOIN y2 ON ((x=1 AND y=b) OR (x=2 AND y=b)) |
| 352 } {1 1 {} {}} |
| 353 |
| 354 do_execsql_test 7.3 { |
| 355 CREATE TABLE foo (Id INTEGER PRIMARY KEY, fa INTEGER, fb INTEGER); |
| 356 CREATE TABLE bar (Id INTEGER PRIMARY KEY, ba INTEGER, bb INTEGER); |
| 357 |
| 358 INSERT INTO foo VALUES(1, 1, 1); |
| 359 INSERT INTO foo VALUES(2, 1, 2); |
| 360 INSERT INTO foo VALUES(3, 1, 3); |
| 361 INSERT INTO foo VALUES(4, 1, 4); |
| 362 INSERT INTO foo VALUES(5, 1, 5); |
| 363 INSERT INTO foo VALUES(6, 1, 6); |
| 364 INSERT INTO foo VALUES(7, 1, 7); |
| 365 INSERT INTO foo VALUES(8, 1, 8); |
| 366 INSERT INTO foo VALUES(9, 1, 9); |
| 367 |
| 368 INSERT INTO bar VALUES(NULL, 1, 1); |
| 369 INSERT INTO bar VALUES(NULL, 2, 2); |
| 370 INSERT INTO bar VALUES(NULL, 3, 3); |
| 371 INSERT INTO bar VALUES(NULL, 1, 4); |
| 372 INSERT INTO bar VALUES(NULL, 2, 5); |
| 373 INSERT INTO bar VALUES(NULL, 3, 6); |
| 374 INSERT INTO bar VALUES(NULL, 1, 7); |
| 375 INSERT INTO bar VALUES(NULL, 2, 8); |
| 376 INSERT INTO bar VALUES(NULL, 3, 9); |
| 377 } |
| 378 |
| 379 do_execsql_test 7.4 { |
| 380 SELECT |
| 381 bar.Id, bar.ba, bar.bb, foo.fb |
| 382 FROM foo LEFT JOIN bar |
| 383 ON (bar.ba = 1 AND bar.bb = foo.fb) |
| 384 OR (bar.ba = 5 AND bar.bb = foo.fb); |
| 385 } { |
| 386 1 1 1 1 |
| 387 {} {} {} 2 |
| 388 {} {} {} 3 |
| 389 4 1 4 4 |
| 390 {} {} {} 5 |
| 391 {} {} {} 6 |
| 392 7 1 7 7 |
| 393 {} {} {} 8 |
| 394 {} {} {} 9 |
| 395 } |
| 396 |
| 397 do_execsql_test 7.5 { |
| 398 CREATE INDEX idx_bar ON bar(ba, bb); |
| 399 SELECT |
| 400 bar.Id, bar.ba, bar.bb, foo.fb |
| 401 FROM foo LEFT JOIN bar |
| 402 ON (bar.ba = 1 AND bar.bb = foo.fb) |
| 403 OR (bar.ba = 5 AND bar.bb = foo.fb); |
| 404 } { |
| 405 1 1 1 1 |
| 406 {} {} {} 2 |
| 407 {} {} {} 3 |
| 408 4 1 4 4 |
| 409 {} {} {} 5 |
| 410 {} {} {} 6 |
| 411 7 1 7 7 |
| 412 {} {} {} 8 |
| 413 {} {} {} 9 |
| 414 } |
| 415 |
274 | 416 |
275 finish_test | 417 finish_test |
OLD | NEW |