49
50
if (db.exec ("PRAGMA journal_mode = WAL; PRAGMA cache_size = 32100;") != Sqlite.OK)
50
51
db.exec ("PRAGMA synchronous = NORMAL; PRAGMA temp_store = MEMORY;");
52
db.exec ("PRAGMA count_changes = OFF;");
54
int64 version, user_version;
55
Sqlite.Statement stmt;
56
if (db.prepare_v2 ("PRAGMA user_version;", -1, out stmt, null) != Sqlite.OK)
57
throw new DatabaseError.EXECUTE ("Failed to compile statement %s".printf (db.errmsg ()));
58
if (stmt.step () != Sqlite.ROW)
59
throw new DatabaseError.EXECUTE ("Failed to get row %s".printf (db.errmsg ()));
60
version = user_version = stmt.column_int64 (0);
63
exec_script ("Create");
64
user_version = version = 1;
65
exec ("PRAGMA user_version = " + user_version.to_string ());
69
int64 new_version = version + 1;
71
exec_script ("Update" + new_version.to_string ());
72
} catch (DatabaseError error) {
73
if (error is DatabaseError.FILENAME)
77
user_version = new_version;
78
exec ("PRAGMA user_version = " + user_version.to_string ());
85
public bool exec_script (string filename) throws DatabaseError {
52
86
string basename = Path.get_basename (path);
53
87
string[] parts = basename.split (".");
54
88
if (!(parts != null && parts[0] != null && parts[1] != null))
55
throw new DatabaseError.SCHEMA ("Failed to deduce schema filename from %s".printf (path));
56
string schema_filename = Midori.Paths.get_res_filename (parts[0] + "/Create.sql");
89
throw new DatabaseError.NAMING ("Failed to deduce schema filename from %s".printf (path));
90
string schema_filename = Midori.Paths.get_res_filename (parts[0] + "/" + filename + ".sql");
59
93
FileUtils.get_contents (schema_filename, out schema, null);
60
94
} catch (Error error) {
61
throw new DatabaseError.SCHEMA ("Failed to open schema: %s".printf (schema_filename));
95
throw new DatabaseError.FILENAME ("Failed to open schema: %s".printf (schema_filename));
97
schema = "BEGIN TRANSACTION; %s; COMMIT;".printf (schema);
63
98
if (db.exec (schema) != Sqlite.OK)
64
99
throw new DatabaseError.EXECUTE ("Failed to execute schema: %s".printf (schema));