| OLD | NEW | 
|    1 # 2010 November 6 |    1 # 2010 November 6 | 
|    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 498 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  509 # 0|0|0|COMPOUND SUBQUERIES 1 AND 2 (EXCEPT) |  509 # 0|0|0|COMPOUND SUBQUERIES 1 AND 2 (EXCEPT) | 
|  510 # |  510 # | 
|  511 det 5.13 "SELECT a FROM t1 EXCEPT SELECT d FROM t2 ORDER BY 1" { |  511 det 5.13 "SELECT a FROM t1 EXCEPT SELECT d FROM t2 ORDER BY 1" { | 
|  512   1 0 0 {SCAN TABLE t1 USING COVERING INDEX i1} |  512   1 0 0 {SCAN TABLE t1 USING COVERING INDEX i1} | 
|  513   2 0 0 {SCAN TABLE t2} |  513   2 0 0 {SCAN TABLE t2} | 
|  514   2 0 0 {USE TEMP B-TREE FOR ORDER BY} |  514   2 0 0 {USE TEMP B-TREE FOR ORDER BY} | 
|  515   0 0 0 {COMPOUND SUBQUERIES 1 AND 2 (EXCEPT)} |  515   0 0 0 {COMPOUND SUBQUERIES 1 AND 2 (EXCEPT)} | 
|  516 } |  516 } | 
|  517  |  517  | 
|  518  |  518  | 
|  519 #------------------------------------------------------------------------- |  519 if {![nonzero_reserved_bytes]} { | 
|  520 # The following tests - eqp-6.* - test that the example C code on  |  520   #------------------------------------------------------------------------- | 
|  521 # documentation page eqp.html works. The C code is duplicated in test1.c |  521   # The following tests - eqp-6.* - test that the example C code on  | 
|  522 # and wrapped in Tcl command [print_explain_query_plan]  |  522   # documentation page eqp.html works. The C code is duplicated in test1.c | 
|  523 # |  523   # and wrapped in Tcl command [print_explain_query_plan]  | 
|  524 set boilerplate { |  524   # | 
|  525   proc explain_query_plan {db sql} { |  525   set boilerplate { | 
|  526     set stmt [sqlite3_prepare_v2 db $sql -1 DUMMY] |  526     proc explain_query_plan {db sql} { | 
|  527     print_explain_query_plan $stmt |  527       set stmt [sqlite3_prepare_v2 db $sql -1 DUMMY] | 
|  528     sqlite3_finalize $stmt |  528       print_explain_query_plan $stmt | 
 |  529       sqlite3_finalize $stmt | 
 |  530     } | 
 |  531     sqlite3 db test.db | 
 |  532     explain_query_plan db {%SQL%} | 
 |  533     db close | 
 |  534     exit | 
|  529   } |  535   } | 
|  530   sqlite3 db test.db |  536    | 
|  531   explain_query_plan db {%SQL%} |  537   # Do a "Print Explain Query Plan" test. | 
|  532   db close |  538   proc do_peqp_test {tn sql res} { | 
|  533   exit |  539     set fd [open script.tcl w] | 
|  534 } |  540     puts $fd [string map [list %SQL% $sql] $::boilerplate] | 
|  535  |  | 
|  536 # Do a "Print Explain Query Plan" test. |  | 
|  537 proc do_peqp_test {tn sql res} { |  | 
|  538   set fd [open script.tcl w] |  | 
|  539   puts $fd [string map [list %SQL% $sql] $::boilerplate] |  | 
|  540   close $fd |  | 
|  541  |  | 
|  542   uplevel do_test $tn [list { |  | 
|  543     set fd [open "|[info nameofexec] script.tcl"] |  | 
|  544     set data [read $fd] |  | 
|  545     close $fd |  541     close $fd | 
|  546     set data |  542    | 
|  547   }] [list $res] |  543     uplevel do_test $tn [list { | 
|  548 } |  544       set fd [open "|[info nameofexec] script.tcl"] | 
|  549  |  545       set data [read $fd] | 
|  550 do_peqp_test 6.1 { |  546       close $fd | 
|  551   SELECT a, b FROM t1 EXCEPT SELECT d, 99 FROM t2 ORDER BY 1 |  547       set data | 
|  552 } [string trimleft { |  548     }] [list $res] | 
 |  549   } | 
 |  550    | 
 |  551   do_peqp_test 6.1 { | 
 |  552     SELECT a, b FROM t1 EXCEPT SELECT d, 99 FROM t2 ORDER BY 1 | 
 |  553   } [string trimleft { | 
|  553 1 0 0 SCAN TABLE t1 USING COVERING INDEX i2 |  554 1 0 0 SCAN TABLE t1 USING COVERING INDEX i2 | 
|  554 2 0 0 SCAN TABLE t2 |  555 2 0 0 SCAN TABLE t2 | 
|  555 2 0 0 USE TEMP B-TREE FOR ORDER BY |  556 2 0 0 USE TEMP B-TREE FOR ORDER BY | 
|  556 0 0 0 COMPOUND SUBQUERIES 1 AND 2 (EXCEPT) |  557 0 0 0 COMPOUND SUBQUERIES 1 AND 2 (EXCEPT) | 
|  557 }] |  558 }] | 
 |  559 } | 
|  558  |  560  | 
|  559 #------------------------------------------------------------------------- |  561 #------------------------------------------------------------------------- | 
|  560 # The following tests - eqp-7.* - test that queries that use the OP_Count |  562 # The following tests - eqp-7.* - test that queries that use the OP_Count | 
|  561 # optimization return something sensible with EQP. |  563 # optimization return something sensible with EQP. | 
|  562 # |  564 # | 
|  563 drop_all_tables |  565 drop_all_tables | 
|  564  |  566  | 
|  565 do_execsql_test 7.0 { |  567 do_execsql_test 7.0 { | 
|  566   CREATE TABLE t1(a INT, b INT, ex CHAR(100)); |  568   CREATE TABLE t1(a INT, b INT, ex CHAR(100)); | 
|  567   CREATE TABLE t2(a INT, b INT, ex CHAR(100)); |  569   CREATE TABLE t2(a INT, b INT, ex CHAR(100)); | 
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  637   0 0 0 {SCAN TABLE t1} |  639   0 0 0 {SCAN TABLE t1} | 
|  638 } |  640 } | 
|  639  |  641  | 
|  640  |  642  | 
|  641  |  643  | 
|  642  |  644  | 
|  643  |  645  | 
|  644  |  646  | 
|  645  |  647  | 
|  646 finish_test |  648 finish_test | 
| OLD | NEW |