gjdwebserver-overlay/mail-client/geary/files/0001-Geary.Db.Context-Update-access-to-DatabaseConnection.patch

236 lines
7.9 KiB
Diff
Raw Normal View History

2021-03-23 14:05:24 +01:00
From 3b6dd303323cfc5b7bebe5b1d88170f1030f2de2 Mon Sep 17 00:00:00 2001
From: Michael Gratton <mike@vee.net>
Date: Sat, 5 Sep 2020 14:13:01 +1000
Subject: [PATCH 001/124] Geary.Db.Context: Update access to
DatabaseConnections
Ensure internal code can access a DatabaseConnection from context
objects to get access to connection-specific code, but make the
polymorphic context accessors internal so transactions can't access
them.
---
src/engine/db/db-connection.vala | 5 +++--
src/engine/db/db-context.vala | 8 ++++----
src/engine/db/db-database-connection.vala | 8 ++++----
src/engine/db/db-database.vala | 8 ++++----
src/engine/db/db-result.vala | 8 ++++----
src/engine/db/db-statement.vala | 19 ++++++++++++-------
src/engine/db/db-transaction-connection.vala | 11 +----------
src/engine/imap-db/imap-db-attachment.vala | 2 +-
8 files changed, 33 insertions(+), 36 deletions(-)
diff --git a/src/engine/db/db-connection.vala b/src/engine/db/db-connection.vala
index 4f0859e1..ebce27dc 100644
--- a/src/engine/db/db-connection.vala
+++ b/src/engine/db/db-connection.vala
@@ -18,7 +18,7 @@
* A connection will be automatically closed when its last reference
* is dropped.
*/
-public interface Geary.Db.Connection : Context {
+public interface Geary.Db.Connection : BaseObject {
private const string PRAGMA_FOREIGN_KEYS = "foreign_keys";
private const string PRAGMA_RECURSIVE_TRIGGERS = "recursive_triggers";
@@ -278,7 +278,8 @@ public interface Geary.Db.Connection : Context {
*
* @see exec
*/
- public abstract Result query(string sql, GLib.Cancellable? cancellable = null)
+ public abstract Result query(string sql,
+ GLib.Cancellable? cancellable = null)
throws GLib.Error;
/**
diff --git a/src/engine/db/db-context.vala b/src/engine/db/db-context.vala
index 9bbb8503..a59f6c4c 100644
--- a/src/engine/db/db-context.vala
+++ b/src/engine/db/db-context.vala
@@ -37,19 +37,19 @@ public abstract class Geary.Db.Context : BaseObject, Logging.Source {
private weak Logging.Source? _logging_parent = null;
- public virtual Database? get_database() {
+ internal virtual Database? get_database() {
return get_connection() != null ? get_connection().database : null;
}
- public virtual Connection? get_connection() {
+ internal virtual DatabaseConnection? get_connection() {
return get_statement() != null ? get_statement().connection : null;
}
- public virtual Statement? get_statement() {
+ internal virtual Statement? get_statement() {
return get_result() != null ? get_result().statement : null;
}
- public virtual Result? get_result() {
+ internal virtual Result? get_result() {
return null;
}
diff --git a/src/engine/db/db-database-connection.vala b/src/engine/db/db-database-connection.vala
index 4e7ceb78..dd311bea 100644
--- a/src/engine/db/db-database-connection.vala
+++ b/src/engine/db/db-database-connection.vala
@@ -255,13 +255,13 @@ public class Geary.Db.DatabaseConnection : Context, Connection {
return yield job.wait_for_completion_async();
}
- public override Connection? get_connection() {
- return this;
- }
-
/** {@inheritDoc} */
public override Logging.State to_logging_state() {
return new Logging.State(this, "%u", this.cx_number);
}
+ internal override DatabaseConnection? get_connection() {
+ return this;
+ }
+
}
diff --git a/src/engine/db/db-database.vala b/src/engine/db/db-database.vala
index 592bd306..a807e7ba 100644
--- a/src/engine/db/db-database.vala
+++ b/src/engine/db/db-database.vala
@@ -358,10 +358,6 @@ public class Geary.Db.Database : Context {
}
- public override Database? get_database() {
- return this;
- }
-
/** {@inheritDoc} */
public override Logging.State to_logging_state() {
return new Logging.State(
@@ -386,6 +382,10 @@ public class Geary.Db.Database : Context {
this.thread_pool.add(new_job);
}
+ internal override Database? get_database() {
+ return this;
+ }
+
/**
* Hook for subclasses to modify a new SQLite connection before use.
*
diff --git a/src/engine/db/db-result.vala b/src/engine/db/db-result.vala
index 1ec3ed55..64c78756 100644
--- a/src/engine/db/db-result.vala
+++ b/src/engine/db/db-result.vala
@@ -294,15 +294,15 @@ public class Geary.Db.Result : Geary.Db.Context {
return column;
}
- public override Result? get_result() {
- return this;
- }
-
/** {@inheritDoc} */
public override Logging.State to_logging_state() {
return new Logging.State(this, this.finished ? "finished" : "not finished");
}
+ internal override Result? get_result() {
+ return this;
+ }
+
[PrintfFormat]
private void log_result(string fmt, ...) {
if (Db.Context.enable_sql_logging) {
diff --git a/src/engine/db/db-statement.vala b/src/engine/db/db-statement.vala
index 0a36dfb1..088b882b 100644
--- a/src/engine/db/db-statement.vala
+++ b/src/engine/db/db-statement.vala
@@ -13,7 +13,7 @@ public class Geary.Db.Statement : Context {
get { return this.stmt.sql(); }
}
- public Connection connection { get; private set; }
+ internal DatabaseConnection connection { get; private set; }
internal Sqlite.Statement stmt;
@@ -36,9 +36,14 @@ public class Geary.Db.Statement : Context {
private Gee.HashSet<Memory.Buffer> held_buffers = new Gee.HashSet<Memory.Buffer>();
- internal Statement(Connection connection, string sql) throws DatabaseError {
+ internal Statement(DatabaseConnection connection, string sql)
+ throws DatabaseError {
this.connection = connection;
- throw_on_error("Statement.ctor", connection.db.prepare_v2(sql, -1, out stmt, null), sql);
+ throw_on_error(
+ "Statement.ctor",
+ connection.db.prepare_v2(sql, -1, out stmt, null),
+ sql
+ );
}
/** Returns SQL for the statement with bound parameters expanded. */
@@ -271,13 +276,13 @@ public class Geary.Db.Statement : Context {
return this;
}
- public override Statement? get_statement() {
- return this;
- }
-
/** {@inheritDoc} */
public override Logging.State to_logging_state() {
return new Logging.State(this, this.sql);
}
+ internal override Statement? get_statement() {
+ return this;
+ }
+
}
diff --git a/src/engine/db/db-transaction-connection.vala b/src/engine/db/db-transaction-connection.vala
index 48244dbc..ebdd18b4 100644
--- a/src/engine/db/db-transaction-connection.vala
+++ b/src/engine/db/db-transaction-connection.vala
@@ -9,7 +9,7 @@
/**
* A connection to the database for transactions.
*/
-internal class Geary.Db.TransactionConnection : Context, Connection {
+internal class Geary.Db.TransactionConnection : BaseObject, Connection {
/** {@inheritDoc} */
@@ -54,13 +54,4 @@ internal class Geary.Db.TransactionConnection : Context, Connection {
this.db_cx.exec_file(file, cancellable);
}
- public override Connection? get_connection() {
- return this;
- }
-
- /** {@inheritDoc} */
- public override Logging.State to_logging_state() {
- return new Logging.State(this, "");
- }
-
}
diff --git a/src/engine/imap-db/imap-db-attachment.vala b/src/engine/imap-db/imap-db-attachment.vala
index d8e8f9db..fa94b630 100644
--- a/src/engine/imap-db/imap-db-attachment.vala
+++ b/src/engine/imap-db/imap-db-attachment.vala
@@ -245,7 +245,7 @@ private class Geary.ImapDB.Attachment : Geary.Attachment {
}
// Ensure they're dead, Jim.
- Db.Statement stmt = new Db.Statement(cx, """
+ Db.Statement stmt = cx.prepare("""
DELETE FROM MessageAttachmentTable WHERE message_id = ?
""");
stmt.bind_rowid(0, message_id);
--
2.29.2