Skip to content

Commit 1b610a0

Browse files
fix: implement driver.DriverContext interface (#365)
Change OpenConnector return type from *Connector to driver.Connector so that Driver properly satisfies the driver.DriverContext interface as recommended by database/sql/driver documentation. Add compile-time interface assertion to prevent future regressions. Update internal test to use type assertion for concrete Connector access. Fixes #236
1 parent ea69792 commit 1b610a0

3 files changed

Lines changed: 8 additions & 5 deletions

File tree

bad_server_test.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,10 @@ import (
1313
func testConnectionBad(t *testing.T, connStr string) (err error) {
1414
conn, err := sql.Open("mssql", connStr)
1515
if err != nil {
16-
// should not fail here
17-
t.Fatal("Open connection failed:", err.Error())
18-
return
16+
// With DriverContext, sql.Open calls OpenConnector which parses the
17+
// DSN eagerly. Some protocol dialers (e.g. shared memory) reject
18+
// invalid hosts during parsing, so Open itself may fail.
19+
return err
1920
}
2021
defer conn.Close()
2122
row := conn.QueryRow("select 1")

mssql.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ type Driver struct {
6565
}
6666

6767
// OpenConnector opens a new connector. Useful to dial with a context.
68-
func (d *Driver) OpenConnector(dsn string) (*Connector, error) {
68+
func (d *Driver) OpenConnector(dsn string) (driver.Connector, error) {
6969
params, err := msdsn.Parse(dsn)
7070
if err != nil {
7171
return nil, err
@@ -1196,6 +1196,7 @@ func (r *Result) RowsAffected() (int64, error) {
11961196
return r.rowsAffected, nil
11971197
}
11981198

1199+
var _ driver.DriverContext = &Driver{}
11991200
var _ driver.Pinger = &Conn{}
12001201

12011202
// Ping is used to check if the remote server is available and satisfies the Pinger interface.

queries_go110_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,11 @@ func TestSessionInitSQL(t *testing.T) {
1919
tl := testLogger{t: t}
2020
defer tl.StopLogging()
2121
d := &Driver{logger: optionalLogger{loggerAdapter{&tl}}}
22-
connector, err := d.OpenConnector(makeConnStr(t).String())
22+
driverConnector, err := d.OpenConnector(makeConnStr(t).String())
2323
if err != nil {
2424
t.Fatal("unable to open connector", err)
2525
}
26+
connector := driverConnector.(*Connector)
2627

2728
// Do not use these settings in your application
2829
// unless you know what they do.

0 commit comments

Comments
 (0)