From e7b6a87153f6353002799815fad7218c4ac5d4d7 Mon Sep 17 00:00:00 2001 From: Soner Sayakci Date: Tue, 6 Dec 2022 12:10:18 +0000 Subject: [PATCH] feat: allow using mysql socket, fixes #433 --- config/config.go | 6 ++++-- config/config_test.go | 25 ++++++++++++++++++++++++- config/db.go | 12 +++++++++--- 3 files changed, 37 insertions(+), 6 deletions(-) diff --git a/config/config.go b/config/config.go index adc6f22..e6b0d29 100644 --- a/config/config.go +++ b/config/config.go @@ -4,8 +4,6 @@ import ( "encoding/json" "flag" "fmt" - "github.com/muety/wakapi/utils" - "github.com/robfig/cron/v3" "io/ioutil" "net/http" "os" @@ -14,6 +12,9 @@ import ( "strings" "time" + "github.com/muety/wakapi/utils" + "github.com/robfig/cron/v3" + "github.com/emvi/logbuch" "github.com/gorilla/securecookie" "github.com/jinzhu/configor" @@ -96,6 +97,7 @@ type securityConfig struct { type dbConfig struct { Host string `env:"WAKAPI_DB_HOST"` + Socket string `env:"WAKAPI_DB_SOCKET"` Port uint `env:"WAKAPI_DB_PORT"` User string `env:"WAKAPI_DB_USER"` Password string `env:"WAKAPI_DB_PASSWORD"` diff --git a/config/config_test.go b/config/config_test.go index 1b5a067..8a16934 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -2,8 +2,9 @@ package config import ( "fmt" - "github.com/stretchr/testify/assert" "testing" + + "github.com/stretchr/testify/assert" ) func TestConfig_IsDev(t *testing.T) { @@ -37,6 +38,28 @@ func Test_mysqlConnectionString(t *testing.T) { ), mysqlConnectionString(c)) } +func Test_mysqlConnectionStringSocket(t *testing.T) { + c := &dbConfig{ + Socket: "/var/run/mysql.sock", + Port: 9999, + User: "test_user", + Password: "test_password", + Name: "test_name", + Dialect: "mysql", + Charset: "utf8mb4", + MaxConn: 10, + } + + assert.Equal(t, fmt.Sprintf( + "%s:%s@unix(%s)/%s?charset=utf8mb4&parseTime=true&loc=%s&sql_mode=ANSI_QUOTES", + c.User, + c.Password, + c.Socket, + c.Name, + "Local", + ), mysqlConnectionString(c)) +} + func Test_postgresConnectionString(t *testing.T) { c := &dbConfig{ Host: "test_host", diff --git a/config/db.go b/config/db.go index 1d30005..e3fa77a 100644 --- a/config/db.go +++ b/config/db.go @@ -2,6 +2,7 @@ package config import ( "fmt" + "github.com/glebarez/sqlite" "gorm.io/driver/mysql" "gorm.io/driver/postgres" @@ -54,11 +55,16 @@ func (c *dbConfig) GetDialector() gorm.Dialector { } func mysqlConnectionString(config *dbConfig) string { - return fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=%s&parseTime=true&loc=%s&sql_mode=ANSI_QUOTES", + host := fmt.Sprintf("tcp(%s:%d)", config.Host, config.Port) + + if config.Socket != "" { + host = fmt.Sprintf("unix(%s)", config.Socket) + } + + return fmt.Sprintf("%s:%s@%s/%s?charset=%s&parseTime=true&loc=%s&sql_mode=ANSI_QUOTES", config.User, config.Password, - config.Host, - config.Port, + host, config.Name, config.Charset, "Local",