Skip to content

Commit d8044f2

Browse files
authored
Merge pull request #40 from shogo82148/implement-driver-context
implement driver.DriverContext
2 parents d3f360d + 5650438 commit d8044f2

File tree

5 files changed

+1730
-1585
lines changed

5 files changed

+1730
-1585
lines changed

fakedb_go110_test.go

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
// +build go1.10
2+
3+
package proxy
4+
5+
import (
6+
"bytes"
7+
"context"
8+
"database/sql"
9+
"database/sql/driver"
10+
"encoding/json"
11+
"errors"
12+
)
13+
14+
type fakeDriverCtx fakeDriver
15+
type fakeConnector struct {
16+
driver *fakeDriverCtx
17+
opt *fakeConnOption
18+
db *fakeDB
19+
}
20+
21+
var fdriverctx = &fakeDriver{}
22+
var _ driver.DriverContext = &fakeDriverCtx{}
23+
var _ driver.Connector = &fakeConnector{}
24+
25+
func init() {
26+
sql.Register("fakedbctx", fdriverctx)
27+
}
28+
29+
func (d *fakeDriverCtx) Open(name string) (driver.Conn, error) {
30+
return nil, errors.New("not implemented")
31+
}
32+
33+
func (d *fakeDriverCtx) OpenConnector(name string) (driver.Connector, error) {
34+
var opt fakeConnOption
35+
err := json.Unmarshal([]byte(name), &opt)
36+
if err != nil {
37+
return nil, err
38+
}
39+
40+
// validate options
41+
switch opt.ConnType {
42+
case "", "fakeConn", "fakeConnExt", "fakeConnCtx":
43+
// validation OK
44+
default:
45+
return nil, errors.New("known ConnType")
46+
}
47+
48+
d.mu.Lock()
49+
defer d.mu.Unlock()
50+
db, ok := d.dbs[opt.Name]
51+
if !ok {
52+
db = &fakeDB{
53+
log: &bytes.Buffer{},
54+
}
55+
if d.dbs == nil {
56+
d.dbs = make(map[string]*fakeDB)
57+
}
58+
d.dbs[name] = db
59+
}
60+
61+
return &fakeConnector{
62+
driver: d,
63+
opt: &opt,
64+
db: db,
65+
}, nil
66+
}
67+
68+
func (d *fakeDriverCtx) DB(name string) *fakeDB {
69+
d.mu.Lock()
70+
defer d.mu.Unlock()
71+
return d.dbs[name]
72+
}
73+
74+
func (c *fakeConnector) Connect(ctx context.Context) (driver.Conn, error) {
75+
var conn driver.Conn
76+
switch c.opt.ConnType {
77+
case "", "fakeConn":
78+
conn = &fakeConn{
79+
db: c.db,
80+
opt: c.opt,
81+
}
82+
case "fakeConnExt":
83+
conn = &fakeConnExt{
84+
db: c.db,
85+
opt: c.opt,
86+
}
87+
case "fakeConnCtx":
88+
conn = &fakeConnCtx{
89+
db: c.db,
90+
opt: c.opt,
91+
}
92+
default:
93+
return nil, errors.New("known ConnType")
94+
}
95+
96+
return conn, nil
97+
}
98+
99+
func (c *fakeConnector) Driver() driver.Driver {
100+
return c.driver
101+
}

0 commit comments

Comments
 (0)