int nTerm, const u8 *pTerm /* First term on new page */
){
fts5WriteFlushBtree(p, pWriter);
- fts5BufferSet(&p->rc, &pWriter->btterm, nTerm, pTerm);
- pWriter->iBtPage = pWriter->writer.pgno;
+ if( p->rc==SQLITE_OK ){
+ fts5BufferSet(&p->rc, &pWriter->btterm, nTerm, pTerm);
+ pWriter->iBtPage = pWriter->writer.pgno;
+ }
}
/*
if( (pPage->buf.n + pPgidx->n + nTerm + 2)>=p->pConfig->pgsz ){
if( pPage->buf.n>4 ){
fts5WriteFlushLeaf(p, pWriter);
+ if( p->rc!=SQLITE_OK ) return;
}
fts5BufferGrow(&p->rc, &pPage->buf, nTerm+FTS5_DATA_PADDING);
}
n = 1 + fts5PrefixCompress(nMin, pPage->term.p, pTerm);
}
fts5WriteBtreeTerm(p, pWriter, n, pTerm);
+ if( p->rc!=SQLITE_OK ) return;
pPage = &pWriter->writer;
}
}else{
/* Write the term for this entry to disk. */
sqlite3Fts5HashScanEntry(pHash, &zTerm, &pDoclist, &nDoclist);
fts5WriteAppendTerm(p, &writer, (int)strlen(zTerm), (const u8*)zTerm);
+ if( p->rc!=SQLITE_OK ) break;
assert( writer.bFirstRowidInPage==0 );
if( pgsz>=(pBuf->n + pPgidx->n + nDoclist + 1) ){
/* TODO2: Doclist terminator written here. */
/* pBuf->p[pBuf->n++] = '\0'; */
assert( pBuf->n<=pBuf->nSpace );
- sqlite3Fts5HashScanNext(pHash);
+ if( p->rc==SQLITE_OK ) sqlite3Fts5HashScanNext(pHash);
}
sqlite3Fts5HashClear(pHash);
fts5WriteFinish(p, &writer, &pgnoLast);
--- /dev/null
+# 2019 Jan 4
+#
+# 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 implements regression tests for SQLite library. The
+# focus of this script is testing the FTS5 module.
+#
+
+source [file join [file dirname [info script]] fts5_common.tcl]
+set testprefix fts5interrupt
+
+# If SQLITE_ENABLE_FTS5 is not defined, omit this file.
+ifcapable !fts5 {
+ finish_test
+ return
+}
+
+do_execsql_test 1.0 {
+ CREATE VIRTUAL TABLE t1 USING fts5(a);
+ INSERT INTO t1(t1, rank) VALUES('pgsz', 40);
+}
+db_save_and_close
+
+proc progress_handler {args} {
+ incr ::progress_handler_delay -1
+ if {$::progress_handler_delay<=0} { return 1 }
+ return 0
+}
+
+foreach {tn sql} {
+ 1 { INSERT INTO t1(rowid, a) VALUES(0, 'z z z z') }
+ 2 { COMMIT }
+} {
+ set bDone 0
+ for {set i 1} {$bDone==0} {incr i} {
+ do_test 1.$tn.$i {
+ db_restore_and_reopen
+ execsql {
+ BEGIN;
+ INSERT INTO t1(rowid, a) VALUES(1, 'a b c d');
+ INSERT INTO t1(rowid, a) VALUES(2, 'd e f g');
+ INSERT INTO t1(rowid, a) VALUES(3, 'h i j k');
+ INSERT INTO t1(rowid, a) VALUES(4, 'l m n o');
+ }
+
+ set ::progress_handler_delay $i
+ db progress 1 progress_handler
+ set res [catchsql $sql]
+ db close
+ if {$res=="0 {}"} {
+ set bDone 1
+ } else {
+ if {$res!="1 interrupted"} { error "got: $res" }
+ }
+ set {} {}
+ } {}
+ }
+}
+
+finish_test
+
-C Fix\sthe\scsv01.test\smodule\sso\sthat\sit\sworks\son\ssystems\swith\s\\r\\n\sline\sendings.
-D 2019-01-03T16:03:48.841
+C Fix\ssome\sproblems\swith\ssqlite3_interrupt()\shandling\sin\sfts5.
+D 2019-01-03T19:12:21.304
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F Makefile.in d8b254f8bb81bab43c340d70d17dc3babab40fcc8a348c8255881f780a45fee6
F ext/fts5/fts5_config.c 5af9c360e99669d29f06492c370892394aba0857
F ext/fts5/fts5_expr.c 0eff5bad90838be83c5cc16837ca215a961abe05cfbf741a285ba62a79ad586f
F ext/fts5/fts5_hash.c 32be400cf761868c9db33efe81a06eb19a17c5402ad477ee9efb51301546dd55
-F ext/fts5/fts5_index.c d4b950baf42902d1d41a7bc1a374f134074b4bd981e92557a1b7e520a5adb019
+F ext/fts5/fts5_index.c 6694a1ee02fe4dfeecb19b4d7b730003af9d8c1b9b3ed34ffc0ca88ac9fecbfd
F ext/fts5/fts5_main.c 287a1a56580df304d7fa2fc1890f85b9cb6ac6b9e7c8af7dfa2151528db4b059
F ext/fts5/fts5_storage.c 5862f1b785a983acb8420281340f3f424896ab48f396f6fd8540787be7459139
F ext/fts5/fts5_tcl.c 39bcbae507f594aad778172fa914cad0f585bf92fd3b078c686e249282db0d95
F ext/fts5/test/fts5fuzz1.test 238d8c45f3b81342aa384de3e581ff2fa330bf922a7b69e484bbc06051a1080e
F ext/fts5/test/fts5hash.test a4cf51acad99bfc43c16fb74f9d22495dc221ae0701fc5e908ca963a9b26a02b
F ext/fts5/test/fts5integrity.test 4317561cd25eca7df16aa1f7d1a700ee958059fa639785f94aba0a84df9ab17b
+F ext/fts5/test/fts5interrupt.test 09613247b273a99889808ef852898177e671406fe71fdde7ea00e78ea283d227
F ext/fts5/test/fts5lastrowid.test be98fe3e03235296585b72daad7aed5717ba0062bae5e5c18dd6e04e194c6b28
F ext/fts5/test/fts5leftjoin.test c0b4cafb9661379e576dc4405c0891d8fcc2782680740513c4d1fc114b43d4ad
F ext/fts5/test/fts5matchinfo.test 79129ff6c9a2d86943b287a5a8caa7ee639f6dcf004d8975d15c279374e82e35
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P df939c89fa90b7f9ccf961027ca4eca4f987c49eabf530b5719a83e5ab0d346d
-R 7684241e97a177b5ac495e86afddcce9
-U drh
-Z 5ac85448b0e42b193903bc8ffd8a40ba
+P 36eaf5a5e51b20699328aae67c2bfd325f81bea342e2b167fddd859a50a26e28
+R d8b4aa3857542cdff2aba395a35ff507
+U dan
+Z 83b8fb8b597b72d6d3939cc47e4f2492
-36eaf5a5e51b20699328aae67c2bfd325f81bea342e2b167fddd859a50a26e28
\ No newline at end of file
+c0eb839a3c23612b93002d2e1fbc41bf5db140775267989f85db52146144750b
\ No newline at end of file