mirror of
https://github.com/sqlite/sqlite.git
synced 2025-07-30 19:03:16 +03:00
Update the sqldiff tool so that it generates an rbu_count table.
FossilOrigin-Name: 1f7afb6e9be9f549a91bf2ab492df15698df89fd
This commit is contained in:
@ -36,6 +36,7 @@ proc step_rbu {target rbu} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
proc apply_rbudiff {sql target} {
|
proc apply_rbudiff {sql target} {
|
||||||
|
test_rbucount $sql
|
||||||
forcedelete rbu.db
|
forcedelete rbu.db
|
||||||
sqlite3 rbudb rbu.db
|
sqlite3 rbudb rbu.db
|
||||||
rbudb eval $sql
|
rbudb eval $sql
|
||||||
@ -43,6 +44,27 @@ proc apply_rbudiff {sql target} {
|
|||||||
step_rbu $target rbu.db
|
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} {
|
proc rbudiff_cksum {db1} {
|
||||||
set txt ""
|
set txt ""
|
||||||
|
|
||||||
|
@ -381,6 +381,16 @@ foreach {bReopen} { 0 1 } {
|
|||||||
}
|
}
|
||||||
{2500 4000 6000 8000 10000}
|
{2500 4000 6000 8000 10000}
|
||||||
{5000 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
|
reset_db ; execsql $tbl
|
||||||
|
16
manifest
16
manifest
@ -1,5 +1,5 @@
|
|||||||
C Merge\slatest\strunk\schanges,\sincluding\sfixes\sto\stest\sscript\srbudiff.test,\sinto\sthis\sbranch.
|
C Update\sthe\ssqldiff\stool\sso\sthat\sit\sgenerates\san\srbu_count\stable.
|
||||||
D 2016-03-19T15:34:42.291
|
D 2016-03-19T16:21:26.457
|
||||||
F Makefile.in f53429fb2f313c099283659d0df6f20f932c861f
|
F Makefile.in f53429fb2f313c099283659d0df6f20f932c861f
|
||||||
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
|
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
|
||||||
F Makefile.msc df0bf9ff7f8b3f4dd9fb4cc43f92fe58f6ec5c66
|
F Makefile.msc df0bf9ff7f8b3f4dd9fb4cc43f92fe58f6ec5c66
|
||||||
@ -238,11 +238,11 @@ F ext/rbu/rbuB.test c25bc325b8072a766e56bb76c001866b405925c2
|
|||||||
F ext/rbu/rbuC.test efe47db508a0269b683cb2a1913a425ffd39a831
|
F ext/rbu/rbuC.test efe47db508a0269b683cb2a1913a425ffd39a831
|
||||||
F ext/rbu/rbu_common.tcl 0398545fed614f807d5f0ba55a85a51f08ba8f1a
|
F ext/rbu/rbu_common.tcl 0398545fed614f807d5f0ba55a85a51f08ba8f1a
|
||||||
F ext/rbu/rbucrash.test 8d2ed5d4b05fef6c00c2a6b5f7ead71fa172a695
|
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/rbufault.test cc0be8d5d392d98b0c2d6a51be377ea989250a89
|
||||||
F ext/rbu/rbufault2.test 9a7f19edd6ea35c4c9f807d8a3db0a03a5670c06
|
F ext/rbu/rbufault2.test 9a7f19edd6ea35c4c9f807d8a3db0a03a5670c06
|
||||||
F ext/rbu/rbufts.test 828cd689da825f0a7b7c53ffc1f6f7fdb6fa5bda
|
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/rbusave.test 0f43b6686084f426ddd040b878426452fd2c2f48
|
||||||
F ext/rbu/sqlite3rbu.c edeb8f90a1bccc567438036e083123cec1403091
|
F ext/rbu/sqlite3rbu.c edeb8f90a1bccc567438036e083123cec1403091
|
||||||
F ext/rbu/sqlite3rbu.h d7cc99350c10134f358fe1a8997d9225b3f712b2
|
F ext/rbu/sqlite3rbu.h d7cc99350c10134f358fe1a8997d9225b3f712b2
|
||||||
@ -1424,7 +1424,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
|
|||||||
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
|
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
|
||||||
F tool/speedtest8inst1.c 7ce07da76b5e745783e703a834417d725b7d45fd
|
F tool/speedtest8inst1.c 7ce07da76b5e745783e703a834417d725b7d45fd
|
||||||
F tool/split-sqlite3c.tcl d9be87f1c340285a3e081eb19b4a247981ed290c
|
F tool/split-sqlite3c.tcl d9be87f1c340285a3e081eb19b4a247981ed290c
|
||||||
F tool/sqldiff.c 0e9b76f9f4a72856d0384f5e0a038bbeb78dd222
|
F tool/sqldiff.c ca315aca4e2d24233e8f2000edea5880c53d1875
|
||||||
F tool/srcck1.c 4f65e1a6748e42f24c0ea629dddc934d821c729a
|
F tool/srcck1.c 4f65e1a6748e42f24c0ea629dddc934d821c729a
|
||||||
F tool/stack_usage.tcl f8e71b92cdb099a147dad572375595eae55eca43
|
F tool/stack_usage.tcl f8e71b92cdb099a147dad572375595eae55eca43
|
||||||
F tool/symbols-mingw.sh 4dbcea7e74768305384c9fd2ed2b41bbf9f0414d
|
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.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
||||||
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
||||||
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
||||||
P 65e02368e2b6cec349ea71af5a456d6783b0d15e 41c29c123ff347db720ed1a541c0b2ffc04670aa
|
P 734fc68fb12f06e97026d4637138b82b37809f5b
|
||||||
R 4672da949ef7e2ff98784ed13b0995da
|
R 10d61b7fcae01138c8363988e8c8eb47
|
||||||
U dan
|
U dan
|
||||||
Z 877e0d37b31de9a8b8cab0dfbc82a372
|
Z 3bf67face0611b0cfd47029621ad6bf5
|
||||||
|
@ -1 +1 @@
|
|||||||
734fc68fb12f06e97026d4637138b82b37809f5b
|
1f7afb6e9be9f549a91bf2ab492df15698df89fd
|
@ -1244,6 +1244,7 @@ static void rbudiff_one_table(const char *zTab, FILE *out){
|
|||||||
Str sql = {0, 0, 0}; /* Query to find differences */
|
Str sql = {0, 0, 0}; /* Query to find differences */
|
||||||
Str insert = {0, 0, 0}; /* First part of output INSERT statement */
|
Str insert = {0, 0, 0}; /* First part of output INSERT statement */
|
||||||
sqlite3_stmt *pStmt = 0;
|
sqlite3_stmt *pStmt = 0;
|
||||||
|
int nRow = 0; /* Total rows in data_xxx table */
|
||||||
|
|
||||||
/* --rbu mode must use real primary keys. */
|
/* --rbu mode must use real primary keys. */
|
||||||
g.bSchemaPK = 1;
|
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 */
|
/* Output the first part of the INSERT statement */
|
||||||
fprintf(out, "%s", insert.z);
|
fprintf(out, "%s", insert.z);
|
||||||
|
nRow++;
|
||||||
|
|
||||||
if( sqlite3_column_type(pStmt, nCol)==SQLITE_INTEGER ){
|
if( sqlite3_column_type(pStmt, nCol)==SQLITE_INTEGER ){
|
||||||
for(i=0; i<=nCol; i++){
|
for(i=0; i<=nCol; i++){
|
||||||
@ -1342,6 +1344,12 @@ static void rbudiff_one_table(const char *zTab, FILE *out){
|
|||||||
}
|
}
|
||||||
|
|
||||||
sqlite3_finalize(pStmt);
|
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(&ct);
|
||||||
strFree(&sql);
|
strFree(&sql);
|
||||||
@ -1856,7 +1864,13 @@ int main(int argc, char **argv){
|
|||||||
}
|
}
|
||||||
|
|
||||||
if( neverUseTransaction ) useTransaction = 0;
|
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 ){
|
if( zTab ){
|
||||||
xDiff(zTab, out);
|
xDiff(zTab, out);
|
||||||
}else{
|
}else{
|
||||||
|
Reference in New Issue
Block a user