7
7
private class Geary.ImapDB.Database : Geary.Db.VersionedDatabase {
8
8
private const string DB_FILENAME = "geary.db";
9
private const int BUSY_TIMEOUT_MSEC = Db.Connection.RECOMMENDED_BUSY_TIMEOUT_MSEC;
10
9
private string account_owner_email;
12
11
public Database(File db_dir, File schema_dir, string account_owner_email) {
27
26
protected override void post_upgrade(int version) {
30
Db.Result result = query("SELECT sender, from_field, to_field, cc, bcc FROM MessageTable");
31
while (!result.finished) {
32
MessageAddresses message_addresses =
33
new MessageAddresses.from_result(account_owner_email, result);
34
foreach (Contact contact in message_addresses.contacts)
35
do_update_contact_importance(get_master_connection(), contact);
29
post_upgrade_populate_autocomplete();
33
post_upgrade_encode_folder_names();
39
private void post_upgrade_populate_autocomplete() {
41
Db.Result result = query("SELECT sender, from_field, to_field, cc, bcc FROM MessageTable");
42
while (!result.finished) {
43
MessageAddresses message_addresses =
44
new MessageAddresses.from_result(account_owner_email, result);
45
foreach (Contact contact in message_addresses.contacts)
46
do_update_contact_importance(get_master_connection(), contact);
50
debug("Error populating autocompletion table during upgrade to database schema 5");
55
private void post_upgrade_encode_folder_names() {
57
Db.Result select = query("SELECT id, name FROM FolderTable");
58
while (!select.finished) {
59
int64 id = select.int64_at(0);
60
string encoded_name = select.string_at(1);
63
string canonical_name = Geary.ImapUtf7.imap_utf7_to_utf8(encoded_name);
65
Db.Statement update = prepare("UPDATE FolderTable SET name=? WHERE id=?");
66
update.bind_string(0, canonical_name);
67
update.bind_int64(1, id);
70
debug("Error renaming folder %s to its canonical representation: %s", encoded_name, e.message);
39
debug("Error population autocompletion table during upgrade to database schema 5");
76
debug("Error decoding folder names during upgrade to database schema 6: %s", e.message);
44
80
private void on_prepare_database_connection(Db.Connection cx) throws Error {
45
cx.set_busy_timeout_msec(BUSY_TIMEOUT_MSEC);
46
81
cx.set_foreign_keys(true);
47
82
cx.set_recursive_triggers(true);
48
83
cx.set_synchronous(Db.SynchronousMode.OFF);