Преглед изворни кода

Merge pull request #542 from nicois/nicois/use-prepared-statement-for-bulk-writes

Use prepared statement for bulk writes
Philipp C. Heckel пре 3 година
родитељ
комит
40aadbad85
1 измењених фајлова са 12 додато и 2 уклоњено
  1. 12 2
      server/message_cache.go

+ 12 - 2
server/message_cache.go

@@ -258,12 +258,23 @@ func (c *messageCache) addMessages(ms []*message) error {
 	if c.nop {
 		return nil
 	}
+	if len(ms) == 0 {
+		return nil
+	}
 	start := time.Now()
 	tx, err := c.db.Begin()
 	if err != nil {
 		return err
 	}
 	defer tx.Rollback()
+	statement, err := tx.Prepare(
+		insertMessageQuery,
+	)
+	if err != nil {
+		return err
+	}
+	defer statement.Close()
+
 	for _, m := range ms {
 		if m.Event != messageEvent {
 			return errUnexpectedMessageType
@@ -291,8 +302,7 @@ func (c *messageCache) addMessages(ms []*message) error {
 		if m.Sender.IsValid() {
 			sender = m.Sender.String()
 		}
-		_, err := tx.Exec(
-			insertMessageQuery,
+		_, err := statement.Exec(
 			m.ID,
 			m.Time,
 			m.Topic,