diff options
-rw-r--r-- | config.h.meson.in | 3 | ||||
-rw-r--r-- | meson.build | 97 | ||||
-rw-r--r-- | meson_options.txt | 2 | ||||
-rw-r--r-- | src/libtracker-data/meson.build | 4 | ||||
-rw-r--r-- | src/libtracker-data/tracker-data-manager.c | 24 | ||||
-rw-r--r-- | src/libtracker-data/tracker-data-update.c | 71 | ||||
-rw-r--r-- | src/libtracker-data/tracker-db-interface-sqlite.c | 10 | ||||
-rw-r--r-- | src/libtracker-data/tracker-db-interface-sqlite.h | 2 | ||||
-rw-r--r-- | src/libtracker-data/tracker-db-manager.c | 4 | ||||
-rw-r--r-- | tests/functional-tests/meson.build | 5 | ||||
-rw-r--r-- | tests/meson.build | 7 |
11 files changed, 45 insertions, 184 deletions
diff --git a/config.h.meson.in b/config.h.meson.in index 8c7f99937..79b7e328f 100644 --- a/config.h.meson.in +++ b/config.h.meson.in @@ -78,9 +78,6 @@ /* Define to 1 if you have the `strnlen' function. */ #mesondefine HAVE_STRNLEN -/* Define to 0 if tracker FTS is not compiled */ -#mesondefine HAVE_TRACKER_FTS - /* Define if we have UPOWER */ #mesondefine HAVE_UPOWER diff --git a/meson.build b/meson.build index fbfb88d7a..0374797f3 100644 --- a/meson.build +++ b/meson.build @@ -65,8 +65,6 @@ add_project_arguments(['-D', 'TRACKER_COMPILATION'], ['-D', 'G_LOG_DOMAIN="Tracker"'], language: 'vala') -enable_fts = get_option('fts') - network_manager = dependency('libnm', required: get_option('network_manager')) have_network_manager = network_manager.found() @@ -77,63 +75,54 @@ have_network_manager = network_manager.found() libstemmer = cc.find_library('stemmer', required: get_option('stemmer')) have_libstemmer = libstemmer.found() -################################################################## -# Check for tracker-fts, allow disabling FTS support -################################################################## - -if enable_fts - if meson.is_cross_build() and not meson.has_exe_wrapper() - sqlite3_fts5 = meson.get_cross_property('sqlite3_has_fts5') - if sqlite3_fts5 == '' - error('Please assign an appropriate value for sqlite3_has_fts5 in the [properties] section of your crossfile') - elif sqlite3_fts5 == 'true' - sqlite3_has_builtin_fts5 = true - elif sqlite3_fts5 == 'false' - sqlite3_has_builtin_fts5 = false - else - error('Invalid value of sqlite3_has_fts5 property, use \'true\' or \'false\'') - endif +if meson.is_cross_build() and not meson.has_exe_wrapper() + sqlite3_fts5 = meson.get_cross_property('sqlite3_has_fts5') + if sqlite3_fts5 == '' + error('Please assign an appropriate value for sqlite3_has_fts5 in the [properties] section of your crossfile') + elif sqlite3_fts5 == 'true' + sqlite3_has_builtin_fts5 = true + elif sqlite3_fts5 == 'false' + sqlite3_has_builtin_fts5 = false else - sqlite3_builtin_fts5_test = ''' - #include <sqlite3.h> - - int main (int argc, char *argv[]) { - sqlite3 *db; - int rc; - rc = sqlite3_open(":memory:", &db); - if (rc!=SQLITE_OK) return -1; - rc = sqlite3_exec(db, "create table a(text)", 0, 0, 0); - if (rc!=SQLITE_OK) return -1; - rc = sqlite3_exec(db, "create virtual table t using fts5(content='a',text)", 0, 0, 0); - if (rc!=SQLITE_OK) return -1; - } - ''' - - result = cc.run(sqlite3_builtin_fts5_test, - name: 'sqlite3 has builtin FTS5 module', - dependencies: sqlite) - - if not result.compiled() - error('Failed to compile SQLite FTS test.') - endif - - if result.returncode() == 0 - sqlite3_has_builtin_fts5 = true - else - sqlite3_has_builtin_fts5 = false - endif + error('Invalid value of sqlite3_has_fts5 property, use \'true\' or \'false\'') + endif +else + sqlite3_builtin_fts5_test = ''' + #include <sqlite3.h> + + int main (int argc, char *argv[]) { + sqlite3 *db; + int rc; + rc = sqlite3_open(":memory:", &db); + if (rc!=SQLITE_OK) return -1; + rc = sqlite3_exec(db, "create table a(text)", 0, 0, 0); + if (rc!=SQLITE_OK) return -1; + rc = sqlite3_exec(db, "create virtual table t using fts5(content='a',text)", 0, 0, 0); + if (rc!=SQLITE_OK) return -1; + } + ''' + + result = cc.run(sqlite3_builtin_fts5_test, + name: 'sqlite3 has builtin FTS5 module', + dependencies: sqlite) + + if not result.compiled() + error('Failed to compile SQLite FTS test.') endif - if sqlite3_has_builtin_fts5 - message('Using sqlite3 builtin FTS module') - elif sqlite.version().version_compare('>= 3.20.0') - error('FTS support was enabled but SQLite doesn\'t have the FTS module built in') + if result.returncode() == 0 + sqlite3_has_builtin_fts5 = true else - message('sqlite3 is older than version 3.20.0, using FTS module that is bundled with Tracker') + sqlite3_has_builtin_fts5 = false endif +endif +if sqlite3_has_builtin_fts5 + message('Using sqlite3 builtin FTS module') +elif sqlite.version().version_compare('>= 3.20.0') + error('FTS support was enabled but SQLite doesn\'t have the FTS module built in') else - sqlite3_has_builtin_fts5 = false + message('sqlite3 is older than version 3.20.0, using FTS module that is bundled with Tracker') endif ################################################################## @@ -196,7 +185,6 @@ endif conf = configuration_data() # Config that goes in config.h -conf.set10('HAVE_TRACKER_FTS', enable_fts) conf.set('HAVE_BUILTIN_FTS', sqlite3_has_builtin_fts5) conf.set('HAVE_LIBICU', unicode_library_name == 'icu') @@ -316,8 +304,7 @@ summary = [ '\nFeature Support:', ' Support for network status detection: ' + have_network_manager.to_string(), ' Unicode support library: ' + unicode_library_name, - ' Build with SQLite FTS support: @0@ (built-in FTS: @1@)'.format( - get_option('fts'), sqlite3_has_builtin_fts5), + ' Use external FTS module: ' + (not sqlite3_has_builtin_fts5).to_string(), ' Build with Stemming support: ' + have_libstemmer.to_string(), ] diff --git a/meson_options.txt b/meson_options.txt index e29aaaa84..04ecfb953 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -1,7 +1,5 @@ option('docs', type: 'boolean', value: false, yield: true, description: 'Generate API documentation with gtk-doc') -option('fts', type: 'boolean', value: true, - description: 'Enable the Tracker full-text search feature') option('man', type: 'boolean', value: true, yield: true, description: 'Install man pages') option('override_sqlite_version_check', type: 'boolean', value: false, diff --git a/src/libtracker-data/meson.build b/src/libtracker-data/meson.build index d93fa1122..58e38f607 100644 --- a/src/libtracker-data/meson.build +++ b/src/libtracker-data/meson.build @@ -33,9 +33,7 @@ tracker_data_dependencies = [ tracker_common_dep, gvdb_dep, sqlite, ] -if get_option('fts') - tracker_data_dependencies += tracker_fts_dep -endif +tracker_data_dependencies += tracker_fts_dep libtracker_data = library('tracker-data', 'tracker-class.c', diff --git a/src/libtracker-data/tracker-data-manager.c b/src/libtracker-data/tracker-data-manager.c index e479b44bd..a0bc8e863 100644 --- a/src/libtracker-data/tracker-data-manager.c +++ b/src/libtracker-data/tracker-data-manager.c @@ -30,9 +30,7 @@ #include <glib/gstdio.h> -#if HAVE_TRACKER_FTS #include <libtracker-fts/tracker-fts.h> -#endif #include <libtracker-common/tracker-locale.h> @@ -130,12 +128,10 @@ enum { N_PROPS }; -#if HAVE_TRACKER_FTS static gboolean tracker_data_manager_fts_changed (TrackerDataManager *manager); static void tracker_data_manager_update_fts (TrackerDataManager *manager, TrackerDBInterface *iface, const gchar *database); -#endif static void tracker_data_manager_initable_iface_init (GInitableIface *iface); @@ -3771,7 +3767,6 @@ load_ontologies_gvdb (TrackerDataManager *manager, g_free (filename); } -#if HAVE_TRACKER_FTS static gboolean tracker_data_manager_fts_changed (TrackerDataManager *manager) { @@ -3898,7 +3893,6 @@ tracker_data_manager_update_fts (TrackerDataManager *manager, g_hash_table_unref (fts_properties); g_hash_table_unref (multivalued); } -#endif GFile * tracker_data_manager_get_cache_location (TrackerDataManager *manager) @@ -3987,15 +3981,11 @@ tracker_data_manager_initialize_iface (TrackerDataManager *data_manager, return FALSE; } -#if HAVE_TRACKER_FTS tracker_data_manager_init_fts (data_manager, iface, value, FALSE); -#endif } } -#if HAVE_TRACKER_FTS tracker_data_manager_init_fts (data_manager, iface, "main", FALSE); -#endif return TRUE; } @@ -4247,9 +4237,7 @@ tracker_data_manager_initable_init (GInitable *initable, return FALSE; } -#if HAVE_TRACKER_FTS tracker_data_manager_init_fts (manager, iface, "main", TRUE); -#endif tracker_data_manager_initialize_iface (manager, iface, &internal_error); if (internal_error) { @@ -4582,14 +4570,12 @@ tracker_data_manager_initable_init (GInitable *initable, if (!ontology_error) { /* Perform ALTER-TABLE and CREATE-TABLE calls for all that are is_new */ -#if HAVE_TRACKER_FTS gboolean update_fts; update_fts = tracker_data_manager_fts_changed (manager); if (update_fts) tracker_db_interface_sqlite_fts_delete_table (iface, "main"); -#endif tracker_data_ontology_setup_db (manager, iface, "main", TRUE, &ontology_error); @@ -4603,34 +4589,28 @@ tracker_data_manager_initable_init (GInitable *initable, g_hash_table_iter_init (&iter, graphs); while (g_hash_table_iter_next (&iter, &value, NULL)) { -#if HAVE_TRACKER_FTS if (update_fts) tracker_db_interface_sqlite_fts_delete_table (iface, value); -#endif tracker_data_ontology_setup_db (manager, iface, value, TRUE, &ontology_error); if (ontology_error) break; -#if HAVE_TRACKER_FTS if (update_fts) { tracker_data_manager_update_fts (manager, iface, value); } else { tracker_data_manager_init_fts (manager, iface, value, FALSE); } -#endif } } if (!ontology_error) { -#if HAVE_TRACKER_FTS if (update_fts) { tracker_data_manager_update_fts (manager, iface, "main"); } else { tracker_data_manager_init_fts (manager, iface, "main", FALSE); } -#endif } if (!ontology_error) { @@ -4739,11 +4719,9 @@ skip_ontology_check: tracker_db_manager_set_current_locale (manager->db_manager); -#if HAVE_TRACKER_FTS rebuild_fts_tokens (manager, iface); } else if (!read_only && tracker_db_manager_get_tokenizer_changed (manager->db_manager)) { rebuild_fts_tokens (manager, iface); -#endif } if (!read_only) { @@ -4975,9 +4953,7 @@ tracker_data_manager_create_graph (TrackerDataManager *manager, FALSE, error)) goto detach; -#if HAVE_TRACKER_FTS tracker_data_manager_init_fts (manager, iface, name, TRUE); -#endif id = tracker_data_ensure_graph (manager->data_update, name, error); if (id == 0) diff --git a/src/libtracker-data/tracker-data-update.c b/src/libtracker-data/tracker-data-update.c index e9b9f4ec1..64ebee694 100644 --- a/src/libtracker-data/tracker-data-update.c +++ b/src/libtracker-data/tracker-data-update.c @@ -54,9 +54,7 @@ struct _TrackerDataUpdateBuffer { /* string -> TrackerDataUpdateBufferGraph */ GPtrArray *graphs; -#if HAVE_TRACKER_FTS gboolean fts_ever_updated; -#endif }; struct _TrackerDataUpdateBufferGraph { @@ -80,9 +78,7 @@ struct _TrackerDataUpdateBufferResource { /* TrackerClass */ GPtrArray *types; -#if HAVE_TRACKER_FTS gboolean fts_updated; -#endif }; struct _TrackerDataUpdateBufferProperty { @@ -90,9 +86,7 @@ struct _TrackerDataUpdateBufferProperty { GValue value; guint date_time : 1; -#if HAVE_TRACKER_FTS guint fts : 1; -#endif }; struct _TrackerDataUpdateBufferTable { @@ -599,9 +593,7 @@ cache_insert_value (TrackerData *data, g_value_init (&property.value, G_VALUE_TYPE (value)); g_value_copy (value, &property.value); -#if HAVE_TRACKER_FTS property.fts = fts; -#endif property.date_time = date_time; table = cache_ensure_table (data, table_name, multiple_values); @@ -635,9 +627,7 @@ cache_delete_value (TrackerData *data, g_value_init (&property.value, G_VALUE_TYPE (value)); g_value_copy (value, &property.value); -#if HAVE_TRACKER_FTS property.fts = fts; -#endif property.date_time = date_time; table = cache_ensure_table (data, table_name, multiple_values); @@ -963,7 +953,6 @@ tracker_data_resource_buffer_flush (TrackerData *data, } } -#if HAVE_TRACKER_FTS if (resource->fts_updated) { TrackerProperty *prop; GArray *values; @@ -1006,7 +995,6 @@ tracker_data_resource_buffer_flush (TrackerData *data, g_ptr_array_free (text, TRUE); } } -#endif } static void @@ -1081,9 +1069,7 @@ tracker_data_update_buffer_clear (TrackerData *data) g_hash_table_remove_all (data->update_buffer.resource_cache); data->resource_buffer = NULL; -#if HAVE_TRACKER_FTS data->update_buffer.fts_ever_updated = FALSE; -#endif } static void @@ -1369,12 +1355,10 @@ get_old_property_values (TrackerData *data, GError **error) { GArray *old_values; -#if HAVE_TRACKER_FTS const gchar *database; database = data->resource_buffer->graph->graph ? data->resource_buffer->graph->graph : "main"; -#endif /* read existing property values */ old_values = g_hash_table_lookup (data->resource_buffer->predicates, property); @@ -1388,7 +1372,6 @@ get_old_property_values (TrackerData *data, return NULL; } -#if HAVE_TRACKER_FTS if (tracker_property_get_fulltext_indexed (property)) { TrackerDBInterface *iface; @@ -1458,9 +1441,6 @@ get_old_property_values (TrackerData *data, } else { old_values = get_property_values (data, property); } -#else - old_values = get_property_values (data, property); -#endif } return old_values; @@ -1933,9 +1913,7 @@ cache_delete_resource_type_full (TrackerData *data, if (!single_type) { if (strcmp (tracker_class_get_uri (class), TRACKER_PREFIX_RDFS "Resource") == 0 && g_hash_table_size (data->resource_buffer->tables) == 0) { -#if HAVE_TRACKER_FTS tracker_db_interface_sqlite_fts_delete_id (iface, database, data->resource_buffer->id); -#endif /* skip subclass query when deleting whole resource to improve performance */ @@ -2199,9 +2177,7 @@ resource_buffer_switch (TrackerData *data, } else { resource_buffer->id = ensure_resource_id (data, resource_buffer->subject, &resource_buffer->create); } -#if HAVE_TRACKER_FTS resource_buffer->fts_updated = FALSE; -#endif if (resource_buffer->create) { resource_buffer->types = g_ptr_array_new (); } else { @@ -2655,7 +2631,6 @@ tracker_data_update_statement_with_uri (TrackerData *data, multiple_values = tracker_property_get_multiple_values (property); -#if HAVE_TRACKER_FTS /* This is unavoidable with FTS */ /* This does a check_property_domain too */ old_values = get_old_property_values (data, property, &new_error); @@ -2672,39 +2647,6 @@ tracker_data_update_statement_with_uri (TrackerData *data, g_propagate_error (error, new_error); return; } -#else - /* We can disable correct object-id for deletes array here */ - if (!multiple_values) { - guint r; - - for (r = 0; r < data->resource_buffer->types->len; r++) { - TrackerClass *m_class = g_ptr_array_index (data->resource_buffer->types, r); - - /* We only do the old_values for GraphUpdated in tracker-store. - * The subject's known classes are in resource_buffer->types - * since resource_buffer_switch, so we can quickly check if any - * of them has tracker:notify annotated. If so, get the old - * values for the old_object_id */ - - if (tracker_class_get_notify (m_class)) { - /* This does a check_property_domain too */ - old_values = get_old_property_values (data, property, &new_error); - domain_unchecked = FALSE; - if (!new_error) { - if (old_values->len > 0) { - /* evel knievel cast */ - old_object_id = (gint) g_value_get_int64 (g_value_array_get_nth (old_values, 0)); - } - } else { - g_propagate_error (error, new_error); - return; - } - - break; - } - } - } -#endif /* HAVE_TRACKER_FTS */ if (domain_unchecked && !check_property_domain (data, property)) { g_set_error (error, TRACKER_SPARQL_ERROR, TRACKER_SPARQL_ERROR_CONSTRAINT, @@ -2815,23 +2757,12 @@ tracker_data_update_statement_with_string (TrackerData *data, if (!resource_buffer_switch (data, graph, subject, 0, error)) return; -#if HAVE_TRACKER_FTS /* This is unavoidable with FTS */ get_old_property_values (data, property, &new_error); if (new_error) { g_propagate_error (error, new_error); return; } -#else - if (!check_property_domain (data, property)) { - g_set_error (error, TRACKER_SPARQL_ERROR, TRACKER_SPARQL_ERROR_CONSTRAINT, - "Subject `%s' is not in domain `%s' of property `%s'", - data->resource_buffer->subject, - tracker_class_get_name (tracker_property_get_domain (property)), - tracker_property_get_name (property)); - return; - } -#endif /* HAVE_TRACKER_FTS */ bytes_to_gvalue (object, tracker_property_get_data_type (property), &object_value, data, &new_error); if (new_error) { @@ -3028,11 +2959,9 @@ tracker_data_commit_transaction (TrackerData *data, data->in_transaction = FALSE; data->in_ontology_transaction = FALSE; -#if HAVE_TRACKER_FTS if (data->update_buffer.fts_ever_updated) { data->update_buffer.fts_ever_updated = FALSE; } -#endif tracker_db_interface_execute_query (iface, NULL, "PRAGMA cache_size = %d", TRACKER_DB_CACHE_SIZE_DEFAULT); diff --git a/src/libtracker-data/tracker-db-interface-sqlite.c b/src/libtracker-data/tracker-db-interface-sqlite.c index 3dbfcc233..b57c3a8b3 100644 --- a/src/libtracker-data/tracker-db-interface-sqlite.c +++ b/src/libtracker-data/tracker-db-interface-sqlite.c @@ -33,9 +33,7 @@ #include <libtracker-sparql/tracker-sparql.h> #include <libtracker-sparql/tracker-private.h> -#if HAVE_TRACKER_FTS #include <libtracker-fts/tracker-fts.h> -#endif #ifdef HAVE_LIBUNISTRING @@ -2071,7 +2069,6 @@ close_database (TrackerDBInterface *db_interface) } } -#if HAVE_TRACKER_FTS static gchar ** _fts_create_properties (GHashTable *properties) { @@ -2099,7 +2096,6 @@ _fts_create_properties (GHashTable *properties) return (gchar **) g_ptr_array_free (cols, FALSE); } -#endif void tracker_db_interface_sqlite_fts_init (TrackerDBInterface *db_interface, @@ -2108,7 +2104,6 @@ tracker_db_interface_sqlite_fts_init (TrackerDBInterface *db_interface, GHashTable *multivalued, gboolean create) { -#if HAVE_TRACKER_FTS GStrv fts_columns; tracker_fts_init_db (db_interface->db, db_interface, db_interface->flags, properties); @@ -2137,11 +2132,8 @@ tracker_db_interface_sqlite_fts_init (TrackerDBInterface *db_interface, FALSE); g_strfreev (fts_columns); } -#endif } -#if HAVE_TRACKER_FTS - void tracker_db_interface_sqlite_fts_delete_table (TrackerDBInterface *db_interface, const gchar *database) @@ -2348,8 +2340,6 @@ tracker_db_interface_sqlite_fts_rebuild_tokens (TrackerDBInterface *interface, tracker_fts_rebuild_tokens (interface->db, database, "fts5"); } -#endif - void tracker_db_interface_sqlite_reset_collator (TrackerDBInterface *db_interface) { diff --git a/src/libtracker-data/tracker-db-interface-sqlite.h b/src/libtracker-data/tracker-db-interface-sqlite.h index 9655f1999..517dea506 100644 --- a/src/libtracker-data/tracker-db-interface-sqlite.h +++ b/src/libtracker-data/tracker-db-interface-sqlite.h @@ -64,7 +64,6 @@ gboolean tracker_db_interface_sqlite_wal_checkpoint (TrackerD gboolean tracker_db_interface_init_vtabs (TrackerDBInterface *interface, TrackerOntologies *ontologies); -#if HAVE_TRACKER_FTS void tracker_db_interface_sqlite_fts_delete_table (TrackerDBInterface *interface, const gchar *database); @@ -89,7 +88,6 @@ gboolean tracker_db_interface_sqlite_fts_delete_id (TrackerD void tracker_db_interface_sqlite_fts_rebuild_tokens (TrackerDBInterface *interface, const gchar *database); -#endif gboolean tracker_db_interface_attach_database (TrackerDBInterface *db_interface, GFile *file, diff --git a/src/libtracker-data/tracker-db-manager.c b/src/libtracker-data/tracker-db-manager.c index 46bdea4a9..8292673aa 100644 --- a/src/libtracker-data/tracker-db-manager.c +++ b/src/libtracker-data/tracker-db-manager.c @@ -36,10 +36,6 @@ #include <libtracker-common/tracker-common.h> #include <libtracker-common/tracker-parser.h> -#if HAVE_TRACKER_FTS -#include <libtracker-fts/tracker-fts.h> -#endif - #include "tracker-db-manager.h" #include "tracker-db-interface-sqlite.h" #include "tracker-db-interface.h" diff --git a/tests/functional-tests/meson.build b/tests/functional-tests/meson.build index d5b90dca3..89b78756d 100644 --- a/tests/functional-tests/meson.build +++ b/tests/functional-tests/meson.build @@ -17,6 +17,7 @@ config_json = configure_file( functional_tests = [ 'insertion', 'query', + 'fts-functions', 'sparql-bugs', 'group-concat', 'coalesce', @@ -29,10 +30,6 @@ functional_tests = [ 'cli', ] -if get_option('fts') - functional_tests += 'fts-functions' -endif - test_env = environment() test_env.prepend('GI_TYPELIB_PATH', tracker_sparql_uninstalled_dir) test_env.prepend('LD_LIBRARY_PATH', tracker_sparql_uninstalled_dir) diff --git a/tests/meson.build b/tests/meson.build index 602427fba..de12a4ae6 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -5,13 +5,8 @@ subdir('common') subdir('gvdb') subdir('libtracker-common') subdir('libtracker-data') - -if enable_fts - subdir('libtracker-fts') -endif - +subdir('libtracker-fts') subdir('libtracker-sparql') - subdir('functional-tests') foreach t: tests |