Hey JÃrg, Can you review this one for me. It fixes the issue that we had with the "DELETE FROM \"fts\" WHERE rowid = ?" query. I tried this in the tracker-fts-test.c program and I got the exact same error, making be believe that FTS simply doesn't support this and that we are getting a strange error back from sqlite. I noticed that somewhere else in the code using the magic column "fts" of that table, setting it to -1 for that rowid, appears to also delete. This however works only per column? So in this patch I iterate over all the properties that are fulltext and I set the magic column "fts" to -1 for the rowid. Just like the other place in the code does it (the else block a bit lower, but when the predicate is rdfs:Resource we want to iter over all properties that are possible, right? That's what this patch does indeed). Feel free to take a look at these copy-pastes: pvanhoof lors:~/repos/gnome/tracker/tracker-master/utils/tracker-fts$ ./tracker-fts-test stew Tracker-Message: Setting up monitor for changes to config file:'/home/pvanhoof/.config/tracker/tracker-fts.cfg' ** Message: Loading defaults into GKeyFile... Tracker-Message: Setting up stopword list for language code:'en' Tracker-Message: Setting up stemmer for language code:'en' SQL error: bind or column index out of range pvanhoof lors:~/repos/gnome/tracker/tracker-master/utils/tracker-fts$ git diff diff --git a/utils/tracker-fts/tracker-fts-test.c b/utils/tracker-fts/tracker-fts-test.c index 2ccf2e9..6acf77c 100644 --- a/utils/tracker-fts/tracker-fts-test.c +++ b/utils/tracker-fts/tracker-fts-test.c -103,6 +103,7 @@ main (int argc, char **argv) exec_sql (db, "insert into recipe (cat, col_default, col_1, col_2) values (2, 'broccoli pie stew', 'broccoli,cheese exec_sql (db, "insert into recipe (cat, col_default, col_1, col_2) values (7, 'stew pumpkin pie stew', 'pumpkin,sug exec_sql (db, "insert into recipe (cat, col_default, col_1, col_2) values (6, 'stew pumpkin pie stew', 'pumpkin,sug + exec_sql (db, "delete from recipe where rowid = 1"); } // sql = g_strdup_printf ("select cat, count (*) from recipe where recipe match '%s' group by Cat", argv[1]); // exec_sql (db, sql); pvanhoof lors:~/repos/gnome/tracker/tracker-master/utils/tracker-fts$ (tracker-store:29814): Tracker-DEBUG: Preparing query: 'DELETE FROM "fts" WHERE rowid = ?' Tracker-WARNING **: Could not perform SQLite operation, error:25->'bind or column index out of range' aborting... Program received signal SIGABRT, Aborted. 0xb7fe1424 in __kernel_vsyscall () (gdb) bt #0 0xb7fe1424 in __kernel_vsyscall () #1 0xb7a273d0 in raise () from /lib/i686/cmov/libc.so.6 #2 0xb7a2aa85 in abort () from /lib/i686/cmov/libc.so.6 #3 0xb7c3740c in IA__g_logv (log_domain=0xb7f7d3fd "Tracker", log_level=G_LOG_LEVEL_WARNING, format=0xb7f7d788 "Could not perform SQLite operation, error:%d->'%s'", args1=0xbfffe89c "\31") at /build/buildd-glib2.0_2.20.4-1-i386-6KfM1O/glib2.0-2.20.4/glib/gmessages.c:506 #4 0xb7c37436 in IA__g_log (log_domain=0xb7f7d3fd "Tracker", log_level=G_LOG_LEVEL_WARNING, format=0xb7f7d788 "Could not perform SQLite operation, error:%d->'%s'") at /build/buildd-glib2.0_2.20.4-1-i386-6KfM1O/glib2.0-2.20.4/glib/gmessages.c:526 #5 0xb7f79941 in create_result_set_from_stmt (interface=0x8075520, stmt=0x84469c0, error=0x0) at tracker-db-interface-sqlite.c:604 #6 0xb7f7a19c in tracker_db_statement_sqlite_execute (stmt=0x8071f08, error=0x0) at tracker-db-interface-sqlite.c:875 #7 0xb7f772e2 in tracker_db_statement_execute (stmt=0x8071f08, error=0x0) at tracker-db-interface.c:424 #8 0xb7f945f6 in tracker_data_delete_statement ( subject=0x8199ab0 "file:///home/pvanhoof/repos/gnome/tracker/tracker-master/bleh", predicate=0x81b7530 "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", object=0x84331c0 "http://www.w3.org/2000/01/rdf-schema#Resource") at tracker-data-update.c:785 #9 0xb7f99e6f in tracker_sparql_query_execute_update (self=0x81a7178, query=0x8072000, delete_statements=1, error=0xbfffeac0) at tracker-sparql-query.c:1181 #10 0xb7f9948e in tracker_sparql_query_execute_delete (self=0x81a7178, query=0x8072000, error=0xbfffeaf8) at tracker-sparql-query.c:1007 #11 0xb7f9820f in tracker_sparql_query_execute (self=0x81a7178, error=0xbfffebb8) at tracker-sparql-query.c:629 #12 0xb7f96067 in tracker_data_update_sparql (update=0x8097020 "DELETE { <bleh> a rdfs:Resource }", error=0xbfffebb8) at tracker-data-update.c:1507 #13 0x0805791c in tracker_store_sparql_update (sparql=0x8097020 "DELETE { <bleh> a rdfs:Resource }", error=0xbfffebb8) at tracker-store.c:393 #14 0x0805302b in tracker_resources_sparql_update (self=0x840c8a8, update=0x8097020 "DELETE { <bleh> a rdfs:Resource }", context=0x8096e08, error=0x0) at tracker-resources.c:294 #15 0x0804fa53 in dbus_glib_marshal_tracker_resources_VOID__STRING_POINTER (closure=0xbfffeeb8, return_value=0x0, n_param_values=3, param_values=0x8426a18, invocation_hint=0x0, marshal_data=0x8052f6d) at tracker-resources-glue.h:93 #16 0xb7e05ff1 in ?? () from /usr/lib/libdbus-glib-1.so.2 #17 0xb7de0695 in ?? () from /lib/libdbus-1.so.3 #18 0xb7dd1dc4 in dbus_connection_dispatch () from /lib/libdbus-1.so.3 #19 0xb7e03b1d in ?? () from /usr/lib/libdbus-glib-1.so.2 ---Type <return> to continue, or q <return> to quit--- #20 0xb7c2d368 in g_main_dispatch (context=0x806b740) at /build/buildd-glib2.0_2.20.4-1-i386-6KfM1O/glib2.0-2.20.4/glib/gmain.c:1824 #21 IA__g_main_context_dispatch (context=0x806b740) at /build/buildd-glib2.0_2.20.4-1-i386-6KfM1O/glib2.0-2.20.4/glib/gmain.c:2377 #22 0xb7c308c3 in g_main_context_iterate (context=0x806b740, block=1, dispatch=1, self=0x805fd08) at /build/buildd-glib2.0_2.20.4-1-i386-6KfM1O/glib2.0-2.20.4/glib/gmain.c:2455 #23 0xb7c30d8a in IA__g_main_loop_run (loop=0x807f788) at /build/buildd-glib2.0_2.20.4-1-i386-6KfM1O/glib2.0-2.20.4/glib/gmain.c:2663 #24 0x080519d8 in main (argc=1, argv=0xbffff264) at tracker-main.c:803 (gdb) -- Philip Van Hoof, freelance software developer home: me at pvanhoof dot be gnome: pvanhoof at gnome dot org http://pvanhoof.be/blog http://codeminded.be
Attachment:
fts.diff
Description: Text Data