]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Update the sqldiff tool so that it generates an rbu_count table.
authordan <dan@noemail.net>
Sat, 19 Mar 2016 16:21:26 +0000 (16:21 +0000)
committerdan <dan@noemail.net>
Sat, 19 Mar 2016 16:21:26 +0000 (16:21 +0000)
FossilOrigin-Name: 1f7afb6e9be9f549a91bf2ab492df15698df89fd

ext/rbu/rbudiff.test
ext/rbu/rbuprogress.test
manifest
manifest.uuid
tool/sqldiff.c

index 0ebc0dad0fc6428fe96933e05db822d6f2e5c86e..0863f6e807bd08617880fcf336b35d5043466e2a 100644 (file)
@@ -36,6 +36,7 @@ proc step_rbu {target rbu} {
 }
 
 proc apply_rbudiff {sql target} {
+  test_rbucount $sql
   forcedelete rbu.db
   sqlite3 rbudb rbu.db
   rbudb eval $sql
@@ -43,6 +44,27 @@ proc apply_rbudiff {sql target} {
   step_rbu $target rbu.db
 }
 
+# The only argument is the output of an [sqldiff -rbu] run. This command
+# tests that the contents of the rbu_count table is correct. An exception
+# is thrown if it is not.
+#
+proc test_rbucount {sql} {
+  sqlite3 tmpdb ""
+  tmpdb eval $sql
+  tmpdb eval {
+    SELECT name FROM sqlite_master WHERE name LIKE 'data%' AND type='table'
+  } {
+    set a [tmpdb eval "SELECT count(*) FROM $name"]
+    set b [tmpdb eval {SELECT cnt FROM rbu_count WHERE tbl = $name}]
+    if {$a != $b} { 
+      tmpdb close
+      error "rbu_count error - tbl = $name" 
+    }
+  }
+  tmpdb close
+  return ""
+}
+
 proc rbudiff_cksum {db1} {
   set txt ""
 
index 6e6c7faf618c1de8b0c76c5c29124dfff2da8392..6afbffe8ed4b86a22c94ac0c836f35297c5c5415 100644 (file)
@@ -381,6 +381,16 @@ foreach {bReopen} { 0 1 } {
       } 
       {2500 4000 6000 8000 10000}
       {5000 10000}
+
+      3 {
+        CREATE TABLE data0_t1(rbu_rowid, a, b, c, rbu_control);
+        INSERT INTO data0_t1 VALUES(1, NULL, NULL, NULL, 1);
+        INSERT INTO data0_t1 VALUES(2, NULL, NULL, 7, '..x');
+        CREATE TABLE rbu_count(tbl, cnt);
+        INSERT INTO rbu_count VALUES('data0_t1', 2); 
+      } 
+      {2500 4000 6000 8000 10000}
+      {5000 10000}
     } {
 
       reset_db ; execsql $tbl
index c781c627e190d2dd5c57e0c0ffe51adfb8f4d9aa..0d19f8488de5848b8ef3e865e16c08bdae15d3a3 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Merge\slatest\strunk\schanges,\sincluding\sfixes\sto\stest\sscript\srbudiff.test,\sinto\sthis\sbranch.
-D 2016-03-19T15:34:42.291
+C Update\sthe\ssqldiff\stool\sso\sthat\sit\sgenerates\san\srbu_count\stable.
+D 2016-03-19T16:21:26.457
 F Makefile.in f53429fb2f313c099283659d0df6f20f932c861f
 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 F Makefile.msc df0bf9ff7f8b3f4dd9fb4cc43f92fe58f6ec5c66
@@ -238,11 +238,11 @@ F ext/rbu/rbuB.test c25bc325b8072a766e56bb76c001866b405925c2
 F ext/rbu/rbuC.test efe47db508a0269b683cb2a1913a425ffd39a831
 F ext/rbu/rbu_common.tcl 0398545fed614f807d5f0ba55a85a51f08ba8f1a
 F ext/rbu/rbucrash.test 8d2ed5d4b05fef6c00c2a6b5f7ead71fa172a695
-F ext/rbu/rbudiff.test 7f0fbf54912b9f8898819504c8465df12c970a00
+F ext/rbu/rbudiff.test 2df0a8a7d998ecf81764c21eeda3cde5611c5091
 F ext/rbu/rbufault.test cc0be8d5d392d98b0c2d6a51be377ea989250a89
 F ext/rbu/rbufault2.test 9a7f19edd6ea35c4c9f807d8a3db0a03a5670c06
 F ext/rbu/rbufts.test 828cd689da825f0a7b7c53ffc1f6f7fdb6fa5bda
-F ext/rbu/rbuprogress.test 9d2dfd82fc001f26997e36db256df31f2e19e133
+F ext/rbu/rbuprogress.test 2023a7df2c523e3df1cb532eff811cda385a789a
 F ext/rbu/rbusave.test 0f43b6686084f426ddd040b878426452fd2c2f48
 F ext/rbu/sqlite3rbu.c edeb8f90a1bccc567438036e083123cec1403091
 F ext/rbu/sqlite3rbu.h d7cc99350c10134f358fe1a8997d9225b3f712b2
@@ -1424,7 +1424,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
 F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
 F tool/speedtest8inst1.c 7ce07da76b5e745783e703a834417d725b7d45fd
 F tool/split-sqlite3c.tcl d9be87f1c340285a3e081eb19b4a247981ed290c
-F tool/sqldiff.c 0e9b76f9f4a72856d0384f5e0a038bbeb78dd222
+F tool/sqldiff.c ca315aca4e2d24233e8f2000edea5880c53d1875
 F tool/srcck1.c 4f65e1a6748e42f24c0ea629dddc934d821c729a
 F tool/stack_usage.tcl f8e71b92cdb099a147dad572375595eae55eca43
 F tool/symbols-mingw.sh 4dbcea7e74768305384c9fd2ed2b41bbf9f0414d
@@ -1457,7 +1457,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 65e02368e2b6cec349ea71af5a456d6783b0d15e 41c29c123ff347db720ed1a541c0b2ffc04670aa
-R 4672da949ef7e2ff98784ed13b0995da
+P 734fc68fb12f06e97026d4637138b82b37809f5b
+R 10d61b7fcae01138c8363988e8c8eb47
 U dan
-Z 877e0d37b31de9a8b8cab0dfbc82a372
+Z 3bf67face0611b0cfd47029621ad6bf5
index 5a343a598eed9a37c1acb09c063e5d33652c34f2..60d114711cb60f6ad900844e678490b839e3d001 100644 (file)
@@ -1 +1 @@
-734fc68fb12f06e97026d4637138b82b37809f5b
\ No newline at end of file
+1f7afb6e9be9f549a91bf2ab492df15698df89fd
\ No newline at end of file
index d2423a73baa1b9980155b91cb835a3f45f93dc99..319acafdbdf59fcfd7e52510f7ab971e850cf193 100644 (file)
@@ -1244,6 +1244,7 @@ static void rbudiff_one_table(const char *zTab, FILE *out){
   Str sql = {0, 0, 0};            /* Query to find differences */
   Str insert = {0, 0, 0};         /* First part of output INSERT statement */
   sqlite3_stmt *pStmt = 0;
+  int nRow = 0;                   /* Total rows in data_xxx table */
 
   /* --rbu mode must use real primary keys. */
   g.bSchemaPK = 1;
@@ -1289,6 +1290,7 @@ static void rbudiff_one_table(const char *zTab, FILE *out){
 
     /* Output the first part of the INSERT statement */
     fprintf(out, "%s", insert.z);
+    nRow++;
 
     if( sqlite3_column_type(pStmt, nCol)==SQLITE_INTEGER ){
       for(i=0; i<=nCol; i++){
@@ -1342,6 +1344,12 @@ static void rbudiff_one_table(const char *zTab, FILE *out){
   }
 
   sqlite3_finalize(pStmt);
+  if( nRow>0 ){
+    Str cnt = {0, 0, 0};
+    strPrintf(&cnt, "INSERT INTO rbu_count VALUES('data_%q', %d);", zTab, nRow);
+    fprintf(out, "%s\n", cnt.z);
+    strFree(&cnt);
+  }
 
   strFree(&ct);
   strFree(&sql);
@@ -1856,7 +1864,13 @@ int main(int argc, char **argv){
   }
 
   if( neverUseTransaction ) useTransaction = 0;
-  if( useTransaction ) printf("BEGIN TRANSACTION;\n");
+  if( useTransaction ) fprintf(out, "BEGIN TRANSACTION;\n");
+  if( xDiff==rbudiff_one_table ){
+    fprintf(out, "CREATE TABLE IF NOT EXISTS rbu_count"
+           "(tbl TEXT PRIMARY KEY COLLATE NOCASE, cnt INTEGER) "
+           "WITHOUT ROWID;\n"
+    );
+  }
   if( zTab ){
     xDiff(zTab, out);
   }else{