From: dan Date: Wed, 2 Mar 2016 16:13:53 +0000 (+0000) Subject: Add an extra test for the change on this branch. X-Git-Tag: version-3.12.0~114^2~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=512c09b0bdaa6321f606035f55d025bd7d2d6324;p=thirdparty%2Fsqlite.git Add an extra test for the change on this branch. FossilOrigin-Name: d2d28251566d2a0ec1a07fe5b8ed047136840bfd --- 512c09b0bdaa6321f606035f55d025bd7d2d6324 diff --cc manifest index 3c5171c6ed,18c08f648b..7914b48dc3 --- a/manifest +++ b/manifest @@@ -1,8 -1,8 +1,8 @@@ - 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 @@@ -493,7 -493,7 +493,7 @@@ F test/backup_malloc.test 7162d604ec2b4 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 @@@ -1453,10 -1453,7 +1453,7 @@@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a9 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 diff --cc manifest.uuid index a061607f33,a4b1d5378e..562b522fef --- a/manifest.uuid +++ b/manifest.uuid @@@ -1,1 -1,1 +1,1 @@@ - 1622623cbbfc4325c53d731aba78ca9c382ec612 -3c15a9bf45cd7dae2fbd99123b8dd75ce278d6e4 ++d2d28251566d2a0ec1a07fe5b8ed047136840bfd diff --cc test/bestindex1.test index 840219b620,87ec9cc56a..fffb7aebea --- a/test/bestindex1.test +++ b/test/bestindex1.test @@@ -57,4 -57,100 +57,109 @@@ do_eqp_test 1.2 0 0 0 {EXECUTE LIST SUBQUERY 1} } + #------------------------------------------------------------------------- + # + 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} + - 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}} ++ 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 - } [concat $plan($mode) {0 0 0 {USE TEMP B-TREE FOR ORDER BY}}] ++ } $plan($mode) + } + finish_test + +