Kaynağa Gözat

Simplify using optional db transactions

Tulir Asokan 2 yıl önce
ebeveyn
işleme
86e739b6a1
2 değiştirilmiş dosya ile 19 ekleme ve 34 silme
  1. 12 21
      database/message.go
  2. 7 13
      database/portal.go

+ 12 - 21
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)
 	}

+ 7 - 13
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)
 	}