summaryrefslogtreecommitdiff
path: root/src/db/VersionTable.vala
diff options
context:
space:
mode:
Diffstat (limited to 'src/db/VersionTable.vala')
-rw-r--r--src/db/VersionTable.vala98
1 files changed, 98 insertions, 0 deletions
diff --git a/src/db/VersionTable.vala b/src/db/VersionTable.vala
new file mode 100644
index 0000000..9003b1b
--- /dev/null
+++ b/src/db/VersionTable.vala
@@ -0,0 +1,98 @@
+/* Copyright 2011-2014 Yorba Foundation
+ *
+ * This software is licensed under the GNU Lesser General Public License
+ * (version 2.1 or later). See the COPYING file in this distribution.
+ */
+
+public class VersionTable : DatabaseTable {
+ private static VersionTable instance = null;
+
+ private VersionTable() {
+ Sqlite.Statement stmt;
+ int res = db.prepare_v2("CREATE TABLE IF NOT EXISTS VersionTable ("
+ + "id INTEGER PRIMARY KEY, "
+ + "schema_version INTEGER, "
+ + "app_version TEXT, "
+ + "user_data TEXT NULL"
+ + ")", -1, out stmt);
+ assert(res == Sqlite.OK);
+
+ res = stmt.step();
+ if (res != Sqlite.DONE)
+ fatal("create version table", res);
+
+ set_table_name("VersionTable");
+ }
+
+ public static VersionTable get_instance() {
+ if (instance == null)
+ instance = new VersionTable();
+
+ return instance;
+ }
+
+ public int get_version(out string app_version) {
+ Sqlite.Statement stmt;
+ int res = db.prepare_v2("SELECT schema_version, app_version FROM VersionTable ORDER BY schema_version DESC LIMIT 1",
+ -1, out stmt);
+ assert(res == Sqlite.OK);
+
+ res = stmt.step();
+ if (res != Sqlite.ROW) {
+ if (res != Sqlite.DONE)
+ fatal("get_version", res);
+
+ app_version = null;
+
+ return -1;
+ }
+
+ app_version = stmt.column_text(1);
+
+ return stmt.column_int(0);
+ }
+
+ public void set_version(int version, string app_version, string? user_data = null) {
+ Sqlite.Statement stmt;
+
+ string bitbucket;
+ if (get_version(out bitbucket) != -1) {
+ // overwrite existing row
+ int res = db.prepare_v2("UPDATE VersionTable SET schema_version=?, app_version=?, user_data=?",
+ -1, out stmt);
+ assert(res == Sqlite.OK);
+ } else {
+ // insert new row
+ int res = db.prepare_v2("INSERT INTO VersionTable (schema_version, app_version, user_data) VALUES (?,?, ?)",
+ -1, out stmt);
+ assert(res == Sqlite.OK);
+ }
+
+ int res = stmt.bind_int(1, version);
+ assert(res == Sqlite.OK);
+ res = stmt.bind_text(2, app_version);
+ assert(res == Sqlite.OK);
+ res = stmt.bind_text(3, user_data);
+ assert(res == Sqlite.OK);
+
+ res = stmt.step();
+ if (res != Sqlite.DONE)
+ fatal("set_version %d %s %s".printf(version, app_version, user_data), res);
+ }
+
+ public void update_version(int version, string app_version) {
+ Sqlite.Statement stmt;
+ int res = db.prepare_v2("UPDATE VersionTable SET schema_version=?, app_version=?", -1, out stmt);
+ assert(res == Sqlite.OK);
+
+ res = stmt.bind_int(1, version);
+ assert(res == Sqlite.OK);
+ res = stmt.bind_text(2, app_version);
+ assert(res == Sqlite.OK);
+
+ res = stmt.step();
+ if (res != Sqlite.DONE)
+ fatal("update_version %d".printf(version), res);
+ }
+}
+