Skip to content

Commit

Permalink
Merge pull request #1366 from c9s/c9s/mysql-unix-socket
Browse files Browse the repository at this point in the history
feature: add mysql unix socket support
  • Loading branch information
stephenafamo committed Mar 19, 2024
2 parents 42be9e1 + c11bdf9 commit ebed370
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 8 deletions.
11 changes: 7 additions & 4 deletions drivers/interface.go
Expand Up @@ -22,10 +22,13 @@ const (
ConfigConcurrency = "concurrency"
ConfigForeignKeys = "foreign-keys"

ConfigUser = "user"
ConfigPass = "pass"
ConfigHost = "host"
ConfigPort = "port"
ConfigUser = "user"
ConfigPass = "pass"
ConfigHost = "host"
ConfigPort = "port"

ConfigUnixSocket = "unix-socket"

ConfigDBName = "dbname"
ConfigSSLMode = "sslmode"

Expand Down
36 changes: 32 additions & 4 deletions drivers/sqlboiler-mysql/driver/mysql.go
Expand Up @@ -80,7 +80,11 @@ func (m *MySQLDriver) Assemble(config drivers.Config) (dbinfo *drivers.DBInfo, e
dbname := config.MustString(drivers.ConfigDBName)
host := config.MustString(drivers.ConfigHost)
port := config.DefaultInt(drivers.ConfigPort, 3306)
sslmode := config.DefaultString(drivers.ConfigSSLMode, "true")
unixSocket := config.DefaultString(drivers.ConfigUnixSocket, "")
// mysql ssl mode
// see https://dev.mysql.com/doc/refman/5.7/en/connection-options.html#option_general_ssl-mode
// could be one of PREFERRED, REQUIRED, VERIFY_CA, VERIFY_IDENTITY
sslMode := config.DefaultString(drivers.ConfigSSLMode, "true")

schema := dbname
whitelist, _ := config.StringSlice(drivers.ConfigWhitelist)
Expand All @@ -96,7 +100,13 @@ func (m *MySQLDriver) Assemble(config drivers.Config) (dbinfo *drivers.DBInfo, e

m.addEnumTypes, _ = config[drivers.ConfigAddEnumTypes].(bool)
m.enumNullPrefix = strmangle.TitleCase(config.DefaultString(drivers.ConfigEnumNullPrefix, "Null"))
m.connStr = MySQLBuildQueryString(user, pass, dbname, host, port, sslmode)

if unixSocket != "" {
m.connStr = MySQLBuildQueryStringUnixSocket(user, pass, dbname, unixSocket, sslMode)
} else {
m.connStr = MySQLBuildQueryString(user, pass, dbname, host, port, sslMode)
}

m.configForeignKeys = config.MustForeignKeys(drivers.ConfigForeignKeys)
m.conn, err = sql.Open("mysql", m.connStr)
if err != nil {
Expand Down Expand Up @@ -128,8 +138,26 @@ func (m *MySQLDriver) Assemble(config drivers.Config) (dbinfo *drivers.DBInfo, e
return dbinfo, err
}

func MySQLBuildQueryStringUnixSocket(user, pass, dbname, unixSocket string, sslMode string) string {
config := mysql.NewConfig()

config.User = user
if len(pass) != 0 {
config.Passwd = pass
}
config.DBName = dbname
config.Net = "unix"
config.Addr = unixSocket
config.TLSConfig = sslMode

// MySQL is a bad, and by default reads date/datetime into a []byte
// instead of a time.Time. Tell it to stop being a bad.
config.ParseTime = true
return config.FormatDSN()
}

// MySQLBuildQueryString builds a query string for MySQL.
func MySQLBuildQueryString(user, pass, dbname, host string, port int, sslmode string) string {
func MySQLBuildQueryString(user, pass, dbname, host string, port int, sslMode string) string {
config := mysql.NewConfig()

config.User = user
Expand All @@ -143,7 +171,7 @@ func MySQLBuildQueryString(user, pass, dbname, host string, port int, sslmode st
port = 3306
}
config.Addr += ":" + strconv.Itoa(port)
config.TLSConfig = sslmode
config.TLSConfig = sslMode

// MySQL is a bad, and by default reads date/datetime into a []byte
// instead of a time.Time. Tell it to stop being a bad.
Expand Down

0 comments on commit ebed370

Please sign in to comment.