1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
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);
}
}
|