[tracker/wip/carlosg/sparql1.1: 99/113] libtracker-data: Use user_version pragma to store database version
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/wip/carlosg/sparql1.1: 99/113] libtracker-data: Use user_version pragma to store database version
- Date: Sun, 21 Jul 2019 14:37:33 +0000 (UTC)
commit 1797fd70d3f76b13ffee67812096f6a4dd5d5290
Author: Carlos Garnacho <carlosg gnome org>
Date: Thu Jul 18 21:59:21 2019 +0200
libtracker-data: Use user_version pragma to store database version
Keep it inside the database, instead of in an additional file.
src/libtracker-data/tracker-data-backup.c | 5 +-
src/libtracker-data/tracker-db-manager.c | 111 ++++++++++++------------------
src/libtracker-data/tracker-db-manager.h | 3 +-
src/tracker/tracker-reset.c | 1 -
4 files changed, 45 insertions(+), 75 deletions(-)
---
diff --git a/src/libtracker-data/tracker-data-backup.c b/src/libtracker-data/tracker-data-backup.c
index 35acf7cbf..3ae82962b 100644
--- a/src/libtracker-data/tracker-data-backup.c
+++ b/src/libtracker-data/tracker-data-backup.c
@@ -259,10 +259,7 @@ tracker_data_backup_restore (TrackerDataManager *manager,
tracker_db_manager_ensure_locations (db_manager, cache_location, data_location);
- /* Re-set the DB version file, so that its mtime changes. The mtime of this
- * file will change only when the whole DB is recreated (after a hard reset
- * or after a backup restoration). */
- tracker_db_manager_create_version_file (db_manager);
+ tracker_db_manager_update_version (db_manager);
manager = tracker_data_manager_new (flags, cache_location, data_location, ontology_location,
TRUE, select_cache_size, update_cache_size);
diff --git a/src/libtracker-data/tracker-db-manager.c b/src/libtracker-data/tracker-db-manager.c
index e1309a135..b741f0d6e 100644
--- a/src/libtracker-data/tracker-db-manager.c
+++ b/src/libtracker-data/tracker-db-manager.c
@@ -61,7 +61,6 @@
/* Set current database version we are working with */
#define TRACKER_DB_VERSION_NOW TRACKER_DB_VERSION_0_15_2
-#define TRACKER_DB_VERSION_FILE "db-version.txt"
#define TRACKER_DB_LOCALE_FILE "db-locale.txt"
#define TRACKER_VACUUM_CHECK_SIZE ((goffset) 4 * 1024 * 1024 * 1024) /* 4GB */
@@ -290,73 +289,51 @@ tracker_db_manager_remove_all (TrackerDBManager *db_manager)
static TrackerDBVersion
db_get_version (TrackerDBManager *db_manager)
{
- TrackerDBVersion version;
- gchar *filename;
-
- filename = g_build_filename (db_manager->data_dir, TRACKER_DB_VERSION_FILE, NULL);
-
- if (G_LIKELY (g_file_test (filename, G_FILE_TEST_EXISTS))) {
- gchar *contents;
-
- /* Check version is correct */
- if (G_LIKELY (g_file_get_contents (filename, &contents, NULL, NULL))) {
- if (contents && strlen (contents) <= 2) {
- version = atoi (contents);
- } else {
- g_info (" Version file content size is either 0 or bigger than expected");
-
- version = TRACKER_DB_VERSION_UNKNOWN;
- }
+ TrackerDBInterface *iface;
+ TrackerDBStatement *stmt;
+ TrackerDBCursor *cursor;
+ TrackerDBVersion version;
- g_free (contents);
- } else {
- g_info (" Could not get content of file '%s'", filename);
+ iface = tracker_db_manager_get_writable_db_interface (db_manager);
+ stmt = tracker_db_interface_create_statement (iface, TRACKER_DB_STATEMENT_CACHE_TYPE_NONE,
+ NULL, "PRAGMA user_version");
+ if (!stmt)
+ return TRACKER_DB_VERSION_UNKNOWN;
- version = TRACKER_DB_VERSION_UNKNOWN;
- }
- } else {
- g_info (" Could not find database version file:'%s'", filename);
- g_info (" Current databases are either old or no databases are set up yet");
+ cursor = tracker_db_statement_start_cursor (stmt, NULL);
+ g_object_unref (stmt);
- version = TRACKER_DB_VERSION_UNKNOWN;
+ if (!cursor || !tracker_db_cursor_iter_next (cursor, NULL, NULL)) {
+ g_clear_object (&cursor);
+ return TRACKER_DB_VERSION_UNKNOWN;
}
- g_free (filename);
+ version = tracker_db_cursor_get_int (cursor, 0);
+ g_object_unref (cursor);
return version;
}
void
-tracker_db_manager_create_version_file (TrackerDBManager *db_manager)
+tracker_db_manager_update_version (TrackerDBManager *db_manager)
{
+ TrackerDBInterface *iface;
+ TrackerDBStatement *stmt;
GError *error = NULL;
- gchar *filename;
- gchar *str;
- filename = g_build_filename (db_manager->data_dir, TRACKER_DB_VERSION_FILE, NULL);
- g_info (" Creating version file '%s'", filename);
-
- str = g_strdup_printf ("%d", TRACKER_DB_VERSION_NOW);
-
- if (!g_file_set_contents (filename, str, -1, &error)) {
- g_info (" Could not set file contents, %s",
- error ? error->message : "no error given");
- g_clear_error (&error);
+ iface = tracker_db_manager_get_writable_db_interface (db_manager);
+ stmt = tracker_db_interface_create_statement (iface, TRACKER_DB_STATEMENT_CACHE_TYPE_NONE,
+ &error, "PRAGMA user_version = %d",
+ TRACKER_DB_VERSION_NOW);
+ if (stmt) {
+ tracker_db_statement_execute (stmt, &error);
+ g_object_unref (stmt);
}
- g_free (str);
- g_free (filename);
-}
-
-void
-tracker_db_manager_remove_version_file (TrackerDBManager *db_manager)
-{
- gchar *filename;
-
- filename = g_build_filename (db_manager->data_dir, TRACKER_DB_VERSION_FILE, NULL);
- g_info (" Removing db-version file:'%s'", filename);
- g_unlink (filename);
- g_free (filename);
+ if (error) {
+ g_critical ("Could not set database version: %s\n", error->message);
+ g_error_free (error);
+ }
}
static void
@@ -651,19 +628,6 @@ tracker_db_manager_new (TrackerDBManagerFlags flags,
g_mkdir_with_parents (db_manager->data_dir, 00755);
g_mkdir_with_parents (db_manager->user_data_dir, 00755);
-
- g_info ("Checking database version");
-
- version = db_get_version (db_manager);
-
- if (version < TRACKER_DB_VERSION_NOW) {
- g_info (" A reindex will be forced");
- need_reindex = TRUE;
- }
-
- if (need_reindex) {
- tracker_db_manager_create_version_file (db_manager);
- }
}
g_info ("Checking whether database files exist");
@@ -674,8 +638,7 @@ tracker_db_manager_new (TrackerDBManagerFlags flags,
* There's no need to check for files not existing (for
* reindex) if reindexing is already needed.
*/
- if (!need_reindex &&
- !g_file_test (db_manager->db.abs_filename, G_FILE_TEST_EXISTS)) {
+ if (!g_file_test (db_manager->db.abs_filename, G_FILE_TEST_EXISTS)) {
if ((flags & TRACKER_DB_MANAGER_READONLY) == 0) {
g_info ("Could not find database file:'%s', reindex will be forced",
db_manager->db.abs_filename);
need_reindex = TRUE;
@@ -688,8 +651,18 @@ tracker_db_manager_new (TrackerDBManagerFlags flags,
g_object_unref (db_manager);
return NULL;
}
+ } else {
+ g_info ("Checking database version");
+
+ version = db_get_version (db_manager);
+
+ if (version < TRACKER_DB_VERSION_NOW) {
+ g_info (" A reindex will be forced");
+ need_reindex = TRUE;
+ }
}
+
db_manager->locations_initialized = TRUE;
/* Don't do remove-dbs for readonly (direct-access) */
@@ -735,6 +708,8 @@ tracker_db_manager_new (TrackerDBManagerFlags flags,
return NULL;
}
+ tracker_db_manager_update_version (db_manager);
+
/* Load databases */
g_info ("Loading databases files...");
diff --git a/src/libtracker-data/tracker-db-manager.h b/src/libtracker-data/tracker-db-manager.h
index 5ce937773..8ec850e7f 100644
--- a/src/libtracker-data/tracker-db-manager.h
+++ b/src/libtracker-data/tracker-db-manager.h
@@ -71,8 +71,7 @@ void tracker_db_manager_ensure_locations (TrackerDBManager
GFile *cache_location,
GFile *data_location);
gboolean tracker_db_manager_has_enough_space (TrackerDBManager *db_manager);
-void tracker_db_manager_create_version_file (TrackerDBManager *db_manager);
-void tracker_db_manager_remove_version_file (TrackerDBManager *db_manager);
+void tracker_db_manager_update_version (TrackerDBManager *db_manager);
TrackerDBManagerFlags
tracker_db_manager_get_flags (TrackerDBManager *db_manager,
diff --git a/src/tracker/tracker-reset.c b/src/tracker/tracker-reset.c
index 18dab4e0d..8457f6261 100644
--- a/src/tracker/tracker-reset.c
+++ b/src/tracker/tracker-reset.c
@@ -263,7 +263,6 @@ reset_run (void)
tracker_db_manager_remove_all (db_manager);
- tracker_db_manager_remove_version_file (db_manager);
g_object_unref (db_manager);
/* Unset log handler */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]