]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Add the "sqlite3_imposter DB SCHEMA ROOT SQL" command to sqlite3_checker.
authordrh <drh@noemail.net>
Wed, 1 Nov 2017 18:31:34 +0000 (18:31 +0000)
committerdrh <drh@noemail.net>
Wed, 1 Nov 2017 18:31:34 +0000 (18:31 +0000)
Use it to fix the checkindex01.test module.  There are still errors reported
by the checkfreelist01.test module.

FossilOrigin-Name: 0593a2ba74c886afe8a65cea1310025bb9777c320d093278044719210c9f6ba2

ext/repair/sqlite3_checker.c.in
ext/repair/test/checkindex01.test
manifest
manifest.uuid

index 6045c36a9d009064327086af9c18a589c8c03214..96b15f2713613bd2cdf0f4072ea028b9021b8dd5 100644 (file)
@@ -19,9 +19,61 @@ INCLUDE $ROOT/ext/misc/btreeinfo.c
 INCLUDE $ROOT/ext/repair/checkindex.c
 INCLUDE $ROOT/ext/repair/checkfreelist.c
 
+/*
+** Decode a pointer to an sqlite3 object.
+*/
+int getDbPointer(Tcl_Interp *interp, const char *zA, sqlite3 **ppDb){
+  struct SqliteDb *p;
+  Tcl_CmdInfo cmdInfo;
+  if( Tcl_GetCommandInfo(interp, zA, &cmdInfo) ){
+    p = (struct SqliteDb*)cmdInfo.objClientData;
+    *ppDb = p->db;
+    return TCL_OK;
+  }else{
+    *ppDb = 0;
+    return TCL_ERROR;
+  }
+  return TCL_OK;
+}
+
+/*
+**   sqlite3_imposter db main rootpage {CREATE TABLE...}  ;# setup an imposter
+**   sqlite3_imposter db main                             ;# rm all imposters
+*/
+static int sqlite3_imposter(
+  void *clientData,
+  Tcl_Interp *interp,
+  int objc,
+  Tcl_Obj *CONST objv[]
+){
+  sqlite3 *db;
+  const char *zSchema;
+  int iRoot;
+  const char *zSql;
+
+  if( objc!=3 && objc!=5 ){
+    Tcl_WrongNumArgs(interp, 1, objv, "DB SCHEMA [ROOTPAGE SQL]");
+    return TCL_ERROR;
+  }
+  if( getDbPointer(interp, Tcl_GetString(objv[1]), &db) ) return TCL_ERROR;
+  zSchema = Tcl_GetString(objv[2]);
+  if( objc==3 ){
+    sqlite3_test_control(SQLITE_TESTCTRL_IMPOSTER, db, zSchema, 0, 1);
+  }else{
+    if( Tcl_GetIntFromObj(interp, objv[3], &iRoot) ) return TCL_ERROR;
+    zSql = Tcl_GetString(objv[4]);
+    sqlite3_test_control(SQLITE_TESTCTRL_IMPOSTER, db, zSchema, 1, iRoot);
+    sqlite3_exec(db, zSql, 0, 0, 0);
+    sqlite3_test_control(SQLITE_TESTCTRL_IMPOSTER, db, zSchema, 0, 0);
+  }
+  return TCL_OK;
+}
+
 #include <stdio.h>
 
 const char *sqlite3_checker_init_proc(Tcl_Interp *interp){
+  Tcl_CreateObjCommand(interp, "sqlite3_imposter", 
+                       (Tcl_ObjCmdProc*)sqlite3_imposter, 0, 0);
   sqlite3_auto_extension((void(*)(void))sqlite3_btreeinfo_init);
   sqlite3_auto_extension((void(*)(void))sqlite3_checkindex_init);
   sqlite3_auto_extension((void(*)(void))sqlite3_checkfreelist_init);
index 36bae886d2ae91230191dd17b3b3adfc52799cd1..744a21c69e707069d6668c8135fd88339feb15b0 100644 (file)
@@ -71,16 +71,12 @@ do_index_check_test 1.4 i2 {
 
 do_test 1.5 {
   set tblroot [db one { SELECT rootpage FROM sqlite_master WHERE name='t1' }]
-  sqlite3_test_control SQLITE_TESTCTRL_IMPOSTER db main 1 $tblroot
-  db eval {CREATE TABLE xt1(a, b)}
-  sqlite3_test_control SQLITE_TESTCTRL_IMPOSTER db main 0 0
-
-  execsql {
+  sqlite3_imposter db main $tblroot {CREATE TABLE xt1(a,b)}
+  db eval {
     UPDATE xt1 SET a='six' WHERE rowid=3;
     DELETE FROM xt1 WHERE rowid = 5;
   }
-
-  sqlite3_test_control SQLITE_TESTCTRL_IMPOSTER db main 0 1
+  sqlite3_imposter db main
 } {}
 
 do_index_check_test 1.6 i1 {
@@ -211,16 +207,14 @@ do_index_check_test 4.1 t4cc {
 
 do_test 4.2 {
   set tblroot [db one { SELECT rootpage FROM sqlite_master WHERE name='t4' }]
-  sqlite3_test_control SQLITE_TESTCTRL_IMPOSTER db main 1 $tblroot
-  db eval {CREATE TABLE xt4(a INTEGER PRIMARY KEY, c1 TEXT, c2 TEXT)}
-  sqlite3_test_control SQLITE_TESTCTRL_IMPOSTER db main 0 0
+  sqlite3_imposter db main $tblroot \
+     {CREATE TABLE xt4(a INTEGER PRIMARY KEY, c1 TEXT, c2 TEXT)}
 
-  execsql {
+  db eval {
     UPDATE xt4 SET c1='hello' WHERE rowid=2;
     DELETE FROM xt4 WHERE rowid = 3;
   }
-
-  sqlite3_test_control SQLITE_TESTCTRL_IMPOSTER db main 0 1
+  sqlite3_imposter db main
 } {}
 
 do_index_check_test 4.3 t4cc {
@@ -263,14 +257,13 @@ do_index_check_test 5.1.3 sqlite_autoindex_t5_1 {
 
 do_test 5.2 {
   set tblroot [db one { SELECT rootpage FROM sqlite_master WHERE name='t5' }]
-  sqlite3_test_control SQLITE_TESTCTRL_IMPOSTER db main 1 $tblroot
-  db eval {CREATE TABLE xt5(a INTEGER PRIMARY KEY, c1 TEXT);}
-  sqlite3_test_control SQLITE_TESTCTRL_IMPOSTER db main 0 0
-  execsql {
+  sqlite3_imposter db main $tblroot \
+      {CREATE TABLE xt5(a INTEGER PRIMARY KEY, c1 TEXT);}
+  db eval {
     UPDATE xt5 SET c1='{"x":22, "y":11}' WHERE rowid=1;
     DELETE FROM xt5 WHERE rowid = 4;
   }
-  sqlite3_test_control SQLITE_TESTCTRL_IMPOSTER db main 0 1
+  sqlite3_imposter db main
 } {}
 
 do_index_check_test 5.3.1 t5x {
index ff5e3f094dad8a851adbdd4eb737f67076c07f52..1e2056b04cf1ddea2c1bc89d3c0cb98178124834 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Move\sthe\stest\sscripts\sfor\scheckfreelist\sand\scheckindex\sover\sinto\sthe\next/repair/test\sdirectory.\s\sRun\sthem\snow\susing\sthe\ssqlite3_checker\sutility\nwith\sthe\s--test\soption.\s\sSome\stests\sare\scurrently\sfailing\sdue\sto\san\nincomplete\sport.\s\sThis\sis\san\sincremental\scheck-in.
-D 2017-11-01T18:05:32.697
+C Add\sthe\s"sqlite3_imposter\sDB\sSCHEMA\sROOT\sSQL"\scommand\sto\ssqlite3_checker.\nUse\sit\sto\sfix\sthe\scheckindex01.test\smodule.\s\sThere\sare\sstill\serrors\sreported\nby\sthe\scheckfreelist01.test\smodule.
+D 2017-11-01T18:31:34.119
 F Makefile.in b142eb20482922153ebc77b261cdfd0a560ed05a81e9f6d9a2b0e8192922a1d2
 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 F Makefile.msc a55372a22454e742ba7c8f6edf05b83213ec01125166ad7dcee0567e2f7fc81b
@@ -329,11 +329,11 @@ F ext/rbu/test_rbu.c 7073979b9cc80912bb03599ac8d85ab5d3bf03cfacd3463f2dcdd782299
 F ext/repair/README.md 92f5e8aae749a4dae14f02eea8e1bb42d4db2b6ce5e83dbcdd6b1446997e0c15
 F ext/repair/checkfreelist.c 0abb84b4545016d57ba1a2aa8884c72c73ed838968909858c03bc1f38fb6b054
 F ext/repair/checkindex.c a013a0a165b2e6f2b278a31566da04913856c88d6ed5457d477f89e78d5979d9
-F ext/repair/sqlite3_checker.c.in 16d62615dfce1ff3eeac83d1a77fe376a7b660afa9db07e1fdd8b964dcc41510
+F ext/repair/sqlite3_checker.c.in 445118c5f7fea958b36fba1b2c464283e60ed4842039ddee3265f1698115ebf7
 F ext/repair/sqlite3_checker.tcl 4820d7f58428d47336874b5a148a95b4dad38fe5da72286c01a861590b8f8337
 F ext/repair/test/README.md 34b2f542cf5be7bffe479242b33ee3492cea30711e447cc4a1a86cb5915f419e
 F ext/repair/test/checkfreelist01.test 185648c046c0e269dc3b5141d525b87a38d72f0f55495d46c65108a5dde1428f
-F ext/repair/test/checkindex01.test 7be2299647ac7be41b6a7e249eb78e3aba1b57a7b20943ad199a1dc457edb4f7
+F ext/repair/test/checkindex01.test 98bfac50822da9681d75570087aac92a905290ffdaddf95ab6f69212fb4c7b14
 F ext/repair/test/test.tcl 686d76d888dffd021f64260abf29a55c57b2cedfa7fc69150b42b1d6119aac3c
 F ext/rtree/README 6315c0d73ebf0ec40dedb5aa0e942bc8b54e3761
 F ext/rtree/rtree.c cc91b6905bf55512c6ebc7dfdd37ac81c86f1753db8cfa6d62f0ee864464044f
@@ -1673,7 +1673,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 3ca31cc3ffe1cce4a9961d29801eebd47f0093d1b53d0ea63386338a1d434fd3
-R 9a0909f5ab1dfc6f8f86ede9c43722ca
+P 17f8d5e111a9fe5b074f946e23936ae5a2a7a8d8018bad4212660d8eb81c04b7
+R 789d2ddc9f5813af408c7050793744d3
 U drh
-Z 17e4966dab1f438179fdac475786b16e
+Z 00e34b3226a7a4c513950643ceed7a0f
index 1cd31e3773969dfaa8a33dbeeec02210dcd09efa..6e77603c23e5147b164200097bc35411710352a0 100644 (file)
@@ -1 +1 @@
-17f8d5e111a9fe5b074f946e23936ae5a2a7a8d8018bad4212660d8eb81c04b7
\ No newline at end of file
+0593a2ba74c886afe8a65cea1310025bb9777c320d093278044719210c9f6ba2
\ No newline at end of file