[Rawstudio-commit] r3017 - branches/rawstudio-ng-color/src

Anders Kvist anders at kvistmail.dk
Sun Jan 17 01:25:55 CET 2010


Author: akv
Date: 2010-01-17 01:25:55 +0100 (Sun, 17 Jan 2010)
New Revision: 3017

Modified:
   branches/rawstudio-ng-color/src/rs-library.c
Log:
Added version in database - starting at 0 (current).

Modified: branches/rawstudio-ng-color/src/rs-library.c
===================================================================
--- branches/rawstudio-ng-color/src/rs-library.c	2010-01-16 23:37:08 UTC (rev 3016)
+++ branches/rawstudio-ng-color/src/rs-library.c	2010-01-17 00:25:55 UTC (rev 3017)
@@ -36,6 +36,9 @@
  *   photo
  *   tag
  *   autotag
+ *
+ * version
+ *   version
  */
 /*
 #include <glib.h>
@@ -56,6 +59,8 @@
 #include "config.h"
 #include "gettext.h"
 
+#define LIBRARY_VERSION 0
+
 struct _RSLibrary {
 	GObject parent;
 	gboolean dispose_has_run;
@@ -120,7 +125,72 @@
 	object_class->finalize = rs_library_finalize;
 }
 
+static gint
+library_set_version(sqlite3 *db, gint version)
+{
+	sqlite3_stmt *stmt;
+	gint rc;
+
+	rc = sqlite3_prepare_v2(db, "update version set version = ?1;", -1, &stmt, NULL);
+	rc = sqlite3_bind_int(stmt, 1, version);
+	rc = sqlite3_step(stmt);
+	library_sqlite_error(db, rc);
+	sqlite3_finalize(stmt);
+
+	return SQLITE_OK;
+}
+
 static void
+library_check_version(sqlite3 *db)
+{
+	sqlite3_stmt *stmt;
+	gint rc, version = 0;
+
+	rc = sqlite3_prepare_v2(db, "SELECT version FROM version", -1, &stmt, NULL);
+	rc = sqlite3_step(stmt);
+	if (rc == SQLITE_ROW)
+		version = sqlite3_column_int(stmt, 0);
+	rc = sqlite3_finalize(stmt);
+
+	while (version < LIBRARY_VERSION)
+	{
+		switch (version)
+		{
+		case 0:
+			/* Add missing version table */
+			sqlite3_prepare_v2(db, "create table version (version integer)", -1, &stmt, NULL);
+			rc = sqlite3_step(stmt);
+			library_sqlite_error(db, rc);
+			sqlite3_finalize(stmt);
+
+			/* Set current version */
+			rc = sqlite3_prepare_v2(db, "insert into version (version) values (?1);", -1, &stmt, NULL);
+			rc = sqlite3_bind_int(stmt, 1, LIBRARY_VERSION);
+			rc = sqlite3_step(stmt);
+			library_sqlite_error(db, rc);
+			sqlite3_finalize(stmt);
+
+			/* Alter table library - add identifier column */
+			sqlite3_prepare_v2(db, "alter table library add column identifier varchar(32)", -1, &stmt, NULL);
+			rc = sqlite3_step(stmt);
+			library_sqlite_error(db, rc);
+			sqlite3_finalize(stmt);
+
+			library_set_version(db, version+1);
+			break;
+
+		default:
+			/* We should never hit this */
+			g_debug("Some error occured in library_check_version() - please notify developers");
+			break;
+		}
+
+		version++;
+		g_debug("Updated library database to version %d", version);
+	}
+}
+
+static void
 rs_library_init(RSLibrary *library)
 {
 	int rc;
@@ -153,6 +223,8 @@
 	rc = library_create_tables(library->db);
 	library_sqlite_error(library->db, rc);
 
+	library_check_version(library->db);
+
 	library->id_lock = g_mutex_new();
 }
 
@@ -213,6 +285,17 @@
 	rc = sqlite3_step(stmt);
 	sqlite3_finalize(stmt);
 
+	/* Create table (version) to help keeping track of database version */
+	sqlite3_prepare_v2(db, "create table version (version integer)", -1, &stmt, NULL);
+	rc = sqlite3_step(stmt);
+	sqlite3_finalize(stmt);
+
+	/* Set current version */
+	rc = sqlite3_prepare_v2(db, "insert into version (version) values (?1);", -1, &stmt, NULL);
+	rc = sqlite3_bind_int(stmt, 1, LIBRARY_VERSION);
+	rc = sqlite3_step(stmt);
+	sqlite3_finalize(stmt);
+
 	return SQLITE_OK;
 }
 




More information about the Rawstudio-commit mailing list