From febfe0230097f4bc0f57edf1d626331b2cbc1bae Mon Sep 17 00:00:00 2001 From: dan Date: Sat, 19 Mar 2016 16:21:26 +0000 Subject: [PATCH] Update the sqldiff tool so that it generates an rbu_count table. FossilOrigin-Name: 1f7afb6e9be9f549a91bf2ab492df15698df89fd --- ext/rbu/rbudiff.test | 22 ++++++++++++++++++++++ ext/rbu/rbuprogress.test | 10 ++++++++++ manifest | 16 ++++++++-------- manifest.uuid | 2 +- tool/sqldiff.c | 16 +++++++++++++++- 5 files changed, 56 insertions(+), 10 deletions(-) diff --git a/ext/rbu/rbudiff.test b/ext/rbu/rbudiff.test index 0ebc0dad0f..0863f6e807 100644 --- a/ext/rbu/rbudiff.test +++ b/ext/rbu/rbudiff.test @@ -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 "" diff --git a/ext/rbu/rbuprogress.test b/ext/rbu/rbuprogress.test index 6e6c7faf61..6afbffe8ed 100644 --- a/ext/rbu/rbuprogress.test +++ b/ext/rbu/rbuprogress.test @@ -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 diff --git a/manifest b/manifest index c781c627e1..0d19f8488d 100644 --- 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 diff --git a/manifest.uuid b/manifest.uuid index 5a343a598e..60d114711c 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -734fc68fb12f06e97026d4637138b82b37809f5b \ No newline at end of file +1f7afb6e9be9f549a91bf2ab492df15698df89fd \ No newline at end of file diff --git a/tool/sqldiff.c b/tool/sqldiff.c index d2423a73ba..319acafdbd 100644 --- a/tool/sqldiff.c +++ b/tool/sqldiff.c @@ -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{