aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2014-04-18 01:10:05 +0000
committerdrh <drh@noemail.net>2014-04-18 01:10:05 +0000
commita1a483d54e39272c16b5fa94e97578ccddee6a8a (patch)
treeb28bb3ea6cdff4cdefa08c26c870e415e996c730 /test
parent652cc4b6dca02426e8d375a962bf8417850d9f7a (diff)
parent71794dbaeb73f594ef704fa265715b207f98edc7 (diff)
downloadsqlite-a1a483d54e39272c16b5fa94e97578ccddee6a8a.tar.gz
sqlite-a1a483d54e39272c16b5fa94e97578ccddee6a8a.zip
Merge recent trunk changes into sessions.
FossilOrigin-Name: 95e77efe076ab421bd246119c47dba5dacf9d087
Diffstat (limited to 'test')
-rw-r--r--test/alter.test38
-rw-r--r--test/func.test12
-rw-r--r--test/index6.test19
-rw-r--r--test/wal.test13
-rw-r--r--test/whereD.test53
-rw-r--r--test/whereH.test139
6 files changed, 269 insertions, 5 deletions
diff --git a/test/alter.test b/test/alter.test
index 557162f83..ddf169882 100644
--- a/test/alter.test
+++ b/test/alter.test
@@ -875,4 +875,42 @@ do_execsql_test alter-16.2 {
SELECT * FROM t16a_rn ORDER BY a;
} {abc 1.25 99 xyzzy cba 5.5 98 fizzle}
+#-------------------------------------------------------------------------
+# Verify that NULL values into the internal-use-only sqlite_rename_*()
+# functions do not cause problems.
+#
+do_execsql_test alter-17.1 {
+ SELECT sqlite_rename_table('CREATE TABLE xyz(a,b,c)','abc');
+} {{CREATE TABLE "abc"(a,b,c)}}
+do_execsql_test alter-17.2 {
+ SELECT sqlite_rename_table('CREATE TABLE xyz(a,b,c)',NULL);
+} {{CREATE TABLE "(NULL)"(a,b,c)}}
+do_execsql_test alter-17.3 {
+ SELECT sqlite_rename_table(NULL,'abc');
+} {{}}
+do_execsql_test alter-17.4 {
+ SELECT sqlite_rename_trigger('CREATE TRIGGER r1 ON xyz WHEN','abc');
+} {{CREATE TRIGGER r1 ON "abc" WHEN}}
+do_execsql_test alter-17.5 {
+ SELECT sqlite_rename_trigger('CREATE TRIGGER r1 ON xyz WHEN',NULL);
+} {{CREATE TRIGGER r1 ON "(NULL)" WHEN}}
+do_execsql_test alter-17.6 {
+ SELECT sqlite_rename_trigger(NULL,'abc');
+} {{}}
+do_execsql_test alter-17.7 {
+ SELECT sqlite_rename_parent('CREATE TABLE t1(a REFERENCES "xyzzy")',
+ 'xyzzy','lmnop');
+} {{CREATE TABLE t1(a REFERENCES "lmnop")}}
+do_execsql_test alter-17.8 {
+ SELECT sqlite_rename_parent('CREATE TABLE t1(a REFERENCES "xyzzy")',
+ 'xyzzy',NULL);
+} {{CREATE TABLE t1(a REFERENCES "(NULL)")}}
+do_execsql_test alter-17.9 {
+ SELECT sqlite_rename_parent('CREATE TABLE t1(a REFERENCES "xyzzy")',
+ NULL, 'lmnop');
+} {{}}
+do_execsql_test alter-17.10 {
+ SELECT sqlite_rename_parent(NULL,'abc','xyz');
+} {{}}
+
finish_test
diff --git a/test/func.test b/test/func.test
index 0fafd1828..e3cec3215 100644
--- a/test/func.test
+++ b/test/func.test
@@ -1301,11 +1301,13 @@ do_test func-29.3 {
db eval {SELECT typeof(+x) FROM t29 ORDER BY id}
} {integer null real blob text}
if {[permutation] != "mmap"} {
- do_test func-29.4 {
- set x [lindex [sqlite3_db_status db CACHE_MISS 1] 1]
- if {$x>100} {set x many}
- set x
- } {many}
+ ifcapable !direct_read {
+ do_test func-29.4 {
+ set x [lindex [sqlite3_db_status db CACHE_MISS 1] 1]
+ if {$x>100} {set x many}
+ set x
+ } {many}
+ }
}
do_test func-29.5 {
db close
diff --git a/test/index6.test b/test/index6.test
index 48706be3c..3451e5c1d 100644
--- a/test/index6.test
+++ b/test/index6.test
@@ -248,4 +248,23 @@ do_execsql_test index6-5.0 {
SELECT stat+0 FROM sqlite_stat1 WHERE idx='t3b';
} {6 6}
+# Test case for ticket [2ea3e9fe6379fc3f6ce7e090ce483c1a3a80d6c9] from
+# 2014-04-13: Partial index causes assertion fault on UPDATE OR REPLACE.
+#
+do_execsql_test index6-6.0 {
+ CREATE TABLE t6(a,b);
+ CREATE UNIQUE INDEX t6ab ON t1(a,b);
+ CREATE INDEX t6b ON t6(b) WHERE b=1;
+ INSERT INTO t6(a,b) VALUES(123,456);
+ SELECT * FROM t6;
+} {123 456}
+do_execsql_test index6-6.1 {
+ UPDATE OR REPLACE t6 SET b=789;
+ SELECT * FROM t6;
+} {123 789}
+do_execsql_test index6-6.2 {
+ PRAGMA integrity_check;
+} {ok}
+
+
finish_test
diff --git a/test/wal.test b/test/wal.test
index 3a69de54f..675be7379 100644
--- a/test/wal.test
+++ b/test/wal.test
@@ -1574,4 +1574,17 @@ sqlite3_shutdown
test_sqlite3_log
sqlite3_initialize
+# Make sure PRAGMA journal_mode=WAL works with ATTACHED databases in
+# all journal modes.
+#
+foreach mode {OFF MEMORY PERSIST DELETE TRUNCATE WAL} {
+ delete_file test.db test2.db
+ sqlite3 db test.db
+ do_test wal-25.$mode {
+ db eval "PRAGMA journal_mode=$mode"
+ db eval {ATTACH 'test2.db' AS t2; PRAGMA journal_mode=WAL;}
+ } {wal}
+ db close
+}
+
finish_test
diff --git a/test/whereD.test b/test/whereD.test
index eb0f86402..db993040b 100644
--- a/test/whereD.test
+++ b/test/whereD.test
@@ -217,6 +217,59 @@ do_execsql_test 4.7 {
ORDER BY a;
} {3 4 3 4}
+# Verify fix of a bug reported on the mailing list by Peter Reid
+#
+do_execsql_test 5.1 {
+ DROP TABLE IF EXISTS t;
+ CREATE TABLE t(c0,c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17);
+ CREATE INDEX tc0 ON t(c0);
+ CREATE INDEX tc1 ON t(c1);
+ CREATE INDEX tc2 ON t(c2);
+ CREATE INDEX tc3 ON t(c3);
+ CREATE INDEX tc4 ON t(c4);
+ CREATE INDEX tc5 ON t(c5);
+ CREATE INDEX tc6 ON t(c6);
+ CREATE INDEX tc7 ON t(c7);
+ CREATE INDEX tc8 ON t(c8);
+ CREATE INDEX tc9 ON t(c9);
+ CREATE INDEX tc10 ON t(c10);
+ CREATE INDEX tc11 ON t(c11);
+ CREATE INDEX tc12 ON t(c12);
+ CREATE INDEX tc13 ON t(c13);
+ CREATE INDEX tc14 ON t(c14);
+ CREATE INDEX tc15 ON t(c15);
+ CREATE INDEX tc16 ON t(c16);
+ CREATE INDEX tc17 ON t(c17);
+
+ INSERT INTO t(c0, c16) VALUES (1,1);
+
+ SELECT * FROM t WHERE
+ c0=1 or c1=1 or c2=1 or c3=1 or
+ c4=1 or c5=1 or c6=1 or c7=1 or
+ c8=1 or c9=1 or c10=1 or c11=1 or
+ c12=1 or c13=1 or c14=1 or c15=1 or
+ c16=1 or c17=1;
+} {1 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 1 {}}
+do_execsql_test 5.2 {
+ DELETE FROM t;
+ INSERT INTO t(c0,c17) VALUES(1,1);
+ SELECT * FROM t WHERE
+ c0=1 or c1=1 or c2=1 or c3=1 or
+ c4=1 or c5=1 or c6=1 or c7=1 or
+ c8=1 or c9=1 or c10=1 or c11=1 or
+ c12=1 or c13=1 or c14=1 or c15=1 or
+ c16=1 or c17=1;
+} {1 {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 1}
+do_execsql_test 5.3 {
+ DELETE FROM t;
+ INSERT INTO t(c0,c15) VALUES(1,1);
+ SELECT * FROM t WHERE
+ c0=1 or c1=1 or c2=1 or c3=1 or
+ c4=1 or c5=1 or c6=1 or c7=1 or
+ c8=1 or c9=1 or c10=1 or c11=1 or
+ c12=1 or c13=1 or c14=1 or c15=1 or
+ c16=1 or c17=1;
+} {1 {} {} {} {} {} {} {} {} {} {} {} {} {} {} 1 {} {}}
finish_test
diff --git a/test/whereH.test b/test/whereH.test
new file mode 100644
index 000000000..c252fe1ef
--- /dev/null
+++ b/test/whereH.test
@@ -0,0 +1,139 @@
+# 2014-03-31
+#
+# 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.
+#
+#***********************************************************************
+#
+# Test cases for query planning decisions where one candidate index
+# covers a proper superset of the WHERE clause terms of another
+# candidate index.
+#
+
+set testdir [file dirname $argv0]
+source $testdir/tester.tcl
+
+do_execsql_test whereH-1.1 {
+ CREATE TABLE t1(a,b,c,d);
+ CREATE INDEX t1abc ON t1(a,b,c);
+ CREATE INDEX t1bc ON t1(b,c);
+
+ EXPLAIN QUERY PLAN
+ SELECT d FROM t1 WHERE a=? AND b=? AND c>=? ORDER BY c;
+} {/INDEX t1abc /}
+do_execsql_test whereH-1.2 {
+ EXPLAIN QUERY PLAN
+ SELECT d FROM t1 WHERE a=? AND b=? AND c>=? ORDER BY c;
+} {~/TEMP B-TREE FOR ORDER BY/}
+
+do_execsql_test whereH-2.1 {
+ DROP TABLE t1;
+ CREATE TABLE t1(a,b,c,d);
+ CREATE INDEX t1bc ON t1(b,c);
+ CREATE INDEX t1abc ON t1(a,b,c);
+
+ EXPLAIN QUERY PLAN
+ SELECT d FROM t1 WHERE a=? AND b=? AND c>=? ORDER BY c;
+} {/INDEX t1abc /}
+do_execsql_test whereH-2.2 {
+ EXPLAIN QUERY PLAN
+ SELECT d FROM t1 WHERE a=? AND b=? AND c>=? ORDER BY c;
+} {~/TEMP B-TREE FOR ORDER BY/}
+
+do_execsql_test whereH-3.1 {
+ DROP TABLE t1;
+ CREATE TABLE t1(a,b,c,d,e);
+ CREATE INDEX t1cd ON t1(c,d);
+ CREATE INDEX t1bcd ON t1(b,c,d);
+ CREATE INDEX t1abcd ON t1(a,b,c,d);
+
+ EXPLAIN QUERY PLAN
+ SELECT d FROM t1 WHERE a=? AND b=? AND c=? AND d>=? ORDER BY d;
+} {/INDEX t1abcd /}
+do_execsql_test whereH-3.2 {
+ EXPLAIN QUERY PLAN
+ SELECT d FROM t1 WHERE a=? AND b=? AND c=? AND d>=? ORDER BY d;
+} {~/TEMP B-TREE FOR ORDER BY/}
+
+do_execsql_test whereH-4.1 {
+ DROP TABLE t1;
+ CREATE TABLE t1(a,b,c,d,e);
+ CREATE INDEX t1cd ON t1(c,d);
+ CREATE INDEX t1abcd ON t1(a,b,c,d);
+ CREATE INDEX t1bcd ON t1(b,c,d);
+
+ EXPLAIN QUERY PLAN
+ SELECT d FROM t1 WHERE a=? AND b=? AND c=? AND d>=? ORDER BY d;
+} {/INDEX t1abcd /}
+do_execsql_test whereH-4.2 {
+ EXPLAIN QUERY PLAN
+ SELECT d FROM t1 WHERE a=? AND b=? AND c=? AND d>=? ORDER BY d;
+} {~/TEMP B-TREE FOR ORDER BY/}
+
+do_execsql_test whereH-5.1 {
+ DROP TABLE t1;
+ CREATE TABLE t1(a,b,c,d,e);
+ CREATE INDEX t1bcd ON t1(b,c,d);
+ CREATE INDEX t1cd ON t1(c,d);
+ CREATE INDEX t1abcd ON t1(a,b,c,d);
+
+ EXPLAIN QUERY PLAN
+ SELECT d FROM t1 WHERE a=? AND b=? AND c=? AND d>=? ORDER BY d;
+} {/INDEX t1abcd /}
+do_execsql_test whereH-5.2 {
+ EXPLAIN QUERY PLAN
+ SELECT d FROM t1 WHERE a=? AND b=? AND c=? AND d>=? ORDER BY d;
+} {~/TEMP B-TREE FOR ORDER BY/}
+
+do_execsql_test whereH-6.1 {
+ DROP TABLE t1;
+ CREATE TABLE t1(a,b,c,d,e);
+ CREATE INDEX t1bcd ON t1(b,c,d);
+ CREATE INDEX t1abcd ON t1(a,b,c,d);
+ CREATE INDEX t1cd ON t1(c,d);
+
+ EXPLAIN QUERY PLAN
+ SELECT d FROM t1 WHERE a=? AND b=? AND c=? AND d>=? ORDER BY d;
+} {/INDEX t1abcd /}
+do_execsql_test whereH-6.2 {
+ EXPLAIN QUERY PLAN
+ SELECT d FROM t1 WHERE a=? AND b=? AND c=? AND d>=? ORDER BY d;
+} {~/TEMP B-TREE FOR ORDER BY/}
+
+do_execsql_test whereH-7.1 {
+ DROP TABLE t1;
+ CREATE TABLE t1(a,b,c,d,e);
+ CREATE INDEX t1abcd ON t1(a,b,c,d);
+ CREATE INDEX t1bcd ON t1(b,c,d);
+ CREATE INDEX t1cd ON t1(c,d);
+
+ EXPLAIN QUERY PLAN
+ SELECT d FROM t1 WHERE a=? AND b=? AND c=? AND d>=? ORDER BY d;
+} {/INDEX t1abcd /}
+do_execsql_test whereH-7.2 {
+ EXPLAIN QUERY PLAN
+ SELECT d FROM t1 WHERE a=? AND b=? AND c=? AND d>=? ORDER BY d;
+} {~/TEMP B-TREE FOR ORDER BY/}
+
+do_execsql_test whereH-8.1 {
+ DROP TABLE t1;
+ CREATE TABLE t1(a,b,c,d,e);
+ CREATE INDEX t1abcd ON t1(a,b,c,d);
+ CREATE INDEX t1cd ON t1(c,d);
+ CREATE INDEX t1bcd ON t1(b,c,d);
+
+ EXPLAIN QUERY PLAN
+ SELECT d FROM t1 WHERE a=? AND b=? AND c=? AND d>=? ORDER BY d;
+} {/INDEX t1abcd /}
+do_execsql_test whereH-8.2 {
+ EXPLAIN QUERY PLAN
+ SELECT d FROM t1 WHERE a=? AND b=? AND c=? AND d>=? ORDER BY d;
+} {~/TEMP B-TREE FOR ORDER BY/}
+
+
+
+finish_test