From: dan Date: Thu, 20 Jun 2013 16:22:32 +0000 (+0000) Subject: Add extra tests for fts with a non-zero languageid_bits setting. Fix querying by... X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e5936ba5451d2175b67d18dbc3dfea91dbc6ebc5;p=thirdparty%2Fsqlite.git Add extra tests for fts with a non-zero languageid_bits setting. Fix querying by docid with the same. FossilOrigin-Name: b1df00f3f1eecffbe6c56cdcbb922922314604a0 --- diff --git a/ext/fts3/fts3.c b/ext/fts3/fts3.c index 272f371c64..c433630998 100644 --- a/ext/fts3/fts3.c +++ b/ext/fts3/fts3.c @@ -1445,12 +1445,12 @@ static int fts3BestIndexMethod(sqlite3_vtab *pVTab, sqlite3_index_info *pInfo){ pInfo->estimatedCost = 500000; for(i=0; inConstraint; i++){ struct sqlite3_index_constraint *pCons = &pInfo->aConstraint[i]; + int iCol = pCons->iColumn; if( pCons->usable==0 ) continue; /* A direct lookup on the rowid or docid column. Assign a cost of 1.0. */ - if( iCons<0 - && pCons->op==SQLITE_INDEX_CONSTRAINT_EQ - && (pCons->iColumn<0 || pCons->iColumn==p->nColumn+1 ) + if( iCons<0 && pCons->op==SQLITE_INDEX_CONSTRAINT_EQ + && (iCol<0 || (iCol==p->nColumn+1 && p->nLanguageidBits==0)) ){ pInfo->idxNum = FTS3_DOCID_SEARCH; pInfo->estimatedCost = 1.0; diff --git a/manifest b/manifest index ec9e8e240b..b49f91b8e3 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -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 +C Add\sextra\stests\sfor\sfts\swith\sa\snon-zero\slanguageid_bits\ssetting.\sFix\squerying\sby\sdocid\swith\sthe\ssame. +D 2013-06-20T16:22:32.207 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 b0c6f122591ef6e8d77dedfc1db6b0facfac2223 +F ext/fts3/fts3.c 6b8ca2c8e5ebcf8735b3adf023d2ac15bd21b5e1 F ext/fts3/fts3.h 3a10a0af180d502cecc50df77b1b22df142817fe F ext/fts3/fts3Int.h 9bef3710aa94fc27b117eca41088aa29ed99d4f1 F ext/fts3/fts3_aux.c b02632f6dd0e375ce97870206d914ea6d8df5ccd @@ -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 7c46337ed5fae26b30ef14bb8047c086343832c3 +F test/fts4langid2.test b47f67ab68165f4b0df864fa5b01dbaadf27d3aa F test/fts4merge.test c424309743fdd203f8e56a1f1cd7872cd66cc0ee F test/fts4merge2.test 5faa558d1b672f82b847d2a337465fa745e46891 F test/fts4merge3.test aab02a09f50fe6baaddc2e159c3eabc116d45fc7 @@ -707,7 +707,7 @@ F test/pagesize.test 1dd51367e752e742f58e861e65ed7390603827a0 F test/pcache.test 065aa286e722ab24f2e51792c1f093bf60656b16 F test/pcache2.test a83efe2dec0d392f814bfc998def1d1833942025 F test/percentile.test 4614301e38398df7fdd5f28f4ed8f272b328251b -F test/permutations.test d997a947ab8aabb15f763d50a030b3c11e8ef1b6 +F test/permutations.test 5a937ed83e743c260ea9b483c007feb425935bc2 F test/pragma.test 5e7de6c32a5d764f09437d2025f07e4917b9e178 F test/pragma2.test 3a55f82b954242c642f8342b17dffc8b47472947 F test/printf.test ec9870c4dce8686a37818e0bf1aba6e6a1863552 @@ -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 610e7e9612abcbd072a42ab83bd75148a15065b8 -R cb3a5a54d66de37d154757df9c941cd7 +P 8dc261b765e580b100a3a9616ac540eedad345d5 +R 96376b97c43805db6a89e9bae52eb324 U dan -Z 1d4a473ba21d934e41f2eaa5863b53f6 +Z a4533c64fd67c7a7ea0a81d6fa76cdd1 diff --git a/manifest.uuid b/manifest.uuid index db10720851..081614614e 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -8dc261b765e580b100a3a9616ac540eedad345d5 \ No newline at end of file +b1df00f3f1eecffbe6c56cdcbb922922314604a0 \ No newline at end of file diff --git a/test/fts4langid2.test b/test/fts4langid2.test index fa4de1a81d..ad950ad780 100644 --- a/test/fts4langid2.test +++ b/test/fts4langid2.test @@ -197,5 +197,103 @@ for {set bits 1} {$bits <= 30} {incr bits} { do_execsql_test 5.$bits.5 { DROP TABLE t1 } } +#------------------------------------------------------------------------- +# Tests for auxilliary functions with langaugeid_bits tables. +# +proc mit {blob} { + set scan(littleEndian) i* + set scan(bigEndian) I* + binary scan $blob $scan($::tcl_platform(byteOrder)) r + return $r +} +db func mit mit + +do_execsql_test 6.1 { + CREATE VIRTUAL TABLE t1 USING fts4(languageid_bits=4, languageid=lid); + INSERT INTO t1(docid,lid,content) VALUES(1, 1, 'one two three four'); + INSERT INTO t1(docid,lid,content) VALUES(2, 1, 'two three four five'); + INSERT INTO t1(docid,lid,content) VALUES(3, 1, 'three four five six'); + INSERT INTO t1(docid,lid,content) VALUES(4, 1, 'four five six seven'); + + INSERT INTO t1(docid,lid,content) VALUES(1, 2, 'four three two one'); + INSERT INTO t1(docid,lid,content) VALUES(2, 2, 'five four three two'); + INSERT INTO t1(docid,lid,content) VALUES(3, 2, 'six five four three'); + INSERT INTO t1(docid,lid,content) VALUES(4, 2, 'A B C D'); +} + +do_execsql_test 6.2.1 { + SELECT docid, snippet(t1) FROM t1 WHERE t1 MATCH 'one' AND lid=1; +} {1 {one two three four}} +do_execsql_test 6.2.2 { + SELECT docid, snippet(t1) FROM t1 WHERE t1 MATCH 'one' AND lid=2; +} {1 {four three two one}} + +do_execsql_test 6.2.1 { + SELECT docid, offsets(t1) FROM t1 WHERE t1 MATCH 'two' AND lid=1; +} {1 {0 0 4 3} 2 {0 0 0 3}} +do_execsql_test 6.2.2 { + SELECT docid, offsets(t1) FROM t1 WHERE t1 MATCH 'two' AND lid=2; +} {1 {0 0 11 3} 2 {0 0 16 3}} + +do_execsql_test 6.3.1 { + SELECT docid, mit(matchinfo(t1)) FROM t1 WHERE t1 MATCH 'two' AND lid=1; +} {1 {1 1 1 2 2} 2 {1 1 1 2 2}} +do_execsql_test 6.3.2 { + SELECT docid, mit(matchinfo(t1)) FROM t1 WHERE t1 MATCH 'two' AND lid=2; +} {1 {1 1 1 2 2} 2 {1 1 1 2 2}} +do_execsql_test 6.3.3 { + SELECT docid, mit(matchinfo(t1)) FROM t1 WHERE t1 MATCH 'B' AND lid=1; +} {} +do_execsql_test 6.3.4 { + SELECT docid, mit(matchinfo(t1)) FROM t1 WHERE t1 MATCH 'B' AND lid=2; +} {4 {1 1 1 1 1}} + +do_execsql_test 6.4 { + CREATE VIRTUAL TABLE t2 USING fts4(languageid_bits=1, languageid=lid); + INSERT INTO t1(docid,lid,content) VALUES(-1, 0, 'A B C D'); + INSERT INTO t1(docid,lid,content) VALUES(-2, 0, 'D C B A'); + INSERT INTO t1(docid,lid,content) VALUES(-3, 0, 'C B D A'); + INSERT INTO t1(docid,lid,content) VALUES(-4, 0, 'A D B C'); + + INSERT INTO t1(docid,lid,content) VALUES(-1, 1, 'A A A A'); + INSERT INTO t1(docid,lid,content) VALUES(-2, 1, 'B B B B'); + INSERT INTO t1(docid,lid,content) VALUES(-3, 1, 'C C C C'); + INSERT INTO t1(docid,lid,content) VALUES(-4, 1, 'D D D D'); +} + +do_execsql_test 6.4.1 { + SELECT docid, mit(matchinfo(t1)) FROM t1 WHERE t1 MATCH 'B'; +} { + -4 {1 1 1 4 4} + -3 {1 1 1 4 4} + -2 {1 1 1 4 4} + -1 {1 1 1 4 4} +} +do_execsql_test 6.4.2 { + SELECT docid, mit(matchinfo(t1)) FROM t1 WHERE t1 MATCH 'B' AND lid=1; +} {-2 {1 1 4 4 1}} + +do_execsql_test 6.5 { + DROP TABLE t1; + DROP TABLE t2; +} + +#------------------------------------------------------------------------- +# Tests for querying by docid. +# + +do_execsql_test 7.1 { + CREATE VIRTUAL TABLE t1 USING fts4(languageid_bits=8, languageid=lid); + INSERT INTO t1(docid,lid,content) VALUES(10, 10, 'abc def'); +} + +do_execsql_test 7.2 { + SELECT docid,lid,content FROM t1 WHERE docid=10; +} {10 10 {abc def}} + + + + + finish_test diff --git a/test/permutations.test b/test/permutations.test index bc3ceb8085..86c19bac4f 100644 --- a/test/permutations.test +++ b/test/permutations.test @@ -193,7 +193,8 @@ test_suite "fts3" -prefix "" -description { fts3aux1.test fts3comp1.test fts3auto.test fts4aa.test fts4content.test fts3conf.test fts3prefix.test fts3fault2.test fts3corrupt.test - fts3corrupt2.test fts3first.test fts4langid.test fts4merge.test + fts3corrupt2.test fts3first.test fts4langid.test fts4langid2.test + fts4merge.test fts4check.test fts4unicode.test }