From 86e739b6a11258812379251a1393692aff13c85d Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Thu, 10 Nov 2022 23:08:29 +0200 Subject: [PATCH] Simplify using optional db transactions --- database/message.go | 33 ++++++++++++--------------------- database/portal.go | 20 +++++++------------- 2 files changed, 19 insertions(+), 34 deletions(-) diff --git a/database/message.go b/database/message.go index f80a21a..767294a 100644 --- a/database/message.go +++ b/database/message.go @@ -180,26 +180,20 @@ func (msg *Message) Scan(row dbutil.Scannable) *Message { return msg } -func (msg *Message) Insert(txn dbutil.Transaction) { +func (msg *Message) Insert(txn dbutil.Execable) { + if txn == nil { + txn = msg.db + } var sender interface{} = msg.Sender // Slightly hacky hack to allow inserting empty senders (used for post-backfill dummy events) if msg.Sender.IsEmpty() { sender = "" } - query := ` + _, err := txn.Exec(` INSERT INTO message (chat_jid, chat_receiver, jid, mxid, sender, timestamp, sent, type, error, broadcast_list_jid) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10) - ` - args := []interface{}{ - msg.Chat.JID, msg.Chat.Receiver, msg.JID, msg.MXID, sender, msg.Timestamp.Unix(), msg.Sent, msg.Type, msg.Error, msg.BroadcastListJID, - } - var err error - if txn != nil { - _, err = txn.Exec(query, args...) - } else { - _, err = msg.db.Exec(query, args...) - } + `, msg.Chat.JID, msg.Chat.Receiver, msg.JID, msg.MXID, sender, msg.Timestamp.Unix(), msg.Sent, msg.Type, msg.Error, msg.BroadcastListJID) if err != nil { msg.log.Warnfln("Failed to insert %s@%s: %v", msg.Chat, msg.JID, err) } @@ -214,18 +208,15 @@ func (msg *Message) MarkSent(ts time.Time) { } } -func (msg *Message) UpdateMXID(txn dbutil.Transaction, mxid id.EventID, newType MessageType, newError MessageErrorType) { +func (msg *Message) UpdateMXID(txn dbutil.Execable, mxid id.EventID, newType MessageType, newError MessageErrorType) { + if txn == nil { + txn = msg.db + } msg.MXID = mxid msg.Type = newType msg.Error = newError - query := "UPDATE message SET mxid=$1, type=$2, error=$3 WHERE chat_jid=$4 AND chat_receiver=$5 AND jid=$6" - args := []interface{}{mxid, newType, newError, msg.Chat.JID, msg.Chat.Receiver, msg.JID} - var err error - if txn != nil { - _, err = txn.Exec(query, args...) - } else { - _, err = msg.db.Exec(query, args...) - } + _, err := txn.Exec("UPDATE message SET mxid=$1, type=$2, error=$3 WHERE chat_jid=$4 AND chat_receiver=$5 AND jid=$6", + mxid, newType, newError, msg.Chat.JID, msg.Chat.Receiver, msg.JID) if err != nil { msg.log.Warnfln("Failed to update %s@%s: %v", msg.Chat, msg.JID, err) } diff --git a/database/portal.go b/database/portal.go index 4c2b0ec..1fbfe77 100644 --- a/database/portal.go +++ b/database/portal.go @@ -209,24 +209,18 @@ func (portal *Portal) Insert() { } } -func (portal *Portal) Update(txn dbutil.Transaction) { - query := ` +func (portal *Portal) Update(txn dbutil.Execable) { + if txn == nil { + txn = portal.db + } + _, err := txn.Exec(` UPDATE portal SET mxid=$1, name=$2, name_set=$3, topic=$4, topic_set=$5, avatar=$6, avatar_url=$7, avatar_set=$8, encrypted=$9, last_sync=$10, first_event_id=$11, next_batch_id=$12, relay_user_id=$13, expiration_time=$14 WHERE jid=$15 AND receiver=$16 - ` - args := []interface{}{ - portal.mxidPtr(), portal.Name, portal.NameSet, portal.Topic, portal.TopicSet, portal.Avatar, portal.AvatarURL.String(), + `, portal.mxidPtr(), portal.Name, portal.NameSet, portal.Topic, portal.TopicSet, portal.Avatar, portal.AvatarURL.String(), portal.AvatarSet, portal.Encrypted, portal.lastSyncTs(), portal.FirstEventID.String(), portal.NextBatchID.String(), - portal.relayUserPtr(), portal.ExpirationTime, portal.Key.JID, portal.Key.Receiver, - } - var err error - if txn != nil { - _, err = txn.Exec(query, args...) - } else { - _, err = portal.db.Exec(query, args...) - } + portal.relayUserPtr(), portal.ExpirationTime, portal.Key.JID, portal.Key.Receiver) if err != nil { portal.log.Warnfln("Failed to update %s: %v", portal.Key, err) }