diff --git a/config/config.go b/config/config.go index a366bb1..21ab8e5 100644 --- a/config/config.go +++ b/config/config.go @@ -96,6 +96,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",