From: dan Date: Thu, 20 Jun 2013 11:48:02 +0000 (+0000) Subject: Add tests (and a fix) for large and small fts docid values with various languageid_bi... X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5c5f2f207c08ec1f1a2a931e1f5eb6d422e5217d;p=thirdparty%2Fsqlite.git Add tests (and a fix) for large and small fts docid values with various languageid_bits settings. FossilOrigin-Name: 8dc261b765e580b100a3a9616ac540eedad345d5 --- diff --git a/ext/fts3/fts3.c b/ext/fts3/fts3.c index 7a05371da4..272f371c64 100644 --- a/ext/fts3/fts3.c +++ b/ext/fts3/fts3.c @@ -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; diff --git a/ext/fts3/fts3_write.c b/ext/fts3/fts3_write.c index 0e2e5a50a4..3cc53bd658 100644 --- a/ext/fts3/fts3_write.c +++ b/ext/fts3/fts3_write.c @@ -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<nLanguageidBits)) ){ + i64 iLangid64 = sqlite3_value_int64(apVal[2 + p->nColumn + 2]); + if( iLangid64<0 + || (p->nLanguageidBits && iLangid64>=((i64)1<nLanguageidBits)) + ){ rc = SQLITE_CONSTRAINT; goto update_out; } + iLangid = (int)iLangid64; if( p->nLanguageidBits && sqlite3_value_type(apVal[0])==SQLITE_NULL diff --git a/manifest b/manifest index 01a84429c7..ec9e8e240b 100644 --- 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 diff --git a/manifest.uuid b/manifest.uuid index dd16281c24..db10720851 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -610e7e9612abcbd072a42ab83bd75148a15065b8 \ No newline at end of file +8dc261b765e580b100a3a9616ac540eedad345d5 \ No newline at end of file diff --git a/test/fts4langid2.test b/test/fts4langid2.test index e3f1ae896f..fa4de1a81d 100644 --- a/test/fts4langid2.test +++ b/test/fts4langid2.test @@ -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