[geary/mjog/550-always-show-images-not-saved] Use SQL UPSERT clause when updating contacts
- From: Michael Gratton <mjog src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [geary/mjog/550-always-show-images-not-saved] Use SQL UPSERT clause when updating contacts
- Date: Fri, 25 Oct 2019 04:53:05 +0000 (UTC)
commit 6f3b716819cf532eaa08e797583fe03f54176068
Author: Michael Gratton <mike vee net>
Date: Fri Oct 25 15:51:13 2019 +1100
Use SQL UPSERT clause when updating contacts
This saves a round trip in the common case of a contact already
existing. Requires SQLite 3.24 at a minimum, so bump it in meson.build.
meson.build | 2 +-
src/engine/common/common-contact-store-impl.vala | 36 +++++++++---------------
2 files changed, 14 insertions(+), 24 deletions(-)
---
diff --git a/meson.build b/meson.build
index dfa6e9df..0aa80ab6 100644
--- a/meson.build
+++ b/meson.build
@@ -59,7 +59,7 @@ target_webkit = '2.24'
glib = dependency('glib-2.0', version: '>=' + target_glib)
gmime = dependency('gmime-2.6', version: '>= 2.6.17')
gtk = dependency('gtk+-3.0', version: '>=' + target_gtk)
-sqlite = dependency('sqlite3', version: '>= 3.12')
+sqlite = dependency('sqlite3', version: '>= 3.24')
webkit2gtk = dependency('webkit2gtk-4.0', version: '>=' + target_webkit)
# Secondary deps - keep sorted alphabetically
diff --git a/src/engine/common/common-contact-store-impl.vala
b/src/engine/common/common-contact-store-impl.vala
index 8a3745a3..665efb06 100644
--- a/src/engine/common/common-contact-store-impl.vala
+++ b/src/engine/common/common-contact-store-impl.vala
@@ -140,31 +140,21 @@ internal class Geary.ContactStoreImpl : ContactStore, BaseObject {
Contact updated,
GLib.Cancellable? cancellable)
throws GLib.Error {
- Contact? existing = do_fetch_contact(
- cx, updated.email, cancellable
+ Db.Statement stmt = cx.prepare(
+ "INSERT INTO ContactTable(normalized_email, email, real_name, flags, highest_importance) " +
+ "VALUES(?, ?, ?, ?, ?) " +
+ "ON CONFLICT(email) DO UPDATE SET " +
+ "real_name = excluded.real_name" +
+ "flags = excluded.flags " +
+ "highest_importance = excluded.highest_importance"
);
+ stmt.bind_string(0, updated.normalized_email);
+ stmt.bind_string(1, updated.email.make_valid());
+ stmt.bind_string(2, updated.real_name.make_valid());
+ stmt.bind_string(3, updated.flags.serialize());
+ stmt.bind_int(4, updated.highest_importance);
- if (existing == null) {
- // Not found, so just insert it
- Db.Statement stmt = cx.prepare(
- "INSERT INTO ContactTable(normalized_email, email, real_name, flags, highest_importance) "
- + "VALUES(?, ?, ?, ?, ?)");
- stmt.bind_string(0, updated.normalized_email);
- stmt.bind_string(1, updated.email);
- stmt.bind_string(2, updated.real_name);
- stmt.bind_string(3, updated.flags.serialize());
- stmt.bind_int(4, updated.highest_importance);
-
- stmt.exec(cancellable);
- } else {
- Db.Statement stmt = cx.prepare(
- "UPDATE ContactTable SET real_name=?, flags=?, highest_importance=? WHERE email=?");
- stmt.bind_string(0, updated.real_name);
- stmt.bind_string(1, updated.flags.serialize());
- stmt.bind_int(2, updated.highest_importance);
- stmt.bind_string(3, updated.email);
- stmt.exec(cancellable);
- }
+ stmt.exec(cancellable);
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]