}
proc apply_rbudiff {sql target} {
+ test_rbucount $sql
forcedelete rbu.db
sqlite3 rbudb rbu.db
rbudb eval $sql
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 ""
}
{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
-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
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
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
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
-734fc68fb12f06e97026d4637138b82b37809f5b
\ No newline at end of file
+1f7afb6e9be9f549a91bf2ab492df15698df89fd
\ No newline at end of file
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;
/* 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++){
}
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);
}
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{