]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Add tests (and a fix) for large and small fts docid values with various languageid_bi...
authordan <dan@noemail.net>
Thu, 20 Jun 2013 11:48:02 +0000 (11:48 +0000)
committerdan <dan@noemail.net>
Thu, 20 Jun 2013 11:48:02 +0000 (11:48 +0000)
FossilOrigin-Name: 8dc261b765e580b100a3a9616ac540eedad345d5

ext/fts3/fts3.c
ext/fts3/fts3_write.c
manifest
manifest.uuid
test/fts4langid2.test

index 7a05371da4e1110d4ddfd578c3f1fc2106bf8e7b..272f371c64c98cd2fc18bf506fcc5708b7333985 100644 (file)
@@ -1303,7 +1303,7 @@ static int fts3InitVtab(
   zLanguageid = 0;
   if( zLanguageidBits && p->zLanguageid && p->zContentTbl==0 ){
     p->nLanguageidBits = atoi(zLanguageidBits);
-    if( p->nLanguageidBits>32 || p->nLanguageidBits<0 ){
+    if( p->nLanguageidBits>30 || p->nLanguageidBits<0 ){
       rc = SQLITE_ERROR;
       *pzErr = sqlite3_mprintf("languageid_bits parameter out of range");
       goto fts3_init_out;
index 0e2e5a50a44c656fe91d7f5954353194cec5cb39..3cc53bd658352de8f923c6b52b0ce765fcad20be 100644 (file)
@@ -5331,11 +5331,14 @@ int sqlite3Fts3UpdateMethod(
   ** the specified rowid value must be NULL.
   */
   if( nArg>1 ){
-    iLangid = sqlite3_value_int(apVal[2 + p->nColumn + 2]);
-    if( iLangid<0 || (p->nLanguageidBits && iLangid>=(1<<p->nLanguageidBits)) ){
+    i64 iLangid64 = sqlite3_value_int64(apVal[2 + p->nColumn + 2]);
+    if( iLangid64<0 
+     || (p->nLanguageidBits && iLangid64>=((i64)1<<p->nLanguageidBits)) 
+    ){
       rc = SQLITE_CONSTRAINT;
       goto update_out;
     }
+    iLangid = (int)iLangid64;
 
     if( p->nLanguageidBits 
      && sqlite3_value_type(apVal[0])==SQLITE_NULL
index 01a84429c7c772d0d7ad43f908512a615c9e8f73..ec9e8e240b0c17cf21335060a9de060c787e17e1 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\sfts\shandling\sof\sthe\scase\swhere\sboth\sa\srowid\sand\sdocid\sare\sspecified\sas\spart\sof\san\sinsert\sstatement.
-D 2013-06-20T11:01:33.052
+C Add\stests\s(and\sa\sfix)\sfor\slarge\sand\ssmall\sfts\sdocid\svalues\swith\svarious\slanguageid_bits\ssettings.
+D 2013-06-20T11:48:02.473
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in 5e41da95d92656a5004b03d3576e8b226858a28e
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -78,7 +78,7 @@ F ext/fts3/README.content fdc666a70d5257a64fee209f97cf89e0e6e32b51
 F ext/fts3/README.syntax a19711dc5458c20734b8e485e75fb1981ec2427a
 F ext/fts3/README.tokenizers e0a8b81383ea60d0334d274fadf305ea14a8c314
 F ext/fts3/README.txt 8c18f41574404623b76917b9da66fcb0ab38328d
-F ext/fts3/fts3.c 2d86f9b356b5e309fa68e20f6891b2ca1e694dc3
+F ext/fts3/fts3.c b0c6f122591ef6e8d77dedfc1db6b0facfac2223
 F ext/fts3/fts3.h 3a10a0af180d502cecc50df77b1b22df142817fe
 F ext/fts3/fts3Int.h 9bef3710aa94fc27b117eca41088aa29ed99d4f1
 F ext/fts3/fts3_aux.c b02632f6dd0e375ce97870206d914ea6d8df5ccd
@@ -96,7 +96,7 @@ F ext/fts3/fts3_tokenizer.h 64c6ef6c5272c51ebe60fc607a896e84288fcbc3
 F ext/fts3/fts3_tokenizer1.c 5c98225a53705e5ee34824087478cf477bdb7004
 F ext/fts3/fts3_unicode.c 92391b4b4fb043564c6539ea9b8661e3bcba47b9
 F ext/fts3/fts3_unicode2.c 0113d3acf13429e6dc38e0647d1bc71211c31a4d
-F ext/fts3/fts3_write.c dda9bec5dac9ecccbbd7b75a6b84bbef4729390c
+F ext/fts3/fts3_write.c 2ec89b83498449ded7b4b0eff18530793083c3ad
 F ext/fts3/fts3speed.tcl b54caf6a18d38174f1a6e84219950d85e98bb1e9
 F ext/fts3/mkfts3amal.tcl 252ecb7fe6467854f2aa237bf2c390b74e71f100
 F ext/fts3/tool/fts3view.c 6cfc5b67a5f0e09c0d698f9fd012c784bfaa9197
@@ -546,7 +546,7 @@ F test/fts4aa.test 95f448fb02c4a976968b08d1b4ce134e720946ae
 F test/fts4check.test 66fa274cab2b615f2fb338b257713aba8fad88a8
 F test/fts4content.test 6efc53b4fd03cab167e6998d2b0b7d4b7d419ee6
 F test/fts4langid.test 24a6e41063b416bbdf371ff6b4476fa41c194aa7
-F test/fts4langid2.test b0154b01099bf8703e3190634f025ca172aa4343
+F test/fts4langid2.test 7c46337ed5fae26b30ef14bb8047c086343832c3
 F test/fts4merge.test c424309743fdd203f8e56a1f1cd7872cd66cc0ee
 F test/fts4merge2.test 5faa558d1b672f82b847d2a337465fa745e46891
 F test/fts4merge3.test aab02a09f50fe6baaddc2e159c3eabc116d45fc7
@@ -1094,7 +1094,7 @@ F tool/vdbe-compress.tcl f12c884766bd14277f4fcedcae07078011717381
 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
 F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381
 F tool/win/sqlite.vsix 97894c2790eda7b5bce3cc79cb2a8ec2fde9b3ac
-P d36d7e68334c0685d1941dd0323b1a9c5c7368bf
-R dfef4213ce89e455482c58d3a554bae1
+P 610e7e9612abcbd072a42ab83bd75148a15065b8
+R cb3a5a54d66de37d154757df9c941cd7
 U dan
-Z 1d3d6ba1eef9e97fd3552fcd93577010
+Z 1d4a473ba21d934e41f2eaa5863b53f6
index dd16281c240635c4b921ad55e5ba35ce27e73596..db107208518ad855a07c6aec2ad43afeec3a995c 100644 (file)
@@ -1 +1 @@
-610e7e9612abcbd072a42ab83bd75148a15065b8
\ No newline at end of file
+8dc261b765e580b100a3a9616ac540eedad345d5
\ No newline at end of file
index e3f1ae896f597597e54340df0adfbf9d0f1d1315..fa4de1a81dfa57976e9eb71abbfbe7db24f26063 100644 (file)
@@ -27,7 +27,7 @@ ifcapable !fts3 {
 # Test out-of-range values for the languageid_bits= parameter.
 #
 do_catchsql_test 1.1 {
-  CREATE VIRTUAL TABLE t1 USING fts4(languageid=lid, languageid_bits=33);
+  CREATE VIRTUAL TABLE t1 USING fts4(languageid=lid, languageid_bits=31);
 } {1 {languageid_bits parameter out of range}}
 
 do_catchsql_test 1.2 {
@@ -36,7 +36,7 @@ do_catchsql_test 1.2 {
 
 do_catchsql_test 1.3 {
   CREATE VIRTUAL TABLE t1 USING fts4(languageid=lid, languageid_bits=0);
-  CREATE VIRTUAL TABLE t2 USING fts4(languageid=lid, languageid_bits=32);
+  CREATE VIRTUAL TABLE t2 USING fts4(languageid=lid, languageid_bits=30);
 } {0 {}}
 
 do_execsql_test 1.4 {
@@ -101,6 +101,7 @@ do_execsql_test 3.4 {
 }
 
 #-------------------------------------------------------------------------
+# Simple tests inserting data with multiple languageid values.
 #
 do_execsql_test 4.1 {
   CREATE VIRTUAL TABLE t1 USING fts4(languageid=lid, languageid_bits=5);
@@ -128,6 +129,73 @@ do_execsql_test 4.6 {
   SELECT docid, lid FROM t1;
 } {1 0 1 1}
 
+do_execsql_test 3.4 {
+  DROP TABLE t1;
+}
+
+#-------------------------------------------------------------------------
+# Tests for docid range boundary conditions. 
+#
+for {set bits 1} {$bits <= 30} {incr bits} {
+  do_execsql_test 5.$bits.1 "
+    CREATE VIRTUAL TABLE t1 USING fts4(languageid=lid, languageid_bits=$bits);
+  "
+
+  set max_docid [expr int(1<<(63-$bits))-1]
+  set min_docid [expr -1*int(1<<(63-$bits))]
+  set max_langid [expr (1<<$bits)-1]
+  set min_langid 0
+
+
+  do_catchsql_test 5.$bits.2.1 {
+    INSERT INTO t1(docid, lid, content) VALUES($max_docid+1, 4, '');
+  } {1 {constraint failed}}
+  do_catchsql_test 5.$bits.2.2 {
+    INSERT INTO t1(docid, lid, content) VALUES($min_docid-1, 4, '');
+  } {1 {constraint failed}}
+
+  do_test 5.$bits.3 {
+    foreach {a b c} "
+      $min_docid  $min_langid  {1 min min x}
+      $min_docid  $max_langid  {2 min max x}
+      $max_docid  $min_langid  {3 max min x}
+      $max_docid  $max_langid  {4 max max x}
+    " {
+      execsql { INSERT INTO t1(docid, lid, content) VALUES($a, $b, $c) }
+    }
+  } {}
+
+  do_execsql_test 5.$bits.4.1 {
+    SELECT docid, lid, content FROM t1 ORDER BY content
+  } "
+      $min_docid  $min_langid  {1 min min x}
+      $min_docid  $max_langid  {2 min max x}
+      $max_docid  $min_langid  {3 max min x}
+      $max_docid  $max_langid  {4 max max x}
+  "
+
+  do_execsql_test 5.$bits.4.2 {
+    SELECT docid, lid, content FROM t1 WHERE lid=$min_langid AND t1 MATCH 'x'
+  } "
+      $min_docid  $min_langid  {1 min min x}
+      $max_docid  $min_langid  {3 max min x}
+  "
+
+  do_execsql_test 5.$bits.4.3 {
+    SELECT docid, lid, content FROM t1 WHERE lid=$max_langid AND t1 MATCH 'x'
+  } "
+      $min_docid  $max_langid  {2 min max x}
+      $max_docid  $max_langid  {4 max max x}
+  "
+
+  do_execsql_test 5.$bits.4.4 {
+    SELECT docid, lid, content FROM t1 WHERE t1 MATCH '1'
+  } "
+      $min_docid  $min_langid  {1 min min x}
+  "
+
+  do_execsql_test 5.$bits.5 { DROP TABLE t1 }
+}
 
 finish_test