4141 _ driver.DriverContext = & sqlDriver {}
4242)
4343
44- func (d * sqlDriver ) Close () error {
45- var errs []error
46- d .connectors .Range (func (c * xsql.Connector , _ * Driver ) bool {
47- if err := c .Close (); err != nil {
48- errs = append (errs , err )
49- }
50-
51- return true
52- })
53- if len (errs ) > 0 {
54- return xerrors .NewWithIssues ("ydb legacy driver close failed" , errs ... )
55- }
56-
57- return nil
58- }
59-
6044// Open returns a new Driver to the ydb.
6145func (d * sqlDriver ) Open (string ) (driver.Conn , error ) {
6246 return nil , xsql .ErrUnsupported
@@ -68,15 +52,25 @@ func (d *sqlDriver) OpenConnector(dataSourceName string) (driver.Connector, erro
6852 return nil , xerrors .WithStackTrace (fmt .Errorf ("failed to connect by data source name '%s': %w" , dataSourceName , err ))
6953 }
7054
71- return Connector (db , db .databaseSQLOptions ... )
55+ c , err := connector (db , db .databaseSQLOptions ... )
56+ if err != nil {
57+ return nil , xerrors .WithStackTrace (fmt .Errorf ("failed to create connector: %w" , err ))
58+ }
59+
60+ d .attach (c , db )
61+
62+ return c , nil
7263}
7364
7465func (d * sqlDriver ) attach (c * xsql.Connector , parent * Driver ) {
7566 d .connectors .Set (c , parent )
7667}
7768
7869func (d * sqlDriver ) detach (c * xsql.Connector ) {
79- d .connectors .Delete (c )
70+ parent , _ := d .connectors .Extract (c )
71+ if d .connectors .Len () == 0 && parent != nil {
72+ _ = parent .Close (context .Background ())
73+ }
8074}
8175
8276type QueryMode int
@@ -235,7 +229,7 @@ type SQLConnector interface {
235229 Close () error
236230}
237231
238- func Connector (parent * Driver , opts ... ConnectorOption ) (SQLConnector , error ) {
232+ func connector (parent * Driver , opts ... ConnectorOption ) (* xsql. Connector , error ) {
239233 c , err := xsql .Open (parent , parent .metaBalancer ,
240234 append (
241235 append (
@@ -250,7 +244,17 @@ func Connector(parent *Driver, opts ...ConnectorOption) (SQLConnector, error) {
250244 if err != nil {
251245 return nil , xerrors .WithStackTrace (err )
252246 }
253- d .attach (c , parent )
247+
248+ return c , nil
249+ }
250+
251+ func Connector (parent * Driver , opts ... ConnectorOption ) (SQLConnector , error ) {
252+ c , err := connector (parent , opts ... )
253+ if err != nil {
254+ return nil , xerrors .WithStackTrace (err )
255+ }
256+
257+ d .attach (c , nil )
254258
255259 return c , nil
256260}
0 commit comments