]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fixes to fts3 integrity check code.
authordan <dan@noemail.net>
Sat, 14 Nov 2009 23:50:11 +0000 (23:50 +0000)
committerdan <dan@noemail.net>
Sat, 14 Nov 2009 23:50:11 +0000 (23:50 +0000)
FossilOrigin-Name: d3cae986ee1a176b1b015c3cebcd58ff0c3bdf92

manifest
manifest.uuid
src/test_hexio.c
test/fts3_common.tcl

index 2e3252322a497db807a5a4302e0ed17ede9a4f63..b44fdcdbbf1ac66976b480003f458bf9c31e13ed 100644 (file)
--- 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
index afc377a3c9ae9de85b604c4d25f4744fbe424611..3392457c13aa11b9fe18d62f14e4099ac79d4c84 100644 (file)
@@ -1 +1 @@
-c27d46b33e8596b45c562c2742b05030e8899092
\ No newline at end of file
+d3cae986ee1a176b1b015c3cebcd58ff0c3bdf92
\ No newline at end of file
index 22b05898daf52d02d4f9ff83b222ec65f33662f3..19da83d1d624e3404f33a7c67cf81034ba15cf08 100644 (file)
@@ -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;
index 90cbea15ff33d911c43671b37159fe9095eb0513..a12ef4f72ecf7df562c02a137644c9cbb9820c03 100644 (file)
@@ -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 }