- C Allow\sthe\sleft-hand\sside\sof\sIN\soperators\son\svirtual\stables\sto\shave\sthe\naConstraintUsage[].omit\sflag\sclear.
- D 2016-03-02T03:28:07.978
-C Enhance\stest_bestindex.c\sso\sthat\sit\scan\sbe\sused\sto\stest\splans\sgenerated\sby\sxBestIndex.
-D 2016-03-02T16:01:41.146
-F Makefile.in 4e90dc1521879022aa9479268a4cd141d1771142
++C Add\san\sextra\stest\sfor\sthe\schange\son\sthis\sbranch.
++D 2016-03-02T16:13:53.809
+F Makefile.in e335453db0b16da00c884ad51bb56d1c091a74de
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
-F Makefile.msc 4f319afb7c049d40aff7af6e8c4e7cc2ba18e079
+F Makefile.msc dbd4621ecc585c2ef0c2aa0874698c54675754f1
F README.md 8ecc12493ff9f820cdea6520a9016001cb2e59b7
F VERSION c6b1f51809551d60ad001e6d87cf3ab2c7f54b6f
F aclocal.m4 a5c22d164aff7ed549d53a90fa56d56955281f50
F test/badutf.test d5360fc31f643d37a973ab0d8b4fb85799c3169f
F test/badutf2.test f5bc7f2d280670ecd79b9cf4f0f1760c607fe51f
F test/bc_common.tcl 3eda41ef9cda7d5f6c205462c96228b301da4191
- F test/bestindex1.test 41c763428e403663b3e15b2acba7f07b40b22592
-F test/bestindex1.test ca4a6457c276f564d9db91e22980a9fa08e66e6b
++F test/bestindex1.test e228fe1e3794dbe20271481164e000d695abcd24
F test/between.test 34d375fb5ce1ae283ffe82b6b233e9f38e84fc6c
F test/bigfile.test aa74f4e5db51c8e54a1d9de9fa65d01d1eb20b59
F test/bigfile2.test 1b489a3a39ae90c7f027b79110d6b4e1dbc71bfc
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
--P 3d9daa929c0abe6dc01e800ef343b0eef2f0c76a
- R c059a6ee769a0309e913921e43679d8c
- T *branch * vtab-IN-opt
- T *sym-vtab-IN-opt *
- T -sym-trunk *
- U drh
- Z f36b44043e8c4337262495e2c87317b9
-R 10e42f20a022f81e947260641e83d066
++P 1622623cbbfc4325c53d731aba78ca9c382ec612 3c15a9bf45cd7dae2fbd99123b8dd75ce278d6e4
++R bdc2b3d0e5cbd463ccc4765d0aeeef84
+ U dan
-Z 32cbbe1a7e810bc34e8a7796bb6fedf4
++Z d9e37a89daaed1ba1547f52769e0ebb4
0 0 0 {EXECUTE LIST SUBQUERY 1}
}
- set plan(use) {0 0 0 {SCAN TABLE t1 VIRTUAL TABLE INDEX 0:SELECT * FROM t1x}}
- set plan(use2) {0 0 0 {SCAN TABLE t1 VIRTUAL TABLE INDEX 0:SELECT * FROM t1x}}
+ #-------------------------------------------------------------------------
+ #
+ reset_db
+ register_tcl_module db
+
+ # Parameter $mode may be one of:
+ #
+ # "omit" - Implement filtering. Set the omit flag.
+ # "use" - Implement filtering. Use the constraint, but do not set omit.
+ # "use2" - Do not implement filtering. Use the constraint anyway.
+ #
+ #
+ proc t1_vtab {mode method args} {
+ switch -- $method {
+ xConnect {
+ return "CREATE TABLE t1(a, b)"
+ }
+
+ xBestIndex {
+ set SQL_FILTER {SELECT * FROM t1x WHERE a='%1%'}
+ set SQL_SCAN {SELECT * FROM t1x}
+
+ set clist [lindex $args 0]
+ set idx 0
+ for {set idx 0} {$idx < [llength $clist]} {incr idx} {
+ array unset C
+ array set C [lindex $clist $idx]
+ if {$C(column)==0 && $C(op)=="eq" && $C(usable)} {
+ switch -- $mode {
+ "omit" {
+ return [list omit $idx rows 10 cost 10 idxstr $SQL_FILTER]
+ }
+ "use" {
+ return [list use $idx rows 10 cost 10 idxstr $SQL_FILTER]
+ }
+ "use2" {
+ return [list use $idx rows 10 cost 10 idxstr $SQL_SCAN]
+ }
+ default {
+ error "Bad mode - $mode"
+ }
+ }
+ }
+ }
+
+ return [list idxstr {SELECT * FROM t1x}]
+ }
+
+ xFilter {
+ set map [list %1% [lindex $args 2 0]]
+ set sql [string map $map [lindex $args 1]]
+ return [list sql $sql]
+ }
+ }
+
+ return {}
+ }
+
+ do_execsql_test 2.1 {
+ CREATE TABLE t1x(i INTEGER PRIMARY KEY, a, b);
+ INSERT INTO t1x VALUES(1, 'one', 1);
+ INSERT INTO t1x VALUES(2, 'two', 2);
+ INSERT INTO t1x VALUES(3, 'three', 3);
+ INSERT INTO t1x VALUES(4, 'four', 4);
+ }
+
+ foreach {tn mode} {
+ 1 use 2 omit 3 use2
+ } {
+ do_execsql_test 2.2.$mode.1 "
+ DROP TABLE IF EXISTS t1;
+ CREATE VIRTUAL TABLE t1 USING tcl(t1_vtab $mode);
+ "
+
+ do_execsql_test 2.2.$mode.2 {SELECT * FROM t1} {one 1 two 2 three 3 four 4}
+ do_execsql_test 2.2.$mode.3 {SELECT rowid FROM t1} {1 2 3 4}
+ do_execsql_test 2.2.$mode.4 {SELECT rowid FROM t1 WHERE a='two'} {2}
+
+ do_execsql_test 2.2.$mode.5 {
+ SELECT rowid FROM t1 WHERE a IN ('one', 'four') ORDER BY +rowid
+ } {1 4}
+
- } [concat $plan($mode) {0 0 0 {USE TEMP B-TREE FOR ORDER BY}}]
++ set plan(use) {
++ 0 0 0 {SCAN TABLE t1 VIRTUAL TABLE INDEX 0:SELECT * FROM t1x WHERE a='%1%'}
++ 0 0 0 {EXECUTE LIST SUBQUERY 1}
++ 0 0 0 {USE TEMP B-TREE FOR ORDER BY}
++ }
+ set plan(omit) {
+ 0 0 0 {SCAN TABLE t1 VIRTUAL TABLE INDEX 0:SELECT * FROM t1x WHERE a='%1%'}
+ 0 0 0 {EXECUTE LIST SUBQUERY 1}
++ 0 0 0 {USE TEMP B-TREE FOR ORDER BY}
++ }
++ set plan(use2) {
++ 0 0 0 {SCAN TABLE t1 VIRTUAL TABLE INDEX 0:SELECT * FROM t1x}
++ 0 0 0 {EXECUTE LIST SUBQUERY 1}
++ 0 0 0 {USE TEMP B-TREE FOR ORDER BY}
+ }
+
+ do_eqp_test 2.2.$mode.6 {
+ SELECT rowid FROM t1 WHERE a IN ('one', 'four') ORDER BY +rowid
++ } $plan($mode)
+ }
+
finish_test
+
+