]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Add extra tests for fts with a non-zero languageid_bits setting. Fix querying by...
authordan <dan@noemail.net>
Thu, 20 Jun 2013 16:22:32 +0000 (16:22 +0000)
committerdan <dan@noemail.net>
Thu, 20 Jun 2013 16:22:32 +0000 (16:22 +0000)
FossilOrigin-Name: b1df00f3f1eecffbe6c56cdcbb922922314604a0

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

index 272f371c64c98cd2fc18bf506fcc5708b7333985..c433630998a0e446fcd97172270ff21810feb385 100644 (file)
@@ -1445,12 +1445,12 @@ static int fts3BestIndexMethod(sqlite3_vtab *pVTab, sqlite3_index_info *pInfo){
   pInfo->estimatedCost = 500000;
   for(i=0; i<pInfo->nConstraint; 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;
index ec9e8e240b0c17cf21335060a9de060c787e17e1..b49f91b8e3712b752b38d64baad0560962f00081 100644 (file)
--- 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
index db107208518ad855a07c6aec2ad43afeec3a995c..081614614eabb015c5513eeffd7ba8db4d7361cf 100644 (file)
@@ -1 +1 @@
-8dc261b765e580b100a3a9616ac540eedad345d5
\ No newline at end of file
+b1df00f3f1eecffbe6c56cdcbb922922314604a0
\ No newline at end of file
index fa4de1a81dfa57976e9eb71abbfbe7db24f26063..ad950ad78025ba4b2e8ec3de7d7b3df69e58c9f3 100644 (file)
@@ -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 {<b>one</b> 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 <b>one</b>}}
+
+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
 
index bc3ceb80855f619c1b1d5377ad857894d273edf4..86c19bac4f769b18eef923377938ffa546f5124c 100644 (file)
@@ -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
 }