@@ -80,7 +80,11 @@ func (m *MySQLDriver) Assemble(config drivers.Config) (dbinfo *drivers.DBInfo, e
80
80
dbname := config .MustString (drivers .ConfigDBName )
81
81
host := config .MustString (drivers .ConfigHost )
82
82
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" )
84
88
85
89
schema := dbname
86
90
whitelist , _ := config .StringSlice (drivers .ConfigWhitelist )
@@ -96,7 +100,13 @@ func (m *MySQLDriver) Assemble(config drivers.Config) (dbinfo *drivers.DBInfo, e
96
100
97
101
m .addEnumTypes , _ = config [drivers .ConfigAddEnumTypes ].(bool )
98
102
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
+
100
110
m .configForeignKeys = config .MustForeignKeys (drivers .ConfigForeignKeys )
101
111
m .conn , err = sql .Open ("mysql" , m .connStr )
102
112
if err != nil {
@@ -128,8 +138,26 @@ func (m *MySQLDriver) Assemble(config drivers.Config) (dbinfo *drivers.DBInfo, e
128
138
return dbinfo , err
129
139
}
130
140
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
+
131
159
// 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 {
133
161
config := mysql .NewConfig ()
134
162
135
163
config .User = user
@@ -143,7 +171,7 @@ func MySQLBuildQueryString(user, pass, dbname, host string, port int, sslmode st
143
171
port = 3306
144
172
}
145
173
config .Addr += ":" + strconv .Itoa (port )
146
- config .TLSConfig = sslmode
174
+ config .TLSConfig = sslMode
147
175
148
176
// MySQL is a bad, and by default reads date/datetime into a []byte
149
177
// instead of a time.Time. Tell it to stop being a bad.
0 commit comments