Index: third_party/sqlite/sqlite-src-3100200/test/imposter1.test |
diff --git a/third_party/sqlite/sqlite-src-3100200/test/imposter1.test b/third_party/sqlite/sqlite-src-3100200/test/imposter1.test |
deleted file mode 100644 |
index 196767be15e45b8ed0e7a6c5cb70514c1448570b..0000000000000000000000000000000000000000 |
--- a/third_party/sqlite/sqlite-src-3100200/test/imposter1.test |
+++ /dev/null |
@@ -1,141 +0,0 @@ |
-# 2015-01-30 |
-# |
-# 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. |
-# |
-#*********************************************************************** |
-# |
-# This file implements tests for SQLite library. |
-# |
-# The focus of this file is adding extra entries in the symbol table |
-# using sqlite3_test_control(SQLITE_TESTCTRL_IMPOSTER) and verifying that |
-# SQLite handles those as expected. |
-# |
- |
-set testdir [file dirname $argv0] |
-source $testdir/tester.tcl |
-set testprefix imposter |
- |
-# Create a bunch of data to sort against |
-# |
-do_test imposter-1.0 { |
- execsql { |
- CREATE TABLE t1(a INTEGER PRIMARY KEY, b, c, d NOT NULL); |
- CREATE INDEX t1b ON t1(b); |
- CREATE UNIQUE INDEX t1c ON t1(c); |
- WITH RECURSIVE c(i) AS (VALUES(1) UNION ALL SELECT i+1 FROM c WHERE i<30) |
- INSERT INTO t1(a,b,c,d) SELECT i,1000+i,2000+i,3000+i FROM c; |
- } |
- set t1_root [db one {SELECT rootpage FROM sqlite_master WHERE name='t1'}] |
- set t1b_root [db one {SELECT rootpage FROM sqlite_master WHERE name='t1b'}] |
- set t1c_root [db one {SELECT rootpage FROM sqlite_master WHERE name='t1c'}] |
- |
- # Create an imposter table that uses the same b-tree as t1 but which does |
- # not have the indexes |
- # |
- sqlite3_test_control SQLITE_TESTCTRL_IMPOSTER db main 1 $t1_root |
- db eval {CREATE TABLE xt1(a,b,c,d)} |
- |
- # And create an imposter table for the t1c index. |
- sqlite3_test_control SQLITE_TESTCTRL_IMPOSTER db main 1 $t1c_root |
- db eval {CREATE TABLE xt1c(c,rowid,PRIMARY KEY(c,rowid))WITHOUT ROWID;} |
- |
- # Go out of imposter mode for now. |
- sqlite3_test_control SQLITE_TESTCTRL_IMPOSTER db main 0 0 |
- |
- # Create triggers to record changes to xt1. |
- # |
- db eval { |
- CREATE TEMP TABLE chnglog(desc TEXT); |
- CREATE TEMP TRIGGER xt1_del AFTER DELETE ON xt1 BEGIN |
- INSERT INTO chnglog VALUES( |
- printf('DELETE t1: rowid=%d, a=%s, b=%s, c=%s, d=%s', |
- old.rowid, quote(old.a), quote(old.b), quote(old.c), |
- quote(old.d))); |
- END; |
- CREATE TEMP TRIGGER xt1_ins AFTER INSERT ON xt1 BEGIN |
- INSERT INTO chnglog VALUES( |
- printf('INSERT t1: rowid=%d, a=%s, b=%s, c=%s, d=%s', |
- new.rowid, quote(new.a), quote(new.b), quote(new.c), |
- quote(new.d))); |
- END; |
- } |
-} {} |
- |
-# The xt1 table has separate xt1.rowid and xt1.a columns. The xt1.rowid |
-# column corresponds to t1.rowid and t1.a, but the xt1.a column is always |
-# NULL |
-# |
-do_execsql_test imposter-1.1 { |
- SELECT rowid FROM xt1 WHERE a IS NOT NULL; |
-} {} |
-do_execsql_test imposter-1.2 { |
- SELECT a,b,c,d FROM t1 EXCEPT SELECT rowid,b,c,d FROM xt1; |
- SELECT rowid,b,c,d FROM xt1 EXCEPT SELECT a,b,c,d FROM t1; |
-} {} |
- |
- |
-# Make changes via the xt1 shadow table. This will not update the |
-# indexes on t1 nor check the uniqueness constraint on t1.c nor check |
-# the NOT NULL constraint on t1.d, resulting in a logically inconsistent |
-# database. |
-# |
-do_execsql_test imposter-1.3 { |
- DELETE FROM xt1 WHERE rowid=5; |
- INSERT INTO xt1(rowid,a,b,c,d) VALUES(99,'hello',1099,2022,NULL); |
- SELECT * FROM chnglog ORDER BY rowid; |
-} [list \ |
- {DELETE t1: rowid=5, a=NULL, b=1005, c=2005, d=3005} \ |
- {INSERT t1: rowid=99, a='hello', b=1099, c=2022, d=NULL} \ |
-] |
- |
-do_execsql_test imposter-1.4a { |
- PRAGMA integrity_check; |
-} {/NULL value in t1.d/} |
-do_execsql_test imposter-1.4b { |
- PRAGMA integrity_check; |
-} {/row # missing from index t1b/} |
-do_execsql_test imposter-1.4c { |
- PRAGMA integrity_check; |
-} {/row # missing from index t1c/} |
- |
-# Cleanup the corruption. |
-# Then demonstrate that the xt1c imposter table can insert non-unique |
-# and NULL values into the UNIQUE index. |
-# |
-do_execsql_test imposter-2.0 { |
- DELETE FROM t1; |
- WITH RECURSIVE c(i) AS (VALUES(1) UNION ALL SELECT i+1 FROM c WHERE i<10) |
- INSERT INTO t1(a,b,c,d) SELECT i,i,i,i FROM c; |
- UPDATE xt1c SET c=NULL WHERE rowid=5; |
- PRAGMA integrity_check; |
-} {/row # missing from index t1c/} |
- |
-do_execsql_test imposter-2.1 { |
- DELETE FROM t1; |
- WITH RECURSIVE c(i) AS (VALUES(1) UNION ALL SELECT i+1 FROM c WHERE i<10) |
- INSERT INTO t1(a,b,c,d) SELECT i,i,i,i FROM c; |
- UPDATE xt1c SET c=99 WHERE rowid IN (5,7,9); |
- SELECT c FROM t1 ORDER BY c; |
-} {1 2 3 4 6 8 10 99 99 99} |
-do_execsql_test imposter-2.2 { |
- UPDATE xt1 SET c=99 WHERE rowid IN (5,7,9); |
- PRAGMA integrity_check; |
-} {/non-unique entry in index t1c/} |
- |
-# Erase the imposter tables |
-# |
-do_test imposter-3.1 { |
- sqlite3_test_control SQLITE_TESTCTRL_IMPOSTER db main 0 1 |
- db eval { |
- DELETE FROM t1 WHERE rowid IN (5,7,9); |
- PRAGMA integrity_check; |
- } |
-} {ok} |
- |
- |
-finish_test |