@@ -69,33 +69,28 @@ func (uo *URLOpener) OpenMySQLURL(ctx context.Context, u *url.URL) (*sql.DB, err
6969 }
7070 password , _ := u .User .Password ()
7171 c := & connector {
72- addr : u .Host ,
73- user : u .User .Username (),
74- password : password ,
75- dbName : strings .TrimPrefix (u .Path , "/" ),
76- // Make a copy of TraceOpts to avoid caller modifying.
77- traceOpts : append ([]otelsql.Option (nil ), uo .TraceOpts ... ),
78- provider : source ,
79-
80- sem : make (chan struct {}, 1 ),
81- ready : make (chan struct {}),
72+ cfg : & mysql.Config {
73+ Net : "tcp" ,
74+ Addr : u .Host ,
75+ User : u .User .Username (),
76+ Passwd : password ,
77+ AllowCleartextPasswords : true ,
78+ AllowNativePasswords : true ,
79+ DBName : strings .TrimPrefix (u .Path , "/" ),
80+ },
81+ provider : source ,
82+ sem : make (chan struct {}, 1 ),
83+ ready : make (chan struct {}),
8284 }
8385 c .sem <- struct {}{}
84- return sql .OpenDB (c ), nil
86+ return otelsql .OpenDB (c , uo . TraceOpts ... ), nil
8587}
8688
8789type connector struct {
88- addr string
89- user string
90- password string
91- dbName string
92- traceOpts []otelsql.Option
93-
9490 sem chan struct {} // receive to acquire, send to release
9591 provider CertPoolProvider // provides the CA certificate pool
96-
97- ready chan struct {} // closed after writing dsn
98- dsn string
92+ ready chan struct {} // closed after fetching certs successfully
93+ cfg * mysql.Config
9994}
10095
10196func (c * connector ) Connect (ctx context.Context ) (driver.Conn , error ) {
@@ -116,29 +111,23 @@ func (c *connector) Connect(ctx context.Context) (driver.Conn, error) {
116111 c .sem <- struct {}{} // release
117112 return nil , fmt .Errorf ("connect Azure MySql: register TLS: %v" , err )
118113 }
119- cfg := & mysql.Config {
120- Net : "tcp" ,
121- Addr : c .addr ,
122- User : c .user ,
123- Passwd : c .password ,
124- TLSConfig : tlsConfigName ,
125- AllowCleartextPasswords : true ,
126- AllowNativePasswords : true ,
127- DBName : c .dbName ,
128- }
129- c .dsn = cfg .FormatDSN ()
114+ c .cfg .TLSConfig = tlsConfigName
130115 close (c .ready )
131116 // Don't release sem: make it block forever, so this case won't be run again.
132117 case <- c .ready :
133118 // Already succeeded.
134119 case <- ctx .Done ():
135120 return nil , fmt .Errorf ("connect Azure MySql: waiting for certificates: %v" , ctx .Err ())
136121 }
137- return c .Driver ().Open (c .dsn )
122+ inner , err := mysql .NewConnector (c .cfg )
123+ if err != nil {
124+ return nil , fmt .Errorf ("connect Azure MySql: create connector: %v" , err )
125+ }
126+ return inner .Connect (ctx )
138127}
139128
140129func (c * connector ) Driver () driver.Driver {
141- return otelsql . WrapDriver ( mysql.MySQLDriver {}, c . traceOpts ... )
130+ return mysql.MySQLDriver {}
142131}
143132
144133var tlsConfigCounter uint32
0 commit comments