@@ -37,24 +37,23 @@ var (
3737type Config struct {
3838 // non boolean fields
3939
40- User string // Username
41- Passwd string // Password (requires User)
42- Net string // Network (e.g. "tcp", "tcp6", "unix". default: "tcp")
43- Addr string // Address (default: "127.0.0.1:3306" for "tcp" and "/tmp/mysql.sock" for "unix")
44- DBName string // Database name
45- Params map [string ]string // Connection parameters
46- ConnectionAttributes string // Connection Attributes, comma-delimited string of user-defined "key:value" pairs
47- Collation string // Connection collation
48- Loc * time.Location // Location for time.Time values
49- MaxAllowedPacket int // Max packet size allowed
50- ServerPubKey string // Server public key name
51- TLSConfig string // TLS configuration name
52- TLS * tls.Config // TLS configuration, its priority is higher than TLSConfig
53- Timeout time.Duration // Dial timeout
54- ReadTimeout time.Duration // I/O read timeout
55- WriteTimeout time.Duration // I/O write timeout
56- Logger Logger // Logger
57- BeforeConnect func (context.Context , * Config ) error // Invoked before a connection is established
40+ User string // Username
41+ Passwd string // Password (requires User)
42+ Net string // Network (e.g. "tcp", "tcp6", "unix". default: "tcp")
43+ Addr string // Address (default: "127.0.0.1:3306" for "tcp" and "/tmp/mysql.sock" for "unix")
44+ DBName string // Database name
45+ Params map [string ]string // Connection parameters
46+ ConnectionAttributes string // Connection Attributes, comma-delimited string of user-defined "key:value" pairs
47+ Collation string // Connection collation
48+ Loc * time.Location // Location for time.Time values
49+ MaxAllowedPacket int // Max packet size allowed
50+ ServerPubKey string // Server public key name
51+ TLSConfig string // TLS configuration name
52+ TLS * tls.Config // TLS configuration, its priority is higher than TLSConfig
53+ Timeout time.Duration // Dial timeout
54+ ReadTimeout time.Duration // I/O read timeout
55+ WriteTimeout time.Duration // I/O write timeout
56+ Logger Logger // Logger
5857
5958 // boolean fields
6059
@@ -73,8 +72,9 @@ type Config struct {
7372
7473 // unexported fields. new options should be come here
7574
76- pubKey * rsa.PublicKey // Server public key
77- timeTruncate time.Duration // Truncate time.Time values to the specified duration
75+ beforeConnect func (context.Context , * Config ) error // Invoked before a connection is established
76+ pubKey * rsa.PublicKey // Server public key
77+ timeTruncate time.Duration // Truncate time.Time values to the specified duration
7878}
7979
8080// Functional Options Pattern
@@ -114,6 +114,14 @@ func TimeTruncate(d time.Duration) Option {
114114 }
115115}
116116
117+ // BeforeConnect sets the function to be invoked before a connection is established.
118+ func BeforeConnect (fn func (context.Context , * Config ) error ) Option {
119+ return func (cfg * Config ) error {
120+ cfg .beforeConnect = fn
121+ return nil
122+ }
123+ }
124+
117125func (cfg * Config ) Clone () * Config {
118126 cp := * cfg
119127 if cp .TLS != nil {
0 commit comments