From: dan Date: Sat, 14 Nov 2009 23:50:11 +0000 (+0000) Subject: Fixes to fts3 integrity check code. X-Git-Tag: fts3-refactor~6 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4b4d4469f51633a92e180cace494cdbf65d106e7;p=thirdparty%2Fsqlite.git Fixes to fts3 integrity check code. FossilOrigin-Name: d3cae986ee1a176b1b015c3cebcd58ff0c3bdf92 --- diff --git a/manifest b/manifest index 2e3252322a..b44fdcdbbf 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Further\sOOM\stesting\sfor\sfts3\scode.\sAdd\sTcl\scode\simplementing\san\sintegrity-check\sfor\sfts3. -D 2009-11-14T11:41:01 +C Fixes\sto\sfts3\sintegrity\scheck\scode. +D 2009-11-14T23:50:11 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0 F Makefile.in 53f3dfa49f28ab5b80cb083fb7c9051e596bcfa1 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 @@ -187,7 +187,7 @@ F src/test_btree.c 47cd771250f09cdc6e12dda5bc71bc0b3abc96e2 F src/test_config.c 220a67047af393756f55760fdf442d935d0d88f3 F src/test_devsym.c de3c9af2bb9a8b1e44525c449e4ec3f88e3d4110 F src/test_func.c 1c94388a23d4a9e7cd62ec79d612d1bae2451fa2 -F src/test_hexio.c 160dba2ad21d164cade8fd6a12db0926ca574ac8 +F src/test_hexio.c 0853ca2986c0cad788eb322b747cc1cbc1f1d31b F src/test_init.c 5d624ffd0409d424cf9adbfe1f056b200270077c F src/test_intarray.c 25b3df15cca9ddb83927e002f4885d98a63bba0d F src/test_intarray.h 489edb9068bb926583445cb02589344961054207 @@ -375,7 +375,7 @@ F test/fts2q.test b2fbbe038b7a31a52a6079b215e71226d8c6a682 F test/fts2r.test b154c30b63061d8725e320fba1a39e2201cadd5e F test/fts2token.test d8070b241a15ff13592a9ae4a8b7c171af6f445a F test/fts3.test f4f380d3717493605270dfa3b0fa893ea0afb18d -F test/fts3_common.tcl 2a38db65c919b5aa7b88d9c204e19e3d66fd810a +F test/fts3_common.tcl c6493126a3847355c007bb36e0d15e496899aeb5 F test/fts3aa.test 5327d4c1d9b6c61021696746cc9a6cdc5bf159c0 F test/fts3ab.test 09aeaa162aee6513d9ff336b6932211008b9d1f9 F test/fts3ac.test 356280144a2c92aa7b11474afadfe62a437fcd69 @@ -772,7 +772,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f -P 30a92f1132801c7582007ee625c577ea2ac31cdf -R b57a3a365be0f7386d8b2b667cc40aff +P c27d46b33e8596b45c562c2742b05030e8899092 +R 4c52d9528d06bab9b6911bfc5621469d U dan -Z c9155f22386e8e971e228afde4beba2a +Z 07e55edf8ef0b4c5772a79580f9928fa diff --git a/manifest.uuid b/manifest.uuid index afc377a3c9..3392457c13 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -c27d46b33e8596b45c562c2742b05030e8899092 \ No newline at end of file +d3cae986ee1a176b1b015c3cebcd58ff0c3bdf92 \ No newline at end of file diff --git a/src/test_hexio.c b/src/test_hexio.c index 22b05898da..19da83d1d6 100644 --- a/src/test_hexio.c +++ b/src/test_hexio.c @@ -316,6 +316,19 @@ static int utf8_to_utf8( return TCL_OK; } +static int getFts3Varint(const char *p, sqlite_int64 *v){ + const unsigned char *q = (const unsigned char *) p; + sqlite_uint64 x = 0, y = 1; + while( (*q & 0x80) == 0x80 ){ + x += y * (*q++ & 0x7f); + y <<= 7; + } + x += y * (*q++); + *v = (sqlite_int64) x; + return (int) (q - (unsigned char *)p); +} + + /* ** USAGE: read_varint BLOB VARNAME ** @@ -339,7 +352,7 @@ static int read_varint( } zBlob = Tcl_GetByteArrayFromObj(objv[1], &nBlob); - nVal = sqlite3GetVarint(zBlob, (sqlite3_uint64 *)(&iVal)); + nVal = getFts3Varint(zBlob, (sqlite3_uint64 *)(&iVal)); Tcl_ObjSetVar2(interp, objv[2], 0, Tcl_NewWideIntObj(iVal), 0); Tcl_SetObjResult(interp, Tcl_NewIntObj(nVal)); return TCL_OK; diff --git a/test/fts3_common.tcl b/test/fts3_common.tcl index 90cbea15ff..a12ef4f72e 100644 --- a/test/fts3_common.tcl +++ b/test/fts3_common.tcl @@ -80,6 +80,10 @@ proc fts3_integrity_check {tbl} { } } + foreach key [array names C] { + #puts "$key -> $C($key)" + } + db eval "SELECT * FROM ${tbl}_content" E { set iCol 0 @@ -89,12 +93,17 @@ proc fts3_integrity_check {tbl} { set sql {SELECT fts3_tokenizer_test('simple', $c)} foreach {pos term dummy} [db one $sql] { - if {$C($iDoc,$iCol,$pos) != "$term"} { - set es "Error at docid=$iDoc col=$iCol pos=$pos. " - append es "Index has \"$C($iDoc,$iCol,$pos)\", document has \"$term\"" + if {![info exists C($iDoc,$iCol,$pos)]} { + set es "Error at docid=$iDoc col=$iCol pos=$pos. Index is missing" lappend errors $es + } else { + if {$C($iDoc,$iCol,$pos) != "$term"} { + set es "Error at docid=$iDoc col=$iCol pos=$pos. Index " + append es "has \"$C($iDoc,$iCol,$pos)\", document has \"$term\"" + lappend errors $es + } + unset C($iDoc,$iCol,$pos) } - unset C($iDoc,$iCol,$pos) } incr iCol } @@ -245,7 +254,7 @@ proc fts3_read2 {tbl where varname} { } else { db eval " SELECT block FROM ${tbl}_segments - WHERE blockid>=$start_block AND blockid<$leaves_end_block + WHERE blockid>=$start_block AND blockid<=$leaves_end_block ORDER BY blockid " { foreach {t d} [fts3_readleaf $block] { lappend a($t) $d }