Skip to content

Commit ebed370

Browse files
authored
Merge pull request #1366 from c9s/c9s/mysql-unix-socket
feature: add mysql unix socket support
2 parents 42be9e1 + c11bdf9 commit ebed370

File tree

2 files changed

+39
-8
lines changed

2 files changed

+39
-8
lines changed

drivers/interface.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,13 @@ const (
2222
ConfigConcurrency = "concurrency"
2323
ConfigForeignKeys = "foreign-keys"
2424

25-
ConfigUser = "user"
26-
ConfigPass = "pass"
27-
ConfigHost = "host"
28-
ConfigPort = "port"
25+
ConfigUser = "user"
26+
ConfigPass = "pass"
27+
ConfigHost = "host"
28+
ConfigPort = "port"
29+
30+
ConfigUnixSocket = "unix-socket"
31+
2932
ConfigDBName = "dbname"
3033
ConfigSSLMode = "sslmode"
3134

drivers/sqlboiler-mysql/driver/mysql.go

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,11 @@ func (m *MySQLDriver) Assemble(config drivers.Config) (dbinfo *drivers.DBInfo, e
8080
dbname := config.MustString(drivers.ConfigDBName)
8181
host := config.MustString(drivers.ConfigHost)
8282
port := config.DefaultInt(drivers.ConfigPort, 3306)
83-
sslmode := config.DefaultString(drivers.ConfigSSLMode, "true")
83+
unixSocket := config.DefaultString(drivers.ConfigUnixSocket, "")
84+
// mysql ssl mode
85+
// see https://dev.mysql.com/doc/refman/5.7/en/connection-options.html#option_general_ssl-mode
86+
// could be one of PREFERRED, REQUIRED, VERIFY_CA, VERIFY_IDENTITY
87+
sslMode := config.DefaultString(drivers.ConfigSSLMode, "true")
8488

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

97101
m.addEnumTypes, _ = config[drivers.ConfigAddEnumTypes].(bool)
98102
m.enumNullPrefix = strmangle.TitleCase(config.DefaultString(drivers.ConfigEnumNullPrefix, "Null"))
99-
m.connStr = MySQLBuildQueryString(user, pass, dbname, host, port, sslmode)
103+
104+
if unixSocket != "" {
105+
m.connStr = MySQLBuildQueryStringUnixSocket(user, pass, dbname, unixSocket, sslMode)
106+
} else {
107+
m.connStr = MySQLBuildQueryString(user, pass, dbname, host, port, sslMode)
108+
}
109+
100110
m.configForeignKeys = config.MustForeignKeys(drivers.ConfigForeignKeys)
101111
m.conn, err = sql.Open("mysql", m.connStr)
102112
if err != nil {
@@ -128,8 +138,26 @@ func (m *MySQLDriver) Assemble(config drivers.Config) (dbinfo *drivers.DBInfo, e
128138
return dbinfo, err
129139
}
130140

141+
func MySQLBuildQueryStringUnixSocket(user, pass, dbname, unixSocket string, sslMode string) string {
142+
config := mysql.NewConfig()
143+
144+
config.User = user
145+
if len(pass) != 0 {
146+
config.Passwd = pass
147+
}
148+
config.DBName = dbname
149+
config.Net = "unix"
150+
config.Addr = unixSocket
151+
config.TLSConfig = sslMode
152+
153+
// MySQL is a bad, and by default reads date/datetime into a []byte
154+
// instead of a time.Time. Tell it to stop being a bad.
155+
config.ParseTime = true
156+
return config.FormatDSN()
157+
}
158+
131159
// MySQLBuildQueryString builds a query string for MySQL.
132-
func MySQLBuildQueryString(user, pass, dbname, host string, port int, sslmode string) string {
160+
func MySQLBuildQueryString(user, pass, dbname, host string, port int, sslMode string) string {
133161
config := mysql.NewConfig()
134162

135163
config.User = user
@@ -143,7 +171,7 @@ func MySQLBuildQueryString(user, pass, dbname, host string, port int, sslmode st
143171
port = 3306
144172
}
145173
config.Addr += ":" + strconv.Itoa(port)
146-
config.TLSConfig = sslmode
174+
config.TLSConfig = sslMode
147175

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

0 commit comments

Comments
 (0)