Merge lp:~kalikiana/midori/dbupdate into lp:midori

Proposed by Cris Dywan
Status: Merged
Approved by: André Stösel
Approved revision: 6406
Merged at revision: 6405
Proposed branch: lp:~kalikiana/midori/dbupdate
Merge into: lp:midori
Diff against target: 256 lines (+80/-69)
8 files modified
data/forms/Create.sql (+6/-0)
data/history/Day.sql (+14/-0)
extensions/formhistory/formhistory-frontend.h (+1/-0)
extensions/formhistory/formhistory-gdom-frontend.c (+1/-5)
extensions/formhistory/formhistory.c (+12/-31)
midori/midori-database.vala (+40/-7)
midori/midori-history.c (+0/-26)
midori/midori-historydatabase.vala (+6/-0)
To merge this branch: bzr merge lp:~kalikiana/midori/dbupdate
Reviewer Review Type Date Requested Status
André Stösel Approve
Review via email: mp+186156@code.launchpad.net

Commit message

Refactor excuting schema from file into a function

To post a comment you must log in.
lp:~kalikiana/midori/dbupdate updated
6406. By André Stösel

fix Create.sql to avoid errors if the db already exists

Revision history for this message
André Stösel (ivaldi) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added directory 'data/forms'
2=== added file 'data/forms/Create.sql'
3--- data/forms/Create.sql 1970-01-01 00:00:00 +0000
4+++ data/forms/Create.sql 2013-09-18 16:11:48 +0000
5@@ -0,0 +1,6 @@
6+CREATE TABLE IF NOT EXISTS forms
7+(
8+ domain text,
9+ field text,
10+ value text
11+)
12
13=== added file 'data/history/Day.sql'
14--- data/history/Day.sql 1970-01-01 00:00:00 +0000
15+++ data/history/Day.sql 2013-09-18 16:11:48 +0000
16@@ -0,0 +1,14 @@
17+CREATE TEMPORARY TABLE backup
18+(
19+ uri text,
20+ title text,
21+ date integer
22+);
23+INSERT INTO backup SELECT uri, title, date FROM history;
24+DROP TABLE history;
25+CREATE TABLE history (uri text, title text, date integer, day integer);
26+INSERT INTO history SELECT uri, title, date,
27+ julianday(date(date,'unixepoch','start of day','+1 day'))
28+ - julianday('0001-01-01','start of day')
29+ FROM backup;
30+DROP TABLE backup;
31
32=== modified file 'extensions/formhistory/formhistory-frontend.h'
33--- extensions/formhistory/formhistory-frontend.h 2013-06-17 19:15:01 +0000
34+++ extensions/formhistory/formhistory-frontend.h 2013-09-18 16:11:48 +0000
35@@ -22,6 +22,7 @@
36
37 typedef struct
38 {
39+ MidoriDatabase* database;
40 sqlite3* db;
41 WebKitDOMElement* element;
42 int completion_timeout;
43
44=== modified file 'extensions/formhistory/formhistory-gdom-frontend.c'
45--- extensions/formhistory/formhistory-gdom-frontend.c 2013-06-17 19:15:01 +0000
46+++ extensions/formhistory/formhistory-gdom-frontend.c 2013-09-18 16:11:48 +0000
47@@ -457,11 +457,7 @@
48 void
49 formhistory_private_destroy (FormHistoryPriv *priv)
50 {
51- if (priv->db)
52- {
53- sqlite3_close (priv->db);
54- priv->db = NULL;
55- }
56+ katze_object_assign (priv->database, NULL);
57 katze_assign (priv->oldkeyword, NULL);
58 gtk_widget_destroy (priv->popup);
59 priv->popup = NULL;
60
61=== modified file 'extensions/formhistory/formhistory.c'
62--- extensions/formhistory/formhistory.c 2013-08-12 19:21:06 +0000
63+++ extensions/formhistory/formhistory.c 2013-09-18 16:11:48 +0000
64@@ -489,44 +489,25 @@
65 formhistory_new (const gchar* config_dir)
66 {
67 gchar* filename;
68- sqlite3* db;
69- char* errmsg = NULL, *errmsg2 = NULL;
70+ GError* error = NULL;
71 FormHistoryPriv* priv = formhistory_private_new ();
72 priv->master_password = NULL;
73 priv->master_password_canceled = 0;
74 formhistory_construct_popup_gui (priv);
75
76 filename = g_build_filename (config_dir, "forms.db", NULL);
77- if (sqlite3_open (filename, &db) != SQLITE_OK)
78- {
79- g_warning (_("Failed to open database: %s\n"), sqlite3_errmsg (db));
80- sqlite3_close (db);
81- }
82+ priv->database = midori_database_new (filename, &error);
83 g_free (filename);
84- if ((sqlite3_exec (db, "CREATE TABLE IF NOT EXISTS "
85- "forms (domain text, field text, value text)",
86- NULL, NULL, &errmsg) == SQLITE_OK))
87- {
88- sqlite3_exec (db,
89- /* "PRAGMA synchronous = OFF; PRAGMA temp_store = MEMORY" */
90- "PRAGMA count_changes = OFF; PRAGMA journal_mode = TRUNCATE;",
91- NULL, NULL, &errmsg);
92- priv->db = db;
93- }
94- else
95- {
96- if (errmsg)
97- {
98- g_critical (_("Failed to execute database statement: %s\n"), errmsg);
99- sqlite3_free (errmsg);
100- if (errmsg2)
101- {
102- g_critical (_("Failed to execute database statement: %s\n"), errmsg2);
103- sqlite3_free (errmsg2);
104- }
105- }
106- sqlite3_close (db);
107- }
108+ if (error != NULL)
109+ {
110+ g_critical ("%s", error->message);
111+ g_error_free (error);
112+ priv->db = NULL;
113+ return priv;
114+ }
115+
116+ priv->db = midori_database_get_db (MIDORI_DATABASE (priv->database));
117+ g_warn_if_fail (priv->db != NULL);
118 return priv;
119 }
120
121
122=== modified file 'midori/midori-database.vala'
123--- midori/midori-database.vala 2013-09-13 21:24:57 +0000
124+++ midori/midori-database.vala 2013-09-18 16:11:48 +0000
125@@ -12,7 +12,8 @@
126 namespace Midori {
127 public errordomain DatabaseError {
128 OPEN,
129- SCHEMA,
130+ NAMING,
131+ FILENAME,
132 EXECUTE,
133 }
134
135@@ -48,22 +49,54 @@
136
137 if (db.exec ("PRAGMA journal_mode = WAL; PRAGMA cache_size = 32100;") != Sqlite.OK)
138 db.exec ("PRAGMA synchronous = NORMAL; PRAGMA temp_store = MEMORY;");
139-
140+ db.exec ("PRAGMA count_changes = OFF;");
141+
142+ int64 version, user_version;
143+ Sqlite.Statement stmt;
144+ if (db.prepare_v2 ("PRAGMA user_version;", -1, out stmt, null) != Sqlite.OK)
145+ throw new DatabaseError.EXECUTE ("Failed to compile statement %s".printf (db.errmsg ()));
146+ if (stmt.step () != Sqlite.ROW)
147+ throw new DatabaseError.EXECUTE ("Failed to get row %s".printf (db.errmsg ()));
148+ version = user_version = stmt.column_int64 (0);
149+
150+ if (version == 0) {
151+ exec_script ("Create");
152+ user_version = version = 1;
153+ exec ("PRAGMA user_version = " + user_version.to_string ());
154+ }
155+
156+ while (true) {
157+ int64 new_version = version + 1;
158+ try {
159+ exec_script ("Update" + new_version.to_string ());
160+ } catch (DatabaseError error) {
161+ if (error is DatabaseError.FILENAME)
162+ break;
163+ throw error;
164+ }
165+ user_version = new_version;
166+ exec ("PRAGMA user_version = " + user_version.to_string ());
167+ }
168+
169+ first_use = !exists;
170+ return true;
171+ }
172+
173+ public bool exec_script (string filename) throws DatabaseError {
174 string basename = Path.get_basename (path);
175 string[] parts = basename.split (".");
176 if (!(parts != null && parts[0] != null && parts[1] != null))
177- throw new DatabaseError.SCHEMA ("Failed to deduce schema filename from %s".printf (path));
178- string schema_filename = Midori.Paths.get_res_filename (parts[0] + "/Create.sql");
179+ throw new DatabaseError.NAMING ("Failed to deduce schema filename from %s".printf (path));
180+ string schema_filename = Midori.Paths.get_res_filename (parts[0] + "/" + filename + ".sql");
181 string schema;
182 try {
183 FileUtils.get_contents (schema_filename, out schema, null);
184 } catch (Error error) {
185- throw new DatabaseError.SCHEMA ("Failed to open schema: %s".printf (schema_filename));
186+ throw new DatabaseError.FILENAME ("Failed to open schema: %s".printf (schema_filename));
187 }
188+ schema = "BEGIN TRANSACTION; %s; COMMIT;".printf (schema);
189 if (db.exec (schema) != Sqlite.OK)
190 throw new DatabaseError.EXECUTE ("Failed to execute schema: %s".printf (schema));
191-
192- first_use = !exists;
193 return true;
194 }
195
196
197=== modified file 'midori/midori-history.c'
198--- midori/midori-history.c 2013-09-13 21:24:57 +0000
199+++ midori/midori-history.c 2013-09-18 16:11:48 +0000
200@@ -33,11 +33,6 @@
201 MidoriHistoryDatabase* database;
202 GError* error = NULL;
203 sqlite3* db;
204- gboolean has_day = FALSE;
205- sqlite3_stmt* stmt;
206- gint result;
207- gchar* sql;
208- gchar* bookmarks_filename;
209 KatzeArray* array;
210
211 g_return_val_if_fail (errmsg != NULL, NULL);
212@@ -53,27 +48,6 @@
213 db = midori_database_get_db (MIDORI_DATABASE (database));
214 g_return_val_if_fail (db != NULL, NULL);
215
216- sqlite3_prepare_v2 (db, "SELECT day FROM history LIMIT 1", -1, &stmt, NULL);
217- result = sqlite3_step (stmt);
218- if (result == SQLITE_ROW)
219- has_day = TRUE;
220- sqlite3_finalize (stmt);
221-
222- if (!has_day)
223- sqlite3_exec (db,
224- "BEGIN TRANSACTION;"
225- "CREATE TEMPORARY TABLE backup (uri text, title text, date integer);"
226- "INSERT INTO backup SELECT uri,title,date FROM history;"
227- "DROP TABLE history;"
228- "CREATE TABLE history (uri text, title text, date integer, day integer);"
229- "INSERT INTO history SELECT uri,title,date,"
230- "julianday(date(date,'unixepoch','start of day','+1 day'))"
231- " - julianday('0001-01-01','start of day')"
232- "FROM backup;"
233- "DROP TABLE backup;"
234- "COMMIT;",
235- NULL, NULL, errmsg);
236-
237 array = katze_array_new (KATZE_TYPE_ARRAY);
238 g_object_set_data (G_OBJECT (array), "db", db);
239 g_signal_connect (array, "clear",
240
241=== modified file 'midori/midori-historydatabase.vala'
242--- midori/midori-historydatabase.vala 2013-09-13 21:24:57 +0000
243+++ midori/midori-historydatabase.vala 2013-09-18 16:11:48 +0000
244@@ -41,6 +41,12 @@
245 init ();
246 string bookmarks_filename = Midori.Paths.get_config_filename_for_writing ("bookmarks_v2.db");
247 exec ("ATTACH DATABASE '%s' AS bookmarks".printf (bookmarks_filename));
248+
249+ try {
250+ exec ("SELECT day FROM history LIMIT 1");
251+ } catch (Error error) {
252+ exec_script ("Day");
253+ }
254 }
255
256 public async List<HistoryItem>? query (string sqlcmd, string? filter, int day, int max_items, Cancellable cancellable) {

Subscribers

People subscribed via source and target branches

to all changes: