Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
GNOME:STABLE:41
tracker
tracker-fix-sqlite-3-44-regressions.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File tracker-fix-sqlite-3-44-regressions.patch of Package tracker
diff --unified --recursive --text --new-file --color tracker-3.2.1.old/src/libtracker-data/tracker-data-manager.c tracker-3.2.1.new/src/libtracker-data/tracker-data-manager.c --- tracker-3.2.1.old/src/libtracker-data/tracker-data-manager.c 2021-10-31 05:18:34.484660600 +0800 +++ tracker-3.2.1.new/src/libtracker-data/tracker-data-manager.c 2024-04-18 16:35:48.792960160 +0800 @@ -3774,12 +3774,16 @@ GHashTable *fts_props, *multivalued; gboolean retval; + if (!create) + return TRUE; + ontology_get_fts_properties (manager, &fts_props, &multivalued); - retval = tracker_db_interface_sqlite_fts_init (iface, - database, - fts_props, - multivalued, create, - error); + retval = tracker_db_interface_sqlite_fts_create_table (iface, + database, + fts_props, + multivalued, + error); + g_hash_table_unref (fts_props); g_hash_table_unref (multivalued); diff --unified --recursive --text --new-file --color tracker-3.2.1.old/src/libtracker-data/tracker-db-interface-sqlite.c tracker-3.2.1.new/src/libtracker-data/tracker-db-interface-sqlite.c --- tracker-3.2.1.old/src/libtracker-data/tracker-db-interface-sqlite.c 2021-10-31 05:18:34.486660700 +0800 +++ tracker-3.2.1.new/src/libtracker-data/tracker-db-interface-sqlite.c 2024-04-18 16:13:01.191293954 +0800 @@ -35,6 +35,7 @@ #include <libtracker-sparql/tracker-private.h> #include <libtracker-fts/tracker-fts.h> +#include <libtracker-fts/tracker-fts-tokenizer.h> #ifdef HAVE_LIBUNISTRING @@ -2264,22 +2265,28 @@ } gboolean -tracker_db_interface_sqlite_fts_init (TrackerDBInterface *db_interface, - const gchar *database, - GHashTable *properties, - GHashTable *multivalued, - gboolean create, - GError **error) +tracker_db_interface_sqlite_fts_init (TrackerDBInterface *db_interface, + TrackerDBManagerFlags fts_flags, + GError **error) +{ + return tracker_tokenizer_initialize (db_interface->db, + db_interface, + fts_flags, + db_interface->user_data, + error); +} + +gboolean +tracker_db_interface_sqlite_fts_create_table (TrackerDBInterface *db_interface, + const gchar *database, + GHashTable *properties, + GHashTable *multivalued, + GError **error) { GError *inner_error = NULL; GStrv fts_columns; - if (!tracker_fts_init_db (db_interface->db, db_interface, - db_interface->flags, properties, error)) - return FALSE; - - if (create && - !tracker_fts_create_table (db_interface->db, database, "fts5", + if (!tracker_fts_create_table (db_interface->db, database, "fts5", properties, multivalued, &inner_error)) { g_propagate_prefixed_error (error, diff --unified --recursive --text --new-file --color tracker-3.2.1.old/src/libtracker-data/tracker-db-interface-sqlite.h tracker-3.2.1.new/src/libtracker-data/tracker-db-interface-sqlite.h --- tracker-3.2.1.old/src/libtracker-data/tracker-db-interface-sqlite.h 2021-10-31 05:18:34.486660700 +0800 +++ tracker-3.2.1.new/src/libtracker-data/tracker-db-interface-sqlite.h 2024-04-18 16:42:32.772261021 +0800 @@ -23,6 +23,7 @@ #include "config.h" #include "tracker-db-interface.h" +#include "tracker-db-manager.h" G_BEGIN_DECLS @@ -49,11 +50,13 @@ GError **error); gint64 tracker_db_interface_sqlite_get_last_insert_id (TrackerDBInterface *interface); void tracker_db_interface_sqlite_enable_shared_cache (void); -gboolean tracker_db_interface_sqlite_fts_init (TrackerDBInterface *interface, +gboolean tracker_db_interface_sqlite_fts_init (TrackerDBInterface *db_interface, + TrackerDBManagerFlags fts_flags, + GError **error); +gboolean tracker_db_interface_sqlite_fts_create_table (TrackerDBInterface *interface, const gchar *database, GHashTable *properties, GHashTable *multivalued, - gboolean create, GError **error); void tracker_db_interface_sqlite_reset_collator (TrackerDBInterface *interface); gboolean tracker_db_interface_sqlite_wal_checkpoint (TrackerDBInterface *interface, diff --unified --recursive --text --new-file --color tracker-3.2.1.old/src/libtracker-data/tracker-db-manager.c tracker-3.2.1.new/src/libtracker-data/tracker-db-manager.c --- tracker-3.2.1.old/src/libtracker-data/tracker-db-manager.c 2021-10-31 05:18:34.486660700 +0800 +++ tracker-3.2.1.new/src/libtracker-data/tracker-db-manager.c 2024-04-18 16:15:41.265384710 +0800 @@ -827,6 +827,11 @@ return NULL; } + if (!tracker_db_interface_sqlite_fts_init (connection, + db_manager->flags, + error)) + return FALSE; + tracker_db_interface_set_max_stmt_cache_size (connection, TRACKER_DB_STATEMENT_CACHE_TYPE_SELECT, db_manager->s_cache_size); diff --unified --recursive --text --new-file --color tracker-3.2.1.old/src/libtracker-fts/tracker-fts.c tracker-3.2.1.new/src/libtracker-fts/tracker-fts.c --- tracker-3.2.1.old/src/libtracker-fts/tracker-fts.c 2021-10-31 05:18:34.494660900 +0800 +++ tracker-3.2.1.new/src/libtracker-fts/tracker-fts.c 2024-04-18 16:28:42.226300032 +0800 @@ -35,63 +35,6 @@ #endif -static gchar ** -get_fts_properties (GHashTable *tables) -{ - GList *table_columns; - GArray *property_names; - GList *keys, *l; - - keys = g_hash_table_get_keys (tables); - keys = g_list_sort (keys, (GCompareFunc) strcmp); - - property_names = g_array_new (TRUE, FALSE, sizeof (gchar *)); - - for (l = keys; l; l = l->next) { - table_columns = g_hash_table_lookup (tables, l->data); - - while (table_columns) { - gchar *str; - - str = g_strdup (table_columns->data); - g_array_append_val (property_names, str); - table_columns = table_columns->next; - } - } - - g_list_free (keys); - - return (gchar **) g_array_free (property_names, FALSE); -} - -gboolean -tracker_fts_init_db (sqlite3 *db, - TrackerDBInterface *interface, - TrackerDBManagerFlags flags, - GHashTable *tables, - GError **error) -{ - gchar **property_names; - gboolean retval; -#ifndef HAVE_BUILTIN_FTS - gchar *err; - - if (sqlite3_load_extension (db, NULL, "sqlite3_fts5_init", &err) != SQLITE_OK) { - g_set_error (error, - TRACKER_DB_INTERFACE_ERROR, - TRACKER_DB_OPEN_ERROR, - "Could not load fts5 module: %s", err); - return FALSE; - } -#endif - - property_names = get_fts_properties (tables); - retval = tracker_tokenizer_initialize (db, interface, flags, (const gchar **) property_names, error); - g_strfreev (property_names); - - return retval; -} - gboolean tracker_fts_create_table (sqlite3 *db, const gchar *database, diff --unified --recursive --text --new-file --color tracker-3.2.1.old/src/libtracker-fts/tracker-fts.h tracker-3.2.1.new/src/libtracker-fts/tracker-fts.h --- tracker-3.2.1.old/src/libtracker-fts/tracker-fts.h 2021-10-31 05:18:34.494660900 +0800 +++ tracker-3.2.1.new/src/libtracker-fts/tracker-fts.h 2024-04-18 16:29:10.576549381 +0800 @@ -29,11 +29,6 @@ G_BEGIN_DECLS -gboolean tracker_fts_init_db (sqlite3 *db, - TrackerDBInterface *interface, - TrackerDBManagerFlags flags, - GHashTable *tables, - GError **error); gboolean tracker_fts_create_table (sqlite3 *db, const gchar *database, gchar *table_name, diff --unified --recursive --text --new-file --color tracker-3.2.1.old/src/libtracker-fts/tracker-fts-tokenizer.c tracker-3.2.1.new/src/libtracker-fts/tracker-fts-tokenizer.c --- tracker-3.2.1.old/src/libtracker-fts/tracker-fts-tokenizer.c 2021-10-31 05:18:34.494660900 +0800 +++ tracker-3.2.1.new/src/libtracker-fts/tracker-fts-tokenizer.c 2024-04-18 16:27:01.832038848 +0800 @@ -49,6 +49,7 @@ struct TrackerTokenizerFunctionData { TrackerDBInterface *interface; + TrackerDataManager *data_manager; gchar **property_names; }; @@ -187,6 +188,37 @@ return SQLITE_OK; } +static gboolean +ensure_fts_properties (TrackerTokenizerFunctionData *data) +{ + TrackerOntologies *ontologies; + TrackerProperty **properties; + GArray *property_names; + guint i, len; + + if (data->property_names) + return data->property_names[0] != NULL; + + ontologies = tracker_data_manager_get_ontologies (data->data_manager); + + property_names = g_array_new (TRUE, FALSE, sizeof (gchar *)); + properties = tracker_ontologies_get_properties (ontologies, &len); + + for (i = 0; i < len; i++) { + gchar *column; + + if (!tracker_property_get_fulltext_indexed (properties[i])) + continue; + + column = g_strdup (tracker_property_get_name (properties[i])); + g_array_append_val (property_names, column); + } + + data->property_names = (gchar **) g_array_free (property_names, FALSE); + + return data->property_names[0] != NULL; +} + static void tracker_offsets_function (const Fts5ExtensionApi *api, Fts5Context *fts_ctx, @@ -207,6 +239,12 @@ } data = api->xUserData (fts_ctx); + + if (!ensure_fts_properties (data)) { + sqlite3_result_null (ctx); + return; + } + rc = api->xInstCount (fts_ctx, &n_hits); if (rc != SQLITE_OK) { @@ -349,6 +387,12 @@ n_columns = api->xColumnCount (fts_ctx); data = api->xUserData (fts_ctx); + + if (!ensure_fts_properties (data)) { + sqlite3_result_null (ctx); + return; + } + weights = get_fts_weights (data->interface, ctx); if (!weights) { @@ -424,14 +468,14 @@ } static TrackerTokenizerFunctionData * -tracker_tokenizer_function_data_new (TrackerDBInterface *interface, - const gchar **property_names) +tracker_tokenizer_function_data_new (TrackerDBInterface *interface, + TrackerDataManager *data_manager) { TrackerTokenizerFunctionData *data; data = g_new0 (TrackerTokenizerFunctionData, 1); data->interface = interface; - data->property_names = g_strdupv ((gchar **) property_names); + data->data_manager = data_manager; return data; } @@ -447,7 +491,7 @@ tracker_tokenizer_initialize (sqlite3 *db, TrackerDBInterface *interface, TrackerDBManagerFlags flags, - const gchar **property_names, + TrackerDataManager *data_manager, GError **error) { TrackerTokenizerData *data; @@ -466,13 +510,13 @@ tracker_tokenizer_data_free); /* Offsets */ - func_data = tracker_tokenizer_function_data_new (interface, property_names); + func_data = tracker_tokenizer_function_data_new (interface, data_manager); api->xCreateFunction (api, "tracker_offsets", func_data, &tracker_offsets_function, (GDestroyNotify) tracker_tokenizer_function_data_free); /* Rank */ - func_data = tracker_tokenizer_function_data_new (interface, property_names); + func_data = tracker_tokenizer_function_data_new (interface, data_manager); api->xCreateFunction (api, "tracker_rank", func_data, &tracker_rank_function, (GDestroyNotify) tracker_tokenizer_function_data_free); diff --unified --recursive --text --new-file --color tracker-3.2.1.old/src/libtracker-fts/tracker-fts-tokenizer.h tracker-3.2.1.new/src/libtracker-fts/tracker-fts-tokenizer.h --- tracker-3.2.1.old/src/libtracker-fts/tracker-fts-tokenizer.h 2021-10-31 05:18:34.494660900 +0800 +++ tracker-3.2.1.new/src/libtracker-fts/tracker-fts-tokenizer.h 2024-04-18 16:40:25.444797053 +0800 @@ -22,6 +22,7 @@ #include <sqlite3.h> #include <glib.h> #include <libtracker-data/tracker-db-manager.h> +#include <libtracker-data/tracker-data-manager.h> #ifndef __TRACKER_FTS_TOKENIZER_H__ #define __TRACKER_FTS_TOKENIZER_H__ @@ -29,7 +30,7 @@ gboolean tracker_tokenizer_initialize (sqlite3 *db, TrackerDBInterface *interface, TrackerDBManagerFlags flags, - const gchar **property_names, + TrackerDataManager *data_manager, GError **error); #endif /* __TRACKER_FTS_TOKENIZER_H__ */
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor