summaryrefslogtreecommitdiffstats
path: root/test/bestindex7.test
diff options
context:
space:
mode:
Diffstat (limited to 'test/bestindex7.test')
-rw-r--r--test/bestindex7.test82
1 files changed, 82 insertions, 0 deletions
diff --git a/test/bestindex7.test b/test/bestindex7.test
new file mode 100644
index 0000000..a84b9ef
--- /dev/null
+++ b/test/bestindex7.test
@@ -0,0 +1,82 @@
+# 2020-01-29
+#
+# The author disclaims copyright to this source code. In place of
+# a legal notice, here is a blessing:
+#
+# May you do good and not evil.
+# May you find forgiveness for yourself and forgive others.
+# May you share freely, never taking more than you give.
+#
+#***********************************************************************
+#
+
+set testdir [file dirname $argv0]
+source $testdir/tester.tcl
+set testprefix bestindex7
+
+ifcapable !vtab {
+ finish_test
+ return
+}
+
+register_tcl_module db
+
+proc vtab_command {src method args} {
+ switch -- $method {
+ xConnect {
+ return "CREATE TABLE xxx(a)"
+ }
+
+ xBestIndex {
+ set hdl [lindex $args 0]
+ set clist [$hdl constraints]
+ set orderby [$hdl orderby]
+ set mask [$hdl mask]
+
+ set iCons 0
+ set ret [list]
+ foreach cons $clist {
+ catch { array unset C }
+ array set C $cons
+ if {$C(usable)} {
+ lappend ret use $iCons
+ }
+ incr iCons
+ }
+ return $ret
+ }
+
+ xFilter {
+ return [list sql "SELECT rowid, x FROM $src"]
+ }
+
+ }
+
+ return {}
+}
+
+do_execsql_test 1.0 {
+ CREATE TABLE t1(x);
+ INSERT INTO t1 VALUES(0), (2);
+ CREATE VIRTUAL TABLE vt1 USING tcl(vtab_command t1);
+}
+
+do_execsql_test 1.1 { select * from vt1 } {0 2}
+do_execsql_test 1.2 { select * from vt1 WHERE a=0 } {0}
+do_execsql_test 1.3 { select * from vt1 WHERE a=1 } {}
+do_execsql_test 1.4 { select * from vt1 WHERE a=1 OR a=0} {0}
+
+do_execsql_test 1.5 {
+ UPDATE t1 SET x=NULL WHERE x=2;
+}
+
+do_execsql_test 1.6 { select * from vt1 } {0 {}}
+do_execsql_test 1.7 { select * from vt1 WHERE a=0 } {0}
+do_execsql_test 1.8 { select * from vt1 WHERE a=1 } {}
+do_execsql_test 1.9 { select * from vt1 WHERE a=1 OR a=0} {0}
+do_execsql_test 1.10 { select * from vt1 WHERE a IN (2) } {}
+do_execsql_test 1.10 { select * from vt1 WHERE a IN (0,1,2,3) } {0}
+do_execsql_test 1.11 { select * from vt1 WHERE a IN (0, NULL) } {0}
+do_execsql_test 1.12 { select * from vt1 WHERE a IN (NULL) } {}
+
+finish_test