iOff>=0;
pApi->xPhraseNext(pFts, &iter, &iCol, &iOff)
){
- if( f=='b' ){
- aOut[iPhrase * ((p->nCol+31)/32) + iCol/32] |= ((u32)1 << iCol%32);
- }else{
- aOut[nMul * (iCol + iPhrase * p->nCol)]++;
- }
+ aOut[nMul * (iCol + iPhrase * p->nCol)]++;
}
}
**
** Also check that the fts5_api object is version 2 or newer.
*/
- if( pApi==0 || pApi->iVersion<1 ){
+ if( pApi==0 || pApi->iVersion<2 ){
return SQLITE_ERROR;
}
--- /dev/null
+# 2016 February 17
+#
+# The author disclaims copyright to this source code. In place of
+# a legal notice, here is a blessing:
+#
+# May you do good and not evil.
+# May you find forgiveness for yourself and forgive others.
+# May you share freely, never taking more than you give.
+#
+#*************************************************************************
+#
+# This file is focused on OOM errors.
+#
+
+source [file join [file dirname [info script]] fts5_common.tcl]
+source $testdir/malloc_common.tcl
+set testprefix fts5faultB
+
+# If SQLITE_ENABLE_FTS3 is defined, omit this file.
+ifcapable !fts5 {
+ finish_test
+ return
+}
+
+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
+
+
+#-------------------------------------------------------------------------
+# Errors while registering the matchinfo() demo function.
+#
+do_faultsim_test 1 -faults oom* -prep {
+ sqlite3 db test.db
+} -body {
+ sqlite3_fts5_register_matchinfo db
+} -test {
+ faultsim_test_result {0 {}} {1 SQLITE_ERROR} {1 SQLITE_NOMEM}
+}
+
+
+#-------------------------------------------------------------------------
+# Errors while executing the matchinfo() demo function.
+#
+reset_db
+sqlite3_fts5_register_matchinfo db
+db func mit mit
+do_execsql_test 2 {
+ CREATE VIRTUAL TABLE t1 USING fts5(a, b);
+ INSERT INTO t1 VALUES('x y z', '1 2 3');
+ INSERT INTO t1 VALUES('x', '1 2 3 4 5 6 7');
+}
+
+do_faultsim_test 2.1 -faults oom* -body {
+ execsql { SELECT mit(matchinfo(t1, 'a')) FROM t1('x') }
+} -test {
+ faultsim_test_result {0 {{2 5} {2 5}}}
+}
+
+do_faultsim_test 2.2 -faults oom* -body {
+ execsql { SELECT mit(matchinfo(t1, 'l')) FROM t1('x') }
+} -test {
+ faultsim_test_result {0 {{3 3} {1 7}}}
+}
+
+do_execsql_test 2.3 {
+ INSERT INTO t1 VALUES('a b c d e f', 'a b d e f c');
+ INSERT INTO t1 VALUES('l m b c a', 'n o a b c z');
+}
+
+do_faultsim_test 2.4 -faults oom* -body {
+ execsql { SELECT mit(matchinfo(t1, 's')) FROM t1('a b c') }
+} -test {
+ faultsim_test_result {0 {{3 2} {2 3}}}
+}
+
+
+finish_test
+
} ;# foreach_detail_mode
+#-------------------------------------------------------------------------
+# Test that a bad fts5() return is detected
+#
+reset_db
+proc xyz {} {}
+db func fts5 -argcount 0 xyz
+do_test 13.1 {
+ list [catch { sqlite3_fts5_register_matchinfo db } msg] $msg
+} {1 SQLITE_ERROR}
+
+#-------------------------------------------------------------------------
+# Test that an invalid matchinfo() flag is detected
+#
+reset_db
+sqlite3_fts5_register_matchinfo db
+do_execsql_test 14.1 {
+ CREATE VIRTUAL TABLE x1 USING fts5(z);
+ INSERT INTO x1 VALUES('a b c a b c a b c');
+} {}
+
+do_catchsql_test 14.2 {
+ SELECT matchinfo(x1, 'd') FROM x1('a b c');
+} {1 {unrecognized matchinfo flag: d}}
+
finish_test
-C Enhance\sLemon\sto\sgenerate\smore\scompact\sand\sefficient\scode\sfor\syy_reduce().\nUpdate\sthe\smain\sSQL\sgrammar\sto\stake\sadvantage\sof\sthe\snew\scapabilities.
-D 2016-02-17T13:24:12.055
+C Improve\stest\scoverage\sof\sdemo\scode\sin\sfts5_test_mi.c.
+D 2016-02-17T14:11:06.434
F Makefile.in 4e90dc1521879022aa9479268a4cd141d1771142
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
F Makefile.msc 30f075dc4f27a07abb76088946b2944178d85347
F ext/fts5/fts5_main.c 0e01ead4e817483e378e7e38e6d902f50b68d29e
F ext/fts5/fts5_storage.c f8343db90d8c95a4d4b52f6676e354b4649ffd6e
F ext/fts5/fts5_tcl.c f8731e0508299bd43f1a2eff7dbeaac870768966
-F ext/fts5/fts5_test_mi.c 1ec66ffdf7632077fbd773b7a6df5153272ec070
+F ext/fts5/fts5_test_mi.c d491f9277fcf2b91312a261b9cb4c10da1ff1734
F ext/fts5/fts5_test_tok.c db08af63673c3a7d39f053b36fd6e065017706be
F ext/fts5/fts5_tokenize.c 2ce7b44183538ec46b7907726262ee43ffdd39a8
F ext/fts5/fts5_unicode2.c b450b209b157d598f7b9df9f837afb75a14c24bf
F ext/fts5/test/fts5fault8.test 430837fe6dd0511fd3aea52bd602ac02441bcb58
F ext/fts5/test/fts5fault9.test e10e395428a9ea0596ebe752ff7123d16ab78e08
F ext/fts5/test/fts5faultA.test fa5d59c0ff62b7125cd14eee38ded1c46e15a7ea
+F ext/fts5/test/fts5faultB.test 92ae906284062bf081b6c854afa54dcb1aa9ef88
F ext/fts5/test/fts5full.test 6f6143af0c6700501d9fd597189dfab1555bb741
F ext/fts5/test/fts5hash.test 06f9309ccb4d5050a131594e9e47d0b21456837d
F ext/fts5/test/fts5integrity.test f5e4f8d284385875068ad0f3e894ce43e9de835d
-F ext/fts5/test/fts5matchinfo.test 86569026d20f1ed748236587ce798de8a96615f1
+F ext/fts5/test/fts5matchinfo.test f7dde99697bcb310ea8faa8eb2714d9f4dfc0e1b
F ext/fts5/test/fts5merge.test 8f3cdba2ec9c5e7e568246e81b700ad37f764367
F ext/fts5/test/fts5merge2.test c0cb66eb38a41c26cc5848fb9e50093e0f59ac93
F ext/fts5/test/fts5near.test b214cddb1c1f1bddf45c75af768f20145f7e71cc
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
F tool/warnings.sh a98af506df552f3b3c0d904f94e4cdc4e1a6d598
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P fc2043ebaa3f106529500164936bb82f9b921b1c 417e777701bbf4bd67626d4ca3bc2c5d847f6cd0
-R 2ca4dc2ba891e3629351ceac13b91136
-T +closed 417e777701bbf4bd67626d4ca3bc2c5d847f6cd0
-U drh
-Z 146115d4bedb6d62469919152a1417e4
+P 53fd040c98d9647ea135d43c493777bf8da4aebd
+R 145e645c5948689d8fe331e9c7c65bd5
+U dan
+Z f405d2e5930c75fdd0f048c483569008
-53fd040c98d9647ea135d43c493777bf8da4aebd
\ No newline at end of file
+8a78050dc0e374a0df0f29716df60250e2c4b4f7
\ No newline at end of file