]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Add extra tests for RBU and FTS3/4.
authordan <dan@noemail.net>
Sat, 1 Aug 2015 18:18:21 +0000 (18:18 +0000)
committerdan <dan@noemail.net>
Sat, 1 Aug 2015 18:18:21 +0000 (18:18 +0000)
FossilOrigin-Name: 3419044967258e3ed65f71528e06952ee102dcc7

ext/rbu/rbufts.test
manifest
manifest.uuid

index e2526a02a61b46ed3d43f98046a3bce8ea115826..d5c9fe560979cbbdbb78b7c367bae6bc8d5f7013 100644 (file)
@@ -34,7 +34,16 @@ proc step_rbu {target rbu} {
   set rc
 }
 
-do_execsql_test 1.0 {
+proc apply_rbu_update {target sql} {
+  forcedelete rbu.db
+  sqlite3 dbrbu rbu.db
+  execsql $sql dbrbu
+  dbrbu close
+
+  step_rbu $target rbu.db
+}
+
+do_execsql_test 1.1.0 {
   CREATE TABLE t1(i INTEGER PRIMARY KEY, a, b);
   CREATE VIRTUAL TABLE xx USING fts4(content=t1, a, b);
   INSERT INTO t1(rowid, a, b) VALUES(10, 'a b c', 'c b a');
@@ -43,15 +52,13 @@ do_execsql_test 1.0 {
   INSERT INTO t1(rowid, a, b) VALUES(40, 'd e f', 'd e f');
 }
 
-do_execsql_test 1.1 {
+do_execsql_test 1.1.1 {
   INSERT INTO xx(xx) VALUES('rebuild');
   INSERT INTO xx(xx) VALUES('integrity-check');
 }
 
-forcedelete rbu.db
-do_test 2.0 {
-  sqlite3 dbrbu rbu.db
-  dbrbu eval {
+do_test 1.1.2 {
+  apply_rbu_update test.db {
     CREATE TABLE data_t1(i, a, b, rbu_control);
     INSERT INTO data_t1 VALUES(20, NULL, NULL, 1);        -- delete
     INSERT INTO data_t1 VALUES(30, 'x y z', NULL, '.x.'); -- update
@@ -62,17 +69,64 @@ do_test 2.0 {
     CASE WHEN rbu_control IN (0, 1) 
     THEN rbu_control ELSE substr(rbu_control, 2) END AS rbu_control
     FROM data_t1;
-
   }
-  dbrbu close
-
-  step_rbu test.db rbu.db
 } {SQLITE_DONE}
 
-do_execsql_test 2.1 {
+do_execsql_test 1.1.3 {
   INSERT INTO xx(xx) VALUES('integrity-check');
 }
 
+reset_db
+do_execsql_test 1.2.1 {
+  CREATE TABLE ccc(addr, text);
+  CREATE VIRTUAL TABLE ccc_fts USING fts4(addr, text, content=ccc);
+  INSERT INTO ccc VALUES('a b c', 'd e f');
+  INSERT INTO ccc VALUES('a b c', 'd e f');
+  INSERT INTO ccc_fts(ccc_fts) VALUES('rebuild');
+  INSERT INTO ccc_fts(ccc_fts) VALUES('integrity-check');
+}
+
+do_test 1.2.2 {
+  apply_rbu_update test.db {
+    CREATE TABLE data_ccc(addr, text, rbu_rowid, rbu_control);
+    CREATE VIEW data0_ccc_fts AS SELECT * FROM data_ccc;
+    INSERT INTO data_ccc VALUES(NULL, NULL, 1, 1);
+    INSERT INTO data_ccc VALUES('x y z', NULL, 2, 'x.');
+    INSERT INTO data_ccc VALUES('y y y', '1 1 1', 3, 0);
+  }
+} {SQLITE_DONE}
+
+do_execsql_test 1.2.3 {
+  INSERT INTO ccc_fts(ccc_fts) VALUES('integrity-check');
+}
+do_execsql_test 1.2.4 {
+  SELECT rowid, * FROM ccc_fts;
+} {2 {x y z} {d e f} 3 {y y y} {1 1 1}}
+
+#-------------------------------------------------------------------------
+# Test the outcome of attempting to delete or update a row within a 
+# contentless FTS table using RBU. An error.
+#
+reset_db
+do_execsql_test 3.1 {
+  CREATE VIRTUAL TABLE ft USING fts4(x, content=);
+  INSERT INTO ft(rowid, x) VALUES(1, '1 2 3');
+  INSERT INTO ft(rowid, x) VALUES(2, '4 5 6');
+}
+
+do_test 3.2 {
+  list [catch { apply_rbu_update test.db {
+    CREATE TABLE data_ft(x, rbu_rowid, rbu_control);
+    INSERT INTO data_ft VALUES(NULL, 2, 1);
+  } } msg] $msg]
+} {1 {SQLITE_ERROR - SQL logic error or missing database]}}
+
+do_test 3.3 {
+  list [catch { apply_rbu_update test.db {
+    CREATE TABLE data_ft(x, rbu_rowid, rbu_control);
+    INSERT INTO data_ft VALUES('7 8 9', 1, 'x');
+  } } msg] $msg]
+} {1 {SQLITE_ERROR - SQL logic error or missing database]}}
 
 
 
index 4f0f96bfa7fc41767458cbce772e8ff58415335f..893347ac3d113ecab0acd4a9897e048d18d92565 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Add\ssupport\sfor\s"fossil\sdeltas"\sto\sRBU\sand\s"sqldiff\s--rbu".
-D 2015-07-31T19:52:03.959
+C Add\sextra\stests\sfor\sRBU\sand\sFTS3/4.
+D 2015-08-01T18:18:21.762
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in 4de3ef40c8b3b75c0c55ff4242a43c8ce1ad90ee
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -218,7 +218,7 @@ F ext/rbu/rbucrash.test 8d2ed5d4b05fef6c00c2a6b5f7ead71fa172a695
 F ext/rbu/rbudiff.test 6cc806dc36389292f2a8f5842d0103721df4a07d
 F ext/rbu/rbufault.test cc0be8d5d392d98b0c2d6a51be377ea989250a89
 F ext/rbu/rbufault2.test 9a7f19edd6ea35c4c9f807d8a3db0a03a5670c06
-F ext/rbu/rbufts.test 17db7d968b3d073788bcba044c498d09e830726b
+F ext/rbu/rbufts.test 828cd689da825f0a7b7c53ffc1f6f7fdb6fa5bda
 F ext/rbu/sqlite3rbu.c ffabbb80a1ea796965036e5f7c4a46fbbc86e4b2
 F ext/rbu/sqlite3rbu.h f0754a19fcc155f6d39d72b38bdbeb1d7623f02e
 F ext/rbu/test_rbu.c f99698956cc9158d6bf865e461e2d15876538ac1
@@ -1368,7 +1368,7 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1
 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
 F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 047d3475e93d08cf172ad02404a690d5b0c1b833
-R 8e736740576f94e272a9082f5b3119dd
+P e26ef165fe2f7524684af0d269d38475ea8b9489
+R a8062197815293d95ee75be10aab949e
 U dan
-Z c6901fce7acc44dfc5ada7c5b1068696
+Z 718074b6f56d626d9a6bdf32588261dd
index 47baf93de89e4e68c9bd1beeb0238e2baab3b9d2..f2050aaa849cce9f0113a0e9de19407d4523eceb 100644 (file)
@@ -1 +1 @@
-e26ef165fe2f7524684af0d269d38475ea8b9489
\ No newline at end of file
+3419044967258e3ed65f71528e06952ee102dcc7
\ No newline at end of file