Improve test coverage of fts3.c.

FossilOrigin-Name: 56b6432f8622d53ffd3a4d9a2244114f8531ed71
This commit is contained in:
dan 2009-12-09 14:39:41 +00:00
parent 6d67e33776
commit 18ff7fa6b4
7 changed files with 113 additions and 58 deletions

View File

@ -381,13 +381,9 @@ int sqlite3Fts3PutVarint(char *p, sqlite_int64 v){
int sqlite3Fts3GetVarint(const char *p, sqlite_int64 *v){ int sqlite3Fts3GetVarint(const char *p, sqlite_int64 *v){
const unsigned char *q = (const unsigned char *) p; const unsigned char *q = (const unsigned char *) p;
sqlite_uint64 x = 0, y = 1; sqlite_uint64 x = 0, y = 1;
while( (*q & 0x80) == 0x80 ){ while( (*q&0x80)==0x80 && q-(unsigned char *)p<FTS3_VARINT_MAX ){
x += y * (*q++ & 0x7f); x += y * (*q++ & 0x7f);
y <<= 7; y <<= 7;
if( q - (unsigned char *)p >= FTS3_VARINT_MAX ){ /* bad data */
assert( 0 );
return 0;
}
} }
x += y * (*q++); x += y * (*q++);
*v = (sqlite_int64) x; *v = (sqlite_int64) x;
@ -402,7 +398,6 @@ int sqlite3Fts3GetVarint32(const char *p, int *pi){
sqlite_int64 i; sqlite_int64 i;
int ret = sqlite3Fts3GetVarint(p, &i); int ret = sqlite3Fts3GetVarint(p, &i);
*pi = (int) i; *pi = (int) i;
assert( *pi==i );
return ret; return ret;
} }
@ -433,7 +428,7 @@ int sqlite3Fts3VarintLen(sqlite3_uint64 v){
** `mno` becomes mno ** `mno` becomes mno
*/ */
void sqlite3Fts3Dequote(char *z){ void sqlite3Fts3Dequote(char *z){
int quote; char quote;
int i, j; int i, j;
quote = z[0]; quote = z[0];
@ -444,19 +439,22 @@ void sqlite3Fts3Dequote(char *z){
case '[': quote = ']'; break; /* For MS SqlServer compatibility */ case '[': quote = ']'; break; /* For MS SqlServer compatibility */
default: return; default: return;
} }
for(i=1, j=0; z[i]; i++){
i = 1;
j = 0;
while( ALWAYS(z[i]) ){
if( z[i]==quote ){ if( z[i]==quote ){
if( z[i+1]==quote ){ if( z[i+1]==quote ){
z[j++] = (char)quote; z[j++] = quote;
i++; i += 2;
}else{ }else{
z[j++] = 0;
break; break;
} }
}else{ }else{
z[j++] = z[i]; z[j++] = z[i++];
} }
} }
z[j] = 0;
} }
static void fts3GetDeltaVarint(char **pp, sqlite3_int64 *pVal){ static void fts3GetDeltaVarint(char **pp, sqlite3_int64 *pVal){
@ -891,11 +889,15 @@ static int fts3CursorSeek(Fts3Cursor *pCsr){
if( SQLITE_ROW==sqlite3_step(pCsr->pStmt) ){ if( SQLITE_ROW==sqlite3_step(pCsr->pStmt) ){
return SQLITE_OK; return SQLITE_OK;
}else{ }else{
int rc; int rc = sqlite3_reset(pCsr->pStmt);
pCsr->isEof = 1; if( rc==SQLITE_OK ){
if( SQLITE_OK==(rc = sqlite3_reset(pCsr->pStmt)) ){ /* If no row was found and no error has occured, then the %_content
rc = SQLITE_ERROR; ** table is missing a row that is present in the full-text index.
** The data structures are corrupt.
*/
rc = SQLITE_CORRUPT;
} }
pCsr->isEof = 1;
return rc; return rc;
} }
}else{ }else{

View File

@ -280,7 +280,7 @@ int sqlite3Fts3ReadBlock(
sqlite3_bind_int64(pStmt, 1, iBlock); sqlite3_bind_int64(pStmt, 1, iBlock);
rc = sqlite3_step(pStmt); rc = sqlite3_step(pStmt);
if( rc!=SQLITE_ROW ){ if( rc!=SQLITE_ROW ){
return SQLITE_CORRUPT; return (rc==SQLITE_DONE ? SQLITE_CORRUPT : rc);
} }
*pnBlock = sqlite3_column_bytes(pStmt, 0); *pnBlock = sqlite3_column_bytes(pStmt, 0);

View File

@ -1,5 +1,5 @@
C Mark\sfts3ReallocOrFree\sand\sfts3InitVtab\sas\sstatic.\sTicket\s[ff44d82f3b]. C Improve\stest\scoverage\sof\sfts3.c.
D 2009-12-09T05:30:37 D 2009-12-09T14:39:41
F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
F Makefile.in c5827ead754ab32b9585487177c93bb00b9497b3 F Makefile.in c5827ead754ab32b9585487177c93bb00b9497b3
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
@ -56,7 +56,7 @@ F ext/fts2/mkfts2amal.tcl 974d5d438cb3f7c4a652639262f82418c1e4cff0
F ext/fts3/README.syntax a19711dc5458c20734b8e485e75fb1981ec2427a F ext/fts3/README.syntax a19711dc5458c20734b8e485e75fb1981ec2427a
F ext/fts3/README.tokenizers 998756696647400de63d5ba60e9655036cb966e9 F ext/fts3/README.tokenizers 998756696647400de63d5ba60e9655036cb966e9
F ext/fts3/README.txt 8c18f41574404623b76917b9da66fcb0ab38328d F ext/fts3/README.txt 8c18f41574404623b76917b9da66fcb0ab38328d
F ext/fts3/fts3.c cb9bd52e205b0f2f25fda5e166503f317f135731 F ext/fts3/fts3.c 6e24afa93ecb3395b0e9467ca2b44fa7f66f4fdc
F ext/fts3/fts3.h 3a10a0af180d502cecc50df77b1b22df142817fe F ext/fts3/fts3.h 3a10a0af180d502cecc50df77b1b22df142817fe
F ext/fts3/fts3Int.h 36f8e6d6fafa6d71a48e1810095e1e58fd55b199 F ext/fts3/fts3Int.h 36f8e6d6fafa6d71a48e1810095e1e58fd55b199
F ext/fts3/fts3_expr.c fcf6812dbfd9cb9a2cabaf50e741411794f83e7e F ext/fts3/fts3_expr.c fcf6812dbfd9cb9a2cabaf50e741411794f83e7e
@ -68,7 +68,7 @@ F ext/fts3/fts3_snippet.c 6c2eb6d872d66b2a9aa5663f2662e993f18a6496
F ext/fts3/fts3_tokenizer.c 3dc76eaea6b58ecfbe50135b8473aa668d712dcd F ext/fts3/fts3_tokenizer.c 3dc76eaea6b58ecfbe50135b8473aa668d712dcd
F ext/fts3/fts3_tokenizer.h 7ff73caa3327589bf6550f60d93ebdd1f6a0fb5c F ext/fts3/fts3_tokenizer.h 7ff73caa3327589bf6550f60d93ebdd1f6a0fb5c
F ext/fts3/fts3_tokenizer1.c 11a604a53cff5e8c28882727bf794e5252e5227b F ext/fts3/fts3_tokenizer1.c 11a604a53cff5e8c28882727bf794e5252e5227b
F ext/fts3/fts3_write.c 643be9c7b097f5ea8189cf6ed840edd59485c45f F ext/fts3/fts3_write.c c7d549ac5a2733d1d3004a784ad8387f5c65fc75
F ext/fts3/mkfts3amal.tcl 252ecb7fe6467854f2aa237bf2c390b74e71f100 F ext/fts3/mkfts3amal.tcl 252ecb7fe6467854f2aa237bf2c390b74e71f100
F ext/icu/README.txt 3b130aa66e7a681136f6add198b076a2f90d1e33 F ext/icu/README.txt 3b130aa66e7a681136f6add198b076a2f90d1e33
F ext/icu/icu.c 12e763d288d23b5a49de37caa30737b971a2f1e2 F ext/icu/icu.c 12e763d288d23b5a49de37caa30737b971a2f1e2
@ -326,7 +326,7 @@ F test/descidx3.test 3394ad4d089335cac743c36a14129d6d931c316f
F test/diskfull.test 0cede7ef9d8f415d9d3944005c76be7589bb5ebb F test/diskfull.test 0cede7ef9d8f415d9d3944005c76be7589bb5ebb
F test/distinctagg.test 1a6ef9c87a58669438fc771450d7a72577417376 F test/distinctagg.test 1a6ef9c87a58669438fc771450d7a72577417376
F test/e_fkey.test fd1fcf89badd5f2773d7ac04775b5ff3488eda17 F test/e_fkey.test fd1fcf89badd5f2773d7ac04775b5ff3488eda17
F test/e_fts3.test 3ad57e7b920c7dcfa373dc2ed2105f83e1cf69a6 F test/e_fts3.test 3acfdc1c363f245e6e251e067a5c375dd5e34731
F test/enc.test e54531cd6bf941ee6760be041dff19a104c7acea F test/enc.test e54531cd6bf941ee6760be041dff19a104c7acea
F test/enc2.test 6d91a5286f59add0cfcbb2d0da913b76f2242398 F test/enc2.test 6d91a5286f59add0cfcbb2d0da913b76f2242398
F test/enc3.test 5c550d59ff31dccdba5d1a02ae11c7047d77c041 F test/enc3.test 5c550d59ff31dccdba5d1a02ae11c7047d77c041
@ -377,7 +377,7 @@ F test/fts2q.test b2fbbe038b7a31a52a6079b215e71226d8c6a682
F test/fts2r.test b154c30b63061d8725e320fba1a39e2201cadd5e F test/fts2r.test b154c30b63061d8725e320fba1a39e2201cadd5e
F test/fts2token.test d8070b241a15ff13592a9ae4a8b7c171af6f445a F test/fts2token.test d8070b241a15ff13592a9ae4a8b7c171af6f445a
F test/fts3.test ae0433b09b12def08105640e57693726c4949338 F test/fts3.test ae0433b09b12def08105640e57693726c4949338
F test/fts3_common.tcl 31935839b1b601a5955572cb4e8060513c96bde0 F test/fts3_common.tcl 8f75c15fa4507d923a1c21152e2716d77dc74661
F test/fts3aa.test 5327d4c1d9b6c61021696746cc9a6cdc5bf159c0 F test/fts3aa.test 5327d4c1d9b6c61021696746cc9a6cdc5bf159c0
F test/fts3ab.test 09aeaa162aee6513d9ff336b6932211008b9d1f9 F test/fts3ab.test 09aeaa162aee6513d9ff336b6932211008b9d1f9
F test/fts3ac.test 356280144a2c92aa7b11474afadfe62a437fcd69 F test/fts3ac.test 356280144a2c92aa7b11474afadfe62a437fcd69
@ -402,7 +402,7 @@ F test/fts3expr.test 05dab77387801e4900009917bb18f556037d82da
F test/fts3expr2.test 18da930352e5693eaa163a3eacf96233b7290d1a F test/fts3expr2.test 18da930352e5693eaa163a3eacf96233b7290d1a
F test/fts3malloc.test d02ee86b21edd2b43044e0d6dfdcd26cb6efddcb F test/fts3malloc.test d02ee86b21edd2b43044e0d6dfdcd26cb6efddcb
F test/fts3near.test dc196dd17b4606f440c580d45b3d23aa975fd077 F test/fts3near.test dc196dd17b4606f440c580d45b3d23aa975fd077
F test/fts3rnd.test ec82795eb358b7a4d6ce79e764d8d55556197584 F test/fts3rnd.test 44fa7209327deabc3ca22e2ff7a293b0bd46c37f
F test/func.test af106ed834001738246d276659406823e35cde7b F test/func.test af106ed834001738246d276659406823e35cde7b
F test/func2.test 772d66227e4e6684b86053302e2d74a2500e1e0f F test/func2.test 772d66227e4e6684b86053302e2d74a2500e1e0f
F test/fuzz.test a4174c3009a3e2c2e14b31b364ebf7ddb49de2c9 F test/fuzz.test a4174c3009a3e2c2e14b31b364ebf7ddb49de2c9
@ -777,7 +777,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
P fdfdc777c59a108496c7381c8b267b38485e2c13 P a9038306c33c88120d8bef27209d8f0641c85c9b
R 3bbf1578efaf46ed0df1e1e874fb62b3 R db340fa6c4afcd8bc8679373cdbca6c1
U dan U dan
Z 73fc6e587a1afaf349e955a71f230978 Z eeb82c42887166b9ef7e8ca6456b81ff

View File

@ -1 +1 @@
a9038306c33c88120d8bef27209d8f0641c85c9b 56b6432f8622d53ffd3a4d9a2244114f8531ed71

View File

@ -37,6 +37,9 @@ proc error_test {tn sql result} {
uplevel [list do_error_test e_fts3-$tn $sql $result] uplevel [list do_error_test e_fts3-$tn $sql $result]
} }
if 1 {
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# The body of the following [foreach] block contains test cases to verify # The body of the following [foreach] block contains test cases to verify
# that the example code in fts3.html works as expected. The tests run three # that the example code in fts3.html works as expected. The tests run three
@ -587,10 +590,13 @@ read_test 7.3.4 {
SELECT * FROM t7, t8 WHERE a MATCH 'number' AND b MATCH 'letter' SELECT * FROM t7, t8 WHERE a MATCH 'number' AND b MATCH 'letter'
} {{number four} {letter D} {number four} {letter E} {number five} {letter D} {number five} {letter E}} } {{number four} {letter D} {number four} {letter E} {number five} {letter D} {number five} {letter E}}
}
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# Test the quoting of FTS3 table column names. Names may be quoted using # Test the quoting of FTS3 table column names. Names may be quoted using
# any of "", '', ``` or []. # any of "", '', ``` or [].
# #
set DO_MALLOC_TEST 0
ddl_test 8.1.1 { CREATE VIRTUAL TABLE t9a USING fts3("c1", [c2]) } ddl_test 8.1.1 { CREATE VIRTUAL TABLE t9a USING fts3("c1", [c2]) }
ddl_test 8.1.2 { CREATE VIRTUAL TABLE t9b USING fts3('c1', `c2`) } ddl_test 8.1.2 { CREATE VIRTUAL TABLE t9b USING fts3('c1', `c2`) }
read_test 8.1.3 { PRAGMA table_info(t9a) } {0 c1 {} 0 {} 0 1 c2 {} 0 {} 0} read_test 8.1.3 { PRAGMA table_info(t9a) } {0 c1 {} 0 {} 0 1 c2 {} 0 {} 0}
@ -629,6 +635,46 @@ foreach DO_MALLOC_TEST {0 1 2} {
SELECT * FROM t11 WHERE x MATCH 'rename*' SELECT * FROM t11 WHERE x MATCH 'rename*'
} {{are renameable}} } {{are renameable}}
} }
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
# Test a couple of cases involving corrupt data structures:
#
# 1) A case where a document referenced by the full-text index is
# not present in the %_content table.
#
# 2) A badly formatted b-tree segment node.
#
set DO_MALLOC_TEST 0
ddl_test 10.1.1 { CREATE VIRTUAL TABLE ta USING fts3 }
write_test 10.1.2 ta_content {
INSERT INTO ta VALUES('During a summer vacation in 1790') }
write_test 10.1.3 ta_content {
INSERT INTO ta VALUES('Wordsworth went on a walking tour') }
write_test 10.1.4 ta_content { DELETE FROM ta_content WHERE rowid = 2 }
read_test 10.1.5 {
SELECT * FROM ta WHERE ta MATCH 'summer'
} {{During a summer vacation in 1790}}
error_test 10.1.6 {
SELECT * FROM ta WHERE ta MATCH 'walking'
} {database disk image is malformed}
write_test 10.2.1 ta_content { DELETE FROM ta }
write_test 10.2.2 ta_content {
INSERT INTO ta VALUES('debate demonstrated the rising difficulty') }
write_test 10.2.3 ta_content {
INSERT INTO ta VALUES('Google released its browser beta') }
set blob [db one {SELECT root FROM ta_segdir WHERE rowid = 2}]
binary scan $blob "a6 a3 a*" start middle end
set middle "\x0E\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x06\x06"
set blob [binary format "a6 a* a*" $start $middle $end]
write_test 10.2.4 ta_segdir {
UPDATE ta_segdir SET root = $blob WHERE rowid = 2
}
error_test 10.2.5 {
SELECT * FROM ta WHERE ta MATCH 'beta'
} {database disk image is malformed}
finish_test finish_test

View File

@ -310,11 +310,11 @@ proc fts3_read {tbl where varname} {
# match the expected results passed via parameter $result. # match the expected results passed via parameter $result.
# #
proc do_select_test {name sql result} { proc do_select_test {name sql result} {
doPassiveTest $name $sql [list 0 $result] uplevel [list doPassiveTest $name $sql [list 0 $result]]
} }
proc do_error_test {name sql error} { proc do_error_test {name sql error} {
doPassiveTest $name $sql [list 1 $error] uplevel [list doPassiveTest $name $sql [list 1 $error]]
} }
proc doPassiveTest {name sql catchres} { proc doPassiveTest {name sql catchres} {
@ -333,7 +333,7 @@ proc doPassiveTest {name sql catchres} {
for {set iFail 1} 1 {incr iFail} { for {set iFail 1} 1 {incr iFail} {
if {$::DO_MALLOC_TEST} {sqlite3_memdebug_fail $iFail -repeat $nRepeat} if {$::DO_MALLOC_TEST} {sqlite3_memdebug_fail $iFail -repeat $nRepeat}
set res [catchsql $sql] set res [uplevel [list catchsql $sql]]
if {[lsearch -exact $answers $res]>=0} { if {[lsearch -exact $answers $res]>=0} {
set res $str set res $str
} }

View File

@ -148,7 +148,14 @@ foreach nodesize {50 500 1000 2000} {
for {set i 0} {$i < 100} {incr i} { insert_row $i } for {set i 0} {$i < 100} {incr i} { insert_row $i }
} }
for {set iTest 1} {$iTest <= 100} {incr iTest} { for {set iTest 0} {$iTest <= 100} {incr iTest} {
set DO_MALLOC_TEST 0
set nRep 10
if {$iTest==100 && $nodesize==50} {
set DO_MALLOC_TEST 1
set nRep 2
}
# Delete one row, update one row and insert one row. # Delete one row, update one row and insert one row.
# #
@ -176,8 +183,8 @@ foreach nodesize {50 500 1000 2000} {
# #
for {set i 0} {$i < 10} {incr i} { for {set i 0} {$i < 10} {incr i} {
set term [random_term] set term [random_term]
do_test fts3rnd-1.$nodesize.$iTest.1.$i { do_select_test fts3rnd-1.$nodesize.$iTest.1.$i {
execsql { SELECT docid FROM t1 WHERE t1 MATCH $term } SELECT docid FROM t1 WHERE t1 MATCH $term
} [simple_phrase $term] } [simple_phrase $term]
} }
@ -185,66 +192,66 @@ foreach nodesize {50 500 1000 2000} {
# to query for. Test that querying the Tcl array produces the same results # to query for. Test that querying the Tcl array produces the same results
# as querying the FTS3 table for the prefix. # as querying the FTS3 table for the prefix.
# #
for {set i 0} {$i < 10} {incr i} { for {set i 0} {$i < $nRep} {incr i} {
set prefix [string range [random_term] 0 1] set prefix [string range [random_term] 0 1]
set match "${prefix}*" set match "${prefix}*"
do_test fts3rnd-1.$nodesize.$iTest.2.$i { do_select_test fts3rnd-1.$nodesize.$iTest.2.$i {
execsql { SELECT docid FROM t1 WHERE t1 MATCH $match } SELECT docid FROM t1 WHERE t1 MATCH $match
} [simple_phrase $match] } [simple_phrase $match]
} }
# Similar to the above, except for phrase queries. # Similar to the above, except for phrase queries.
# #
for {set i 0} {$i < 10} {incr i} { for {set i 0} {$i < $nRep} {incr i} {
set term [list [random_term] [random_term]] set term [list [random_term] [random_term]]
set match "\"$term\"" set match "\"$term\""
do_test fts3rnd-1.$nodesize.$iTest.3.$i { do_select_test fts3rnd-1.$nodesize.$iTest.3.$i {
execsql { SELECT docid FROM t1 WHERE t1 MATCH $match } SELECT docid FROM t1 WHERE t1 MATCH $match
} [simple_phrase $term] } [simple_phrase $term]
} }
# Three word phrases. # Three word phrases.
# #
for {set i 0} {$i < 10} {incr i} { for {set i 0} {$i < $nRep} {incr i} {
set term [list [random_term] [random_term] [random_term]] set term [list [random_term] [random_term] [random_term]]
set match "\"$term\"" set match "\"$term\""
do_test fts3rnd-1.$nodesize.$iTest.4.$i { do_select_test fts3rnd-1.$nodesize.$iTest.4.$i {
execsql { SELECT docid FROM t1 WHERE t1 MATCH $match } SELECT docid FROM t1 WHERE t1 MATCH $match
} [simple_phrase $term] } [simple_phrase $term]
} }
# Three word phrases made up of term-prefixes. # Three word phrases made up of term-prefixes.
# #
for {set i 0} {$i < 10} {incr i} { for {set i 0} {$i < $nRep} {incr i} {
set query "[string range [random_term] 0 1]* " set query "[string range [random_term] 0 1]* "
append query "[string range [random_term] 0 1]* " append query "[string range [random_term] 0 1]* "
append query "[string range [random_term] 0 1]*" append query "[string range [random_term] 0 1]*"
set match "\"$query\"" set match "\"$query\""
do_test fts3rnd-1.$nodesize.$iTest.5.$i { do_select_test fts3rnd-1.$nodesize.$iTest.5.$i {
execsql { SELECT docid FROM t1 WHERE t1 MATCH $match } SELECT docid FROM t1 WHERE t1 MATCH $match
} [simple_phrase $query] } [simple_phrase $query]
} }
# A NEAR query with terms as the arguments. # A NEAR query with terms as the arguments.
# #
for {set i 0} {$i < 10} {incr i} { for {set i 0} {$i < $nRep} {incr i} {
set terms [list [random_term] [random_term]] set terms [list [random_term] [random_term]]
set match [join $terms " NEAR "] set match [join $terms " NEAR "]
do_test fts3rnd-1.$nodesize.$iTest.6.$i { do_select_test fts3rnd-1.$nodesize.$iTest.6.$i {
execsql { SELECT docid FROM t1 WHERE t1 MATCH $match } SELECT docid FROM t1 WHERE t1 MATCH $match
} [simple_near $terms 10] } [simple_near $terms 10]
} }
# A 3-way NEAR query with terms as the arguments. # A 3-way NEAR query with terms as the arguments.
# #
for {set i 0} {$i < 10} {incr i} { for {set i 0} {$i < $nRep} {incr i} {
set terms [list [random_term] [random_term] [random_term]] set terms [list [random_term] [random_term] [random_term]]
set nNear 11 set nNear 11
set match [join $terms " NEAR/$nNear "] set match [join $terms " NEAR/$nNear "]
set fts3 [execsql { SELECT docid FROM t1 WHERE t1 MATCH $match }] set fts3 [execsql { SELECT docid FROM t1 WHERE t1 MATCH $match }]
do_test fts3rnd-1.$nodesize.$iTest.7.$i { do_select_test fts3rnd-1.$nodesize.$iTest.7.$i {
execsql { SELECT docid FROM t1 WHERE t1 MATCH $match } SELECT docid FROM t1 WHERE t1 MATCH $match
} [simple_near $terms $nNear] } [simple_near $terms $nNear]
} }
@ -255,12 +262,12 @@ foreach nodesize {50 500 1000 2000} {
9 NOT setop_not 9 NOT setop_not
10 AND setop_and 10 AND setop_and
} { } {
for {set i 0} {$i < 10} {incr i} { for {set i 0} {$i < $nRep} {incr i} {
set term1 [random_term] set term1 [random_term]
set term2 [random_term] set term2 [random_term]
set match "$term1 $op $term2" set match "$term1 $op $term2"
do_test fts3rnd-1.$nodesize.$iTest.$tn.$i { do_select_test fts3rnd-1.$nodesize.$iTest.$tn.$i {
execsql { SELECT docid FROM t1 WHERE t1 MATCH $match } SELECT docid FROM t1 WHERE t1 MATCH $match
} [$proc [simple_phrase $term1] [simple_phrase $term2]] } [$proc [simple_phrase $term1] [simple_phrase $term2]]
} }
} }
@ -272,14 +279,14 @@ foreach nodesize {50 500 1000 2000} {
9 NOT setop_not 9 NOT setop_not
10 AND setop_and 10 AND setop_and
} { } {
for {set i 0} {$i < 10} {incr i} { for {set i 0} {$i < $nRep} {incr i} {
set term1 [random_term] set term1 [random_term]
set term2 [random_term] set term2 [random_term]
set term3 [random_term] set term3 [random_term]
set term4 [random_term] set term4 [random_term]
set match "$term1 NEAR $term2 $op $term3 NEAR $term4" set match "$term1 NEAR $term2 $op $term3 NEAR $term4"
do_test fts3rnd-1.$nodesize.$iTest.$tn.$i { do_select_test fts3rnd-1.$nodesize.$iTest.$tn.$i {
execsql { SELECT docid FROM t1 WHERE t1 MATCH $match } SELECT docid FROM t1 WHERE t1 MATCH $match
} [$proc \ } [$proc \
[simple_near [list $term1 $term2] 10] \ [simple_near [list $term1 $term2] 10] \
[simple_near [list $term3 $term4] 10] [simple_near [list $term3 $term4] 10]