From 7db16aecd65f5e7efbecc94bfaabe68f6f2f17eb Mon Sep 17 00:00:00 2001 From: Krystian Chmura Date: Thu, 27 Jun 2024 17:10:18 +0200 Subject: [PATCH] feat: reset sequences in one exec to make it faster --- mysql.go | 13 +++++++++---- postgresql.go | 14 +++++++++----- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/mysql.go b/mysql.go index 6f48ef6..5da2d13 100644 --- a/mysql.go +++ b/mysql.go @@ -3,6 +3,7 @@ package testfixtures import ( "database/sql" "fmt" + "strings" ) type mySQL struct { @@ -103,17 +104,21 @@ func (h *mySQL) disableReferentialIntegrity(db *sql.DB, loadFn loadFunction) (er } func (h *mySQL) resetSequences(db *sql.DB) error { + if len(h.tables) == 0 { + return nil + } + resetSequencesTo := h.resetSequencesTo if resetSequencesTo == 0 { resetSequencesTo = 10000 } + b := strings.Builder{} for _, t := range h.tables { - if _, err := db.Exec(fmt.Sprintf("ALTER TABLE %s AUTO_INCREMENT = %d", h.quoteKeyword(t), resetSequencesTo)); err != nil { - return err - } + b.WriteString(fmt.Sprintf("ALTER TABLE %s AUTO_INCREMENT = %d;", h.quoteKeyword(t), resetSequencesTo)) } - return nil + _, err := db.Exec(b.String()) + return err } func (h *mySQL) isTableModified(q queryable, tableName string) (bool, error) { diff --git a/postgresql.go b/postgresql.go index 320a8c3..40db165 100644 --- a/postgresql.go +++ b/postgresql.go @@ -334,18 +334,22 @@ func (h *postgreSQL) disableReferentialIntegrity(db *sql.DB, loadFn loadFunction } func (h *postgreSQL) resetSequences(db *sql.DB) error { + if len(h.sequences) == 0 { + return nil + } + resetSequencesTo := h.resetSequencesTo if resetSequencesTo == 0 { resetSequencesTo = 10000 } + b := strings.Builder{} for _, sequence := range h.sequences { - _, err := db.Exec(fmt.Sprintf("SELECT SETVAL('%s', %d)", sequence, resetSequencesTo)) - if err != nil { - return err - } + b.WriteString(fmt.Sprintf("SELECT SETVAL('%s', %d);", sequence, resetSequencesTo)) } - return nil + + _, err := db.Exec(b.String()) + return err } func (h *postgreSQL) isTableModified(q queryable, tableName string) (bool, error) {