mirror of
https://github.com/sqlite/sqlite.git
synced 2025-11-19 21:43:15 +03:00
Merge recent trunk changes into sessions.
FossilOrigin-Name: 95e77efe076ab421bd246119c47dba5dacf9d087
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
139
test/whereH.test
Normal file
139
test/whereH.test
Normal file
@@ -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
|
||||
Reference in New Issue
Block a user