assert( nArg==1 || nArg==(2 + pConfig->nCol + 1) );
- if( SQLITE_NULL!=sqlite3_value_type(apVal[2 + pConfig->nCol]) ){
+ if( nArg>1 && SQLITE_NULL!=sqlite3_value_type(apVal[2 + pConfig->nCol]) ){
return fts5SpecialCommand(pTab, apVal[2 + pConfig->nCol]);
}
return rc;
}
-/*
-** Remove a row from the FTS table.
-*/
-int sqlite3Fts5StorageDelete(Fts5Storage *p, i64 iDel){
- assert( !"do this" );
- return SQLITE_OK;
-}
-
typedef struct Fts5InsertCtx Fts5InsertCtx;
struct Fts5InsertCtx {
Fts5Storage *pStorage;
return rc;
}
+
/*
** Insert a record into the %_docsize table. Specifically, do:
**
return rc;
}
+/*
+** Remove a row from the FTS table.
+*/
+int sqlite3Fts5StorageDelete(Fts5Storage *p, i64 iDel){
+ int rc;
+ sqlite3_stmt *pDel;
+
+ rc = fts5StorageLoadTotals(p);
+
+ /* Delete the index records */
+ if( rc==SQLITE_OK ){
+ rc = fts5StorageDeleteFromIndex(p, iDel);
+ }
+
+ /* Delete the %_docsize record */
+ if( rc==SQLITE_OK ){
+ rc = fts5StorageGetStmt(p, FTS5_STMT_DELETE_DOCSIZE, &pDel);
+ }
+ if( rc==SQLITE_OK ){
+ sqlite3_bind_int64(pDel, 1, iDel);
+ sqlite3_step(pDel);
+ rc = sqlite3_reset(pDel);
+ }
+
+ /* Delete the %_content record */
+ if( rc==SQLITE_OK ){
+ rc = fts5StorageGetStmt(p, FTS5_STMT_DELETE_CONTENT, &pDel);
+ }
+ if( rc==SQLITE_OK ){
+ sqlite3_bind_int64(pDel, 1, iDel);
+ sqlite3_step(pDel);
+ rc = sqlite3_reset(pDel);
+ }
+
+ /* Write the averages record */
+ if( rc==SQLITE_OK ){
+ rc = fts5StorageSaveTotals(p);
+ }
+
+ return rc;
+}
/*
** Insert a new row into the FTS table.
-C Add\sthe\sxTokenize\sextension\sAPI.
-D 2014-07-21T14:22:38.753
+C Fix\sDELETE\sand\sUPDATE\soperations\son\sfts5\stables.
+D 2014-07-21T15:45:26.584
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
F Makefile.in b03432313a3aad96c706f8164fb9f5307eaf19f5
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
F ext/fts3/unicode/CaseFolding.txt 8c678ca52ecc95e16bc7afc2dbf6fc9ffa05db8c
F ext/fts3/unicode/UnicodeData.txt cd07314edb62d49fde34debdaf92fa2aa69011e7
F ext/fts3/unicode/mkunicode.tcl dc6f268eb526710e2c6e496c372471d773d0c368
-F ext/fts5/fts5.c fda4dd1d2c3e1c6bcb0bf673428a23e4752c21f5
+F ext/fts5/fts5.c 35124fe8a49868808604c6a5264bf4f23587ac99
F ext/fts5/fts5.h c77b6a4a56d80f70fc4f0444030c88724397ed10
F ext/fts5/fts5Int.h 12d03496152b716e63a5380e396b776fbefa2065
F ext/fts5/fts5_aux.c 14961135231dd50e6c17894e649c3bbc8c042829
F ext/fts5/fts5_config.c 94f1b4cb4de6a7cd5780c14adb0198e289df8cef
F ext/fts5/fts5_expr.c 288b3e016253eab69ea8cefbff346a4697b44291
F ext/fts5/fts5_index.c 68d2d41b5c6d2f8838c3d6ebdc8b242718b8e997
-F ext/fts5/fts5_storage.c f722b080b9794f9e49cc4d36f0d9fb516cb7f309
+F ext/fts5/fts5_storage.c 7bb34138d134841cbe0a809467070d07013d8d7d
F ext/fts5/fts5parse.y 777da8e5819f75c217982c79c29d014c293acac9
F ext/icu/README.txt d9fbbad0c2f647c3fdf715fc9fd64af53aedfc43
F ext/icu/icu.c d415ccf984defeb9df2c0e1afcfaa2f6dc05eacb
F test/fts4merge4.test d895b1057a7798b67e03455d0fa50e9ea836c47b
F test/fts4noti.test 524807f0c36d49deea7920cdd4cd687408b58849
F test/fts4unicode.test 01ec3fe2a7c3cfff3b4c0581b83caa11b33efa36
-F test/fts5aa.test 0f5d29bf0a86b9dff0906c9e166d624c591d3437
+F test/fts5aa.test a2c7bbc18f25f0b57ea8fc483c8a8830273b9ed4
F test/fts5ab.test dc04ed48cf93ca957d174406e6c192f2ff4f3397
F test/fts5ac.test 9be418d037763f4cc5d86f4239db41fc86bb4f85
F test/fts5ad.test 2ed38bbc865678cb2905247120d02ebba7f20e07
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
F tool/warnings.sh 0abfd78ceb09b7f7c27c688c8e3fe93268a13b32
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 19504c4108472d2ad1281221642b8bd06eb69f4e
-R 5c4f852f4d425543d226dd267d759872
+P 8c6b0aff3443fae4b7f0b9adcbf1514992b70653
+R ceadf07a7e21667d721f7d8d3cf93a59
U dan
-Z 17df0b0e1c67547ce560ffb2b8c93af3
+Z 2d0ad058324af420450f942c4237ae4f
-8c6b0aff3443fae4b7f0b9adcbf1514992b70653
\ No newline at end of file
+d44d3a8518ff7a1a3e2c0ab97493aa590676ee8c
\ No newline at end of file
if {[set_test_counter errors]} break
}
+#-------------------------------------------------------------------------
+#
+reset_db
+do_execsql_test 10.0 {
+ CREATE VIRTUAL TABLE t1 USING fts5(x,y);
+}
+set d10 {
+ 1 {g f d b f} {h h e i a}
+ 2 {f i g j e} {i j c f f}
+ 3 {e e i f a} {e h f d f}
+ 4 {h j f j i} {h a c f j}
+ 5 {d b j c g} {f e i b e}
+ 6 {a j a e e} {j d f d e}
+ 7 {g i j c h} {j d h c a}
+ 8 {j j i d d} {e e d f b}
+ 9 {c j j d c} {h j i f g}
+ 10 {b f h i a} {c f b b j}
+}
+foreach {rowid x y} $d10 {
+ do_execsql_test 10.1.$rowid.1 { INSERT INTO t1 VALUES($x, $y) }
+ do_execsql_test 10.1.$rowid.2 { INSERT INTO t1(t1) VALUES('integrity-check') }
+}
+foreach rowid {5 9 8 1 2 4 10 7 3 5 6} {
+ do_execsql_test 10.2.$rowid.1 { DELETE FROM t1 WHERE rowid = $rowid }
+ do_execsql_test 10.2.$rowid.2 { INSERT INTO t1(t1) VALUES('integrity-check') }
+}
+foreach {rowid x y} $d10 {
+ do_execsql_test 10.3.$rowid.1 { INSERT INTO t1 VALUES($x, $y) }
+ do_execsql_test 10.3.$rowid.2 { INSERT INTO t1(t1) VALUES('integrity-check') }
+}
+
+do_execsql_test 10.4.1 { DELETE FROM t1 }
+do_execsql_test 10.4.2 { INSERT INTO t1(t1) VALUES('integrity-check') }
+
finish_test