|| (bFromValid && fts5RowidCmp(pExpr, p1->iRowid, iFrom)<0)
){
int rc = fts5ExprNodeNext(pExpr, p1, bFromValid, iFrom);
- if( rc!=SQLITE_OK ) return rc;
+ if( rc!=SQLITE_OK ){
+ pNode->bNomatch = 0;
+ return rc;
+ }
}
}
}
if( cmp>0 ){
/* Advance pChild until it points to iLast or laster */
rc = fts5ExprNodeNext(pExpr, pChild, 1, iLast);
- if( rc!=SQLITE_OK ) return rc;
+ if( rc!=SQLITE_OK ){
+ pAnd->bNomatch = 0;
+ return rc;
+ }
}
/* If the child node is now at EOF, so is the parent AND node. Otherwise,
int rc = fts5ExprNodeNext(pExpr, pNode->apChild[0], bFromValid, iFrom);
if( rc==SQLITE_OK ){
rc = fts5ExprNodeTest_AND(pExpr, pNode);
+ }else{
+ pNode->bNomatch = 0;
}
return rc;
}
if( rc==SQLITE_OK ){
rc = fts5ExprNodeTest_NOT(pExpr, pNode);
}
+ if( rc!=SQLITE_OK ){
+ pNode->bNomatch = 0;
+ }
return rc;
}
--- /dev/null
+# 2016 February 2
+#
+# 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 fts5faultA
+
+# If SQLITE_ENABLE_FTS3 is defined, omit this file.
+ifcapable !fts5 {
+ finish_test
+ return
+}
+
+foreach_detail_mode $testprefix {
+ if {"%DETAIL%"=="none"} continue
+
+ do_execsql_test 1.0 {
+ CREATE VIRTUAL TABLE o1 USING fts5(a, b, c, detail=%DETAIL%);
+ INSERT INTO o1(o1, rank) VALUES('pgsz', 32);
+
+ WITH s(i) AS ( SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<60 )
+ INSERT INTO o1 SELECT 'A', 'B', 'C' FROM s;
+
+ WITH s(i) AS ( SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<60 )
+ INSERT INTO o1 SELECT 'C', 'A', 'B' FROM s;
+
+ WITH s(i) AS ( SELECT 1 UNION ALL SELECT i+1 FROM s WHERE i<60 )
+ INSERT INTO o1 SELECT 'B', 'C', 'A' FROM s;
+ }
+
+ do_faultsim_test 1 -faults int* -prep {
+ sqlite3 db test.db
+ } -body {
+ execsql { SELECT count(*) FROM o1('a') }
+ } -test {
+ faultsim_test_result {0 180} {1 {vtable constructor failed: o1}}
+ }
+
+ do_faultsim_test 2 -faults int* -prep {
+ sqlite3 db test.db
+ } -body {
+ execsql { SELECT * FROM o1('a:a AND {b c}:b') ORDER BY rank }
+ expr 1
+ } -test {
+ faultsim_test_result {0 1} {1 {vtable constructor failed: o1}}
+ }
+
+ do_faultsim_test 3 -faults int* -prep {
+ sqlite3 db test.db
+ } -body {
+ execsql { SELECT * FROM o1('{b c}:b NOT a:a') ORDER BY rank }
+ expr 1
+ } -test {
+ faultsim_test_result {0 1} {1 {vtable constructor failed: o1}}
+ }
+
+ do_faultsim_test 4 -faults int* -prep {
+ sqlite3 db test.db
+ } -body {
+ execsql { SELECT * FROM o1('b:b OR a:a') }
+ expr 1
+ } -test {
+ faultsim_test_result {0 1} {1 {vtable constructor failed: o1}}
+ }
+
+ do_faultsim_test 5 -faults int* -prep {
+ sqlite3 db test.db
+ } -body {
+ execsql { SELECT count(*) FROM o1('c:b') }
+ expr 1
+ } -test {
+ faultsim_test_result {0 1} {1 {vtable constructor failed: o1}}
+ }
+}
+
+finish_test
-C Very\ssmall\senhancement\sto\sdispatch\sspeed\sfor\sSQL\sfunctions.
-D 2017-02-21T15:27:22.044
+C Fix\san\sFTS5\sproblem\sthat\scould\scause\sa\scrash\swhen\scertain\squeries\swere\ninterrupted\susing\ssqlite3_interrupt().
+D 2017-02-21T17:52:58.643
F Makefile.in edb6bcdd37748d2b1c3422ff727c748df7ffe918
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
F Makefile.msc a89ea37ab5928026001569f056973b9059492fe2
F ext/fts5/fts5_aux.c 67acf8d51723cf28ffc3828210ba662df4b8d267
F ext/fts5/fts5_buffer.c 4c1502d4c956cd092c89ce4480867f9d8bf325cd
F ext/fts5/fts5_config.c 5af9c360e99669d29f06492c370892394aba0857
-F ext/fts5/fts5_expr.c 33f0e8063ac7360bcd71c0ff0dcbacdc05fffe50
+F ext/fts5/fts5_expr.c c6ecc2280162a3714d15dce2a8f2299f748b627c
F ext/fts5/fts5_hash.c 880998e596b60f078348d48732ca4ad9a90caad2
F ext/fts5/fts5_index.c f67032a9a529ba52a545e6e3ab970764199c05d4
F ext/fts5/fts5_main.c f85281445dcf8be32d18841c93a6f90fe27dbfe2
F ext/fts5/test/fts5fault9.test e10e395428a9ea0596ebe752ff7123d16ab78e08
F ext/fts5/test/fts5faultA.test fa5d59c0ff62b7125cd14eee38ded1c46e15a7ea
F ext/fts5/test/fts5faultB.test 7f3bba790fa172073ac314f9b8ed197390b61eca
+F ext/fts5/test/fts5faultD.test cc5d1225556e356615e719c612e845d41bff7d5a
F ext/fts5/test/fts5full.test 6f6143af0c6700501d9fd597189dfab1555bb741
F ext/fts5/test/fts5fuzz1.test bece4695fc169b61ab236ada7931c6e4942cbef9
F ext/fts5/test/fts5hash.test 06f9309ccb4d5050a131594e9e47d0b21456837d
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 1589db012ef1389bf84399fccf96d143b2ac4c0f
-R e3362d21e61dd042dd5284f17843c5d9
-U drh
-Z 12602c247389d019265df8c626a67cf1
+P 3c3228ed16ed8a72630bd56bb9192ee3c7f82093
+R c2d6d6c70c7c0d8b681ef9ca8535c3a3
+U dan
+Z 2a4ed498ce9ed73234b51fb6f9a899a9
-3c3228ed16ed8a72630bd56bb9192ee3c7f82093
\ No newline at end of file
+e400909f313c317b7b67be6eb867ed61df7383dc
\ No newline at end of file