Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(183)

Side by Side Diff: third_party/sqlite/src/test/where9.test

Issue 6990047: Import SQLite 3.7.6.3. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « third_party/sqlite/src/test/where8.test ('k') | third_party/sqlite/src/test/whereA.test » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # 2008 December 30 1 # 2008 December 30
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 340 matching lines...) Expand 10 before | Expand all | Expand 10 after
351 SELECT t3.x, t1.a, coalesce(t2.a,9999) 351 SELECT t3.x, t1.a, coalesce(t2.a,9999)
352 FROM t3 JOIN 352 FROM t3 JOIN
353 t1 LEFT JOIN t2 ON (t1.c=t2.c AND t1.d=t2.d) OR (t1.f)=t2.f 353 t1 LEFT JOIN t2 ON (t1.c=t2.c AND t1.d=t2.d) OR (t1.f)=t2.f
354 WHERE t1.a=t3.y OR t1.b=t3.y*11 OR (t1.c=27027 AND round(t1.d)==80) 354 WHERE t1.a=t3.y OR t1.b=t3.y*11 OR (t1.c=27027 AND round(t1.d)==80)
355 ORDER BY 1, 2, 3 355 ORDER BY 1, 2, 3
356 } 356 }
357 } {1 80 2 1 80 28 1 80 54 1 80 80 2 80 2 2 80 28 2 80 54 2 80 80 scan 1 sort 1} 357 } {1 80 2 1 80 28 1 80 54 1 80 80 2 80 2 2 80 28 2 80 54 2 80 80 scan 1 sort 1}
358 358
359 359
360 ifcapable explain { 360 ifcapable explain {
361 do_test where9-3.1 { 361 do_execsql_test where9-3.1 {
362 set r [db eval { 362 EXPLAIN QUERY PLAN
363 EXPLAIN QUERY PLAN 363 SELECT t2.a FROM t1, t2
364 SELECT t2.a FROM t1, t2 364 WHERE t1.a=80 AND ((t1.c=t2.c AND t1.d=t2.d) OR t1.f=t2.f)
365 WHERE t1.a=80 365 } {
366 AND ((t1.c=t2.c AND t1.d=t2.d) OR t1.f=t2.f) 366 0 0 0 {SEARCH TABLE t1 USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)}
367 }] 367 0 1 1 {SEARCH TABLE t2 USING INDEX t2d (d=?) (~2 rows)}
368 set a [expr {[lsearch $r {TABLE t2 VIA MULTI-INDEX UNION}]>=0}] 368 0 1 1 {SEARCH TABLE t2 USING COVERING INDEX t2f (f=?) (~10 rows)}
369 set b [expr {[lsearch $r {TABLE t2 WITH INDEX t2f}]>=0}] 369 }
370 set c [expr {([lsearch $r {TABLE t2 WITH INDEX t2c}]>=0)+ 370 do_execsql_test where9-3.2 {
371 [lsearch $r {TABLE t2 WITH INDEX t2d}]>=0}] 371 EXPLAIN QUERY PLAN
372 concat $a $b $c 372 SELECT coalesce(t2.a,9999)
373 } {1 1 1} 373 FROM t1 LEFT JOIN t2 ON (t1.c+1=t2.c AND t1.d=t2.d) OR (t1.f||'x')=t2.f
374 do_test where9-3.2 { 374 WHERE t1.a=80
375 set r [db eval { 375 } {
376 EXPLAIN QUERY PLAN 376 0 0 0 {SEARCH TABLE t1 USING INTEGER PRIMARY KEY (rowid=?) (~1 rows)}
377 SELECT coalesce(t2.a,9999) 377 0 1 1 {SEARCH TABLE t2 USING INDEX t2d (d=?) (~2 rows)}
378 FROM t1 LEFT JOIN t2 ON (t1.c+1=t2.c AND t1.d=t2.d) OR (t1.f||'x')=t2.f 378 0 1 1 {SEARCH TABLE t2 USING COVERING INDEX t2f (f=?) (~10 rows)}
379 WHERE t1.a=80 379 }
380 }]
381 set a [expr {[lsearch $r {TABLE t2 VIA MULTI-INDEX UNION}]>=0}]
382 set b [expr {[lsearch $r {TABLE t2 WITH INDEX t2f}]>=0}]
383 set c [expr {([lsearch $r {TABLE t2 WITH INDEX t2c}]>=0)+
384 [lsearch $r {TABLE t2 WITH INDEX t2d}]>=0}]
385 concat $a $b $c
386 } {1 1 1}
387 } 380 }
388 381
389 # Make sure that INDEXED BY and multi-index OR clauses play well with 382 # Make sure that INDEXED BY and multi-index OR clauses play well with
390 # one another. 383 # one another.
391 # 384 #
392 do_test where9-4.1 { 385 do_test where9-4.1 {
393 count_steps { 386 count_steps {
394 SELECT a FROM t1 387 SELECT a FROM t1
395 WHERE b>1000 388 WHERE b>1000
396 AND (c=31031 OR d IS NULL) 389 AND (c=31031 OR d IS NULL)
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
451 WHERE b>1000 444 WHERE b>1000
452 AND (c=31031 OR d IS NULL) 445 AND (c=31031 OR d IS NULL)
453 ORDER BY +a 446 ORDER BY +a
454 } 447 }
455 } {1 {cannot use index: t1d}} 448 } {1 {cannot use index: t1d}}
456 449
457 ifcapable explain { 450 ifcapable explain {
458 # The (c=31031 OR d IS NULL) clause is preferred over b>1000 because 451 # The (c=31031 OR d IS NULL) clause is preferred over b>1000 because
459 # the former is an equality test which is expected to return fewer rows. 452 # the former is an equality test which is expected to return fewer rows.
460 # 453 #
461 do_test where9-5.1 { 454 do_execsql_test where9-5.1 {
462 set r [db eval { 455 EXPLAIN QUERY PLAN SELECT a FROM t1 WHERE b>1000 AND (c=31031 OR d IS NULL)
463 EXPLAIN QUERY PLAN 456 } {
464 SELECT a FROM t1 457 0 0 0 {SEARCH TABLE t1 USING INDEX t1c (c=?) (~10 rows)}
465 WHERE b>1000 458 0 0 0 {SEARCH TABLE t1 USING INDEX t1d (d=?) (~10 rows)}
466 AND (c=31031 OR d IS NULL) 459 }
467 }]
468 set a [expr {[lsearch $r {TABLE t1 VIA MULTI-INDEX UNION}]>=0}]
469 set b [expr {[lsearch $r {TABLE t1 WITH INDEX t1b}]>=0}]
470 concat $a $b
471 } {1 0}
472 460
473 # In contrast, b=1000 is preferred over any OR-clause. 461 # In contrast, b=1000 is preferred over any OR-clause.
474 # 462 #
475 do_test where9-5.2 { 463 do_execsql_test where9-5.2 {
476 set r [db eval { 464 EXPLAIN QUERY PLAN SELECT a FROM t1 WHERE b=1000 AND (c=31031 OR d IS NULL)
477 EXPLAIN QUERY PLAN 465 } {
478 SELECT a FROM t1 466 0 0 0 {SEARCH TABLE t1 USING INDEX t1b (b=?) (~5 rows)}
479 WHERE b=1000 467 }
480 AND (c=31031 OR d IS NULL)
481 }]
482 set a [expr {[lsearch $r {TABLE t1 VIA MULTI-INDEX UNION}]>=0}]
483 set b [expr {[lsearch $r {TABLE t1 WITH INDEX t1b}]>=0}]
484 concat $a $b
485 } {0 1}
486 468
487 # Likewise, inequalities in an AND are preferred over inequalities in 469 # Likewise, inequalities in an AND are preferred over inequalities in
488 # an OR. 470 # an OR.
489 # 471 #
490 do_test where9-5.3 { 472 do_execsql_test where9-5.3 {
491 set r [db eval { 473 EXPLAIN QUERY PLAN SELECT a FROM t1 WHERE b>1000 AND (c>=31031 OR d IS NULL)
492 EXPLAIN QUERY PLAN 474 } {
493 SELECT a FROM t1 475 0 0 0 {SEARCH TABLE t1 USING INDEX t1b (b>?) (~125000 rows)}
494 WHERE b>1000 476 }
495 AND (c>=31031 OR d IS NULL)
496 }]
497 set a [expr {[lsearch $r {TABLE t1 VIA MULTI-INDEX UNION}]>=0}]
498 set b [expr {[lsearch $r {TABLE t1 WITH INDEX t1b}]>=0}]
499 concat $a $b
500 } {0 1}
501 } 477 }
502 478
503 ############################################################################ 479 ############################################################################
504 # Make sure OR-clauses work correctly on UPDATE and DELETE statements. 480 # Make sure OR-clauses work correctly on UPDATE and DELETE statements.
505 481
506 do_test where9-6.2.1 { 482 do_test where9-6.2.1 {
507 db eval {SELECT count(*) FROM t1 UNION ALL SELECT a FROM t1 WHERE a>=85} 483 db eval {SELECT count(*) FROM t1 UNION ALL SELECT a FROM t1 WHERE a>=85}
508 } {99 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99} 484 } {99 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99}
509 485
510 do_test where9-6.2.2 { ;# Deletes entries 90 91 92 96 97 99 486 do_test where9-6.2.2 { ;# Deletes entries 90 91 92 96 97 99
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after
801 do_test where9-6.8.2 { 777 do_test where9-6.8.2 {
802 catchsql { 778 catchsql {
803 UPDATE t1 INDEXED BY t1b SET a=a+100 779 UPDATE t1 INDEXED BY t1b SET a=a+100
804 WHERE (b IS NULL AND c NOT NULL AND d NOT NULL) 780 WHERE (b IS NULL AND c NOT NULL AND d NOT NULL)
805 OR (b NOT NULL AND c IS NULL AND d NOT NULL) 781 OR (b NOT NULL AND c IS NULL AND d NOT NULL)
806 OR (b NOT NULL AND c NOT NULL AND d IS NULL) 782 OR (b NOT NULL AND c NOT NULL AND d IS NULL)
807 } 783 }
808 } {1 {cannot use index: t1b}} 784 } {1 {cannot use index: t1b}}
809 785
810 finish_test 786 finish_test
OLDNEW
« no previous file with comments | « third_party/sqlite/src/test/where8.test ('k') | third_party/sqlite/src/test/whereA.test » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698