Skip to content

Commit a446900

Browse files
committed
Refactor.
1 parent 7e12105 commit a446900

File tree

1 file changed

+21
-23
lines changed

1 file changed

+21
-23
lines changed

driver/driver.go

+21-23
Original file line numberDiff line numberDiff line change
@@ -107,28 +107,25 @@ func init() {
107107
// The second callback is called before the driver closes a connection.
108108
// The [sqlite3.Conn] can be used to execute queries, register functions, etc.
109109
func Open(dataSourceName string, fn ...func(*sqlite3.Conn) error) (*sql.DB, error) {
110-
var drv SQLite
111110
if len(fn) > 2 {
112111
return nil, sqlite3.MISUSE
113112
}
113+
var init, term func(*sqlite3.Conn) error
114114
if len(fn) > 1 {
115-
drv.term = fn[1]
115+
term = fn[1]
116116
}
117117
if len(fn) > 0 {
118-
drv.init = fn[0]
118+
init = fn[0]
119119
}
120-
c, err := drv.OpenConnector(dataSourceName)
120+
c, err := newConnector(dataSourceName, init, term)
121121
if err != nil {
122122
return nil, err
123123
}
124124
return sql.OpenDB(c), nil
125125
}
126126

127127
// SQLite implements [database/sql/driver.Driver].
128-
type SQLite struct {
129-
init func(*sqlite3.Conn) error
130-
term func(*sqlite3.Conn) error
131-
}
128+
type SQLite struct{}
132129

133130
var (
134131
// Ensure these interfaces are implemented:
@@ -137,7 +134,7 @@ var (
137134

138135
// Open implements [database/sql/driver.Driver].
139136
func (d *SQLite) Open(name string) (driver.Conn, error) {
140-
c, err := d.newConnector(name)
137+
c, err := newConnector(name, nil, nil)
141138
if err != nil {
142139
return nil, err
143140
}
@@ -146,11 +143,11 @@ func (d *SQLite) Open(name string) (driver.Conn, error) {
146143

147144
// OpenConnector implements [database/sql/driver.DriverContext].
148145
func (d *SQLite) OpenConnector(name string) (driver.Connector, error) {
149-
return d.newConnector(name)
146+
return newConnector(name, nil, nil)
150147
}
151148

152-
func (d *SQLite) newConnector(name string) (*connector, error) {
153-
c := connector{driver: d, name: name}
149+
func newConnector(name string, init, term func(*sqlite3.Conn) error) (*connector, error) {
150+
c := connector{name: name, init: init, term: term}
154151

155152
var txlock, timefmt string
156153
if strings.HasPrefix(name, "file:") {
@@ -190,7 +187,8 @@ func (d *SQLite) newConnector(name string) (*connector, error) {
190187
}
191188

192189
type connector struct {
193-
driver *SQLite
190+
init func(*sqlite3.Conn) error
191+
term func(*sqlite3.Conn) error
194192
name string
195193
txLock string
196194
tmRead sqlite3.TimeFormat
@@ -199,7 +197,7 @@ type connector struct {
199197
}
200198

201199
func (n *connector) Driver() driver.Driver {
202-
return n.driver
200+
return &SQLite{}
203201
}
204202

205203
func (n *connector) Connect(ctx context.Context) (res driver.Conn, err error) {
@@ -228,13 +226,13 @@ func (n *connector) Connect(ctx context.Context) (res driver.Conn, err error) {
228226
return nil, err
229227
}
230228
}
231-
if n.driver.init != nil {
232-
err = n.driver.init(c.Conn)
229+
if n.init != nil {
230+
err = n.init(c.Conn)
233231
if err != nil {
234232
return nil, err
235233
}
236234
}
237-
if n.pragmas || n.driver.init != nil {
235+
if n.pragmas || n.init != nil {
238236
s, _, err := c.Conn.Prepare(`PRAGMA query_only`)
239237
if err != nil {
240238
return nil, err
@@ -250,9 +248,9 @@ func (n *connector) Connect(ctx context.Context) (res driver.Conn, err error) {
250248
return nil, err
251249
}
252250
}
253-
if n.driver.term != nil {
251+
if n.term != nil {
254252
err = c.Conn.Trace(sqlite3.TRACE_CLOSE, func(sqlite3.TraceEvent, any, any) error {
255-
return n.driver.term(c.Conn)
253+
return n.term(c.Conn)
256254
})
257255
if err != nil {
258256
return nil, err
@@ -288,6 +286,8 @@ func (n *connector) Connect(ctx context.Context) (res driver.Conn, err error) {
288286
type Conn interface {
289287
Raw() *sqlite3.Conn
290288
driver.Conn
289+
driver.ConnBeginTx
290+
driver.ConnPrepareContext
291291
}
292292

293293
type conn struct {
@@ -301,10 +301,8 @@ type conn struct {
301301

302302
var (
303303
// Ensure these interfaces are implemented:
304-
_ Conn = &conn{}
305-
_ driver.ConnBeginTx = &conn{}
306-
_ driver.ConnPrepareContext = &conn{}
307-
_ driver.ExecerContext = &conn{}
304+
_ Conn = &conn{}
305+
_ driver.ExecerContext = &conn{}
308306
)
309307

310308
func (c *conn) Raw() *sqlite3.Conn {

0 commit comments

Comments
 (0)