From 198bceb9baa61d95507a6bc16eb8029387dad0ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20P=C3=A9rez?= Date: Sat, 23 Nov 2024 17:08:03 +0100 Subject: [PATCH] switch to mysql driver, separate pgx logic, handle no-change migration --- app/app.go | 1 + db/mysql.go | 31 +++++++++++++++++++++++++++++++ db/{driver.go => pgx.go} | 27 +-------------------------- go.mod | 1 + go.sum | 2 ++ 5 files changed, 36 insertions(+), 26 deletions(-) create mode 100644 db/mysql.go rename db/{driver.go => pgx.go} (53%) diff --git a/app/app.go b/app/app.go index 03884b0..51cd0a2 100644 --- a/app/app.go +++ b/app/app.go @@ -151,6 +151,7 @@ func (a *App) Migrate(database embed.FS) { } if errors.Is(err, migrate.ErrNoChange) { slog.Info("migration has no changes") + return } slog.Info("migration done") diff --git a/db/mysql.go b/db/mysql.go new file mode 100644 index 0000000..aac2350 --- /dev/null +++ b/db/mysql.go @@ -0,0 +1,31 @@ +package db + +import ( + "database/sql" + "log/slog" + "time" + + _ "github.com/go-sql-driver/mysql" +) + +const maxOpenDbConn = 10 +const maxIdleDbConn = 5 +const maxDbLifetime = time.Minute * 5 + +func NewMySQL(dataSource string) (*sql.DB, error) { + d, err := sql.Open("mysql", dataSource) + if err != nil { + slog.Error("error connecting to database", "error", err) + } + + d.SetMaxOpenConns(maxOpenDbConn) + d.SetMaxIdleConns(maxIdleDbConn) + d.SetConnMaxLifetime(maxDbLifetime) + + if err := d.Ping(); err != nil { + slog.Error("error pinging database", "error", err) + return nil, err + } + + return d, nil +} diff --git a/db/driver.go b/db/pgx.go similarity index 53% rename from db/driver.go rename to db/pgx.go index fc36d80..f10ad5d 100644 --- a/db/driver.go +++ b/db/pgx.go @@ -2,14 +2,11 @@ package db import ( "context" - "database/sql" - "log/slog" - "time" - _ "github.com/jackc/pgconn" _ "github.com/jackc/pgx/v5" "github.com/jackc/pgx/v5/pgxpool" _ "github.com/jackc/pgx/v5/stdlib" + "log/slog" ) func NewPGXPool(dataSource string) *pgxpool.Pool { @@ -27,25 +24,3 @@ func NewPGXPool(dataSource string) *pgxpool.Pool { slog.Info("connected to database") return dbPool } - -const maxOpenDbConn = 10 -const maxIdleDbConn = 5 -const maxDbLifetime = time.Minute * 5 - -func NewMySQL(dataSource string) (*sql.DB, error) { - d, err := sql.Open("mysql", dataSource) - if err != nil { - slog.Error("error connecting to database", "error", err) - } - - d.SetMaxOpenConns(maxOpenDbConn) - d.SetMaxIdleConns(maxIdleDbConn) - d.SetConnMaxLifetime(maxDbLifetime) - - if err := d.Ping(); err != nil { - slog.Error("error pinging database", "error", err) - return nil, err - } - - return d, nil -} diff --git a/go.mod b/go.mod index 76a1e9b..d9b5291 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module gopher-toolbox go 1.23.2 require ( + github.com/go-sql-driver/mysql v1.5.0 github.com/golang-migrate/migrate/v4 v4.18.1 github.com/jackc/pgconn v1.14.3 github.com/jackc/pgx/v5 v5.7.1 diff --git a/go.sum b/go.sum index 84e1090..c809d90 100644 --- a/go.sum +++ b/go.sum @@ -25,6 +25,8 @@ github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs= +github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-migrate/migrate/v4 v4.18.1 h1:JML/k+t4tpHCpQTCAD62Nu43NUFzHY4CV3uAuvHGC+Y=