]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Add an extra test for the change on this branch.
authordan <dan@noemail.net>
Wed, 2 Mar 2016 16:13:53 +0000 (16:13 +0000)
committerdan <dan@noemail.net>
Wed, 2 Mar 2016 16:13:53 +0000 (16:13 +0000)
FossilOrigin-Name: d2d28251566d2a0ec1a07fe5b8ed047136840bfd

1  2 
manifest
manifest.uuid
test/bestindex1.test

diff --cc manifest
index 3c5171c6ed213f926642c1ef2fd0bb02060cfcaf,18c08f648b1b922f98d58a87a13b6e3924353f88..7914b48dc393812ca40a602c1f7a92dde1764042
+++ 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 a061607f3364750ee04ca35898a9768cb28a1319,a4b1d5378ef62150d46d536131e5dc63dc7c6425..562b522fef00252628b9b6b6de16bad038a96235
@@@ -1,1 -1,1 +1,1 @@@
- 1622623cbbfc4325c53d731aba78ca9c382ec612
 -3c15a9bf45cd7dae2fbd99123b8dd75ce278d6e4
++d2d28251566d2a0ec1a07fe5b8ed047136840bfd
index 840219b620387b376183396280ed2a4d5c4d1fb1,87ec9cc56a41a9d9c8985b5229cf6cf3f5bb07b5..fffb7aebea5dce34d942c8935d7589a1ca3b6e44
@@@ -57,4 -57,100 +57,109 @@@ do_eqp_test 1.2 
    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