-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathdriver.go
More file actions
48 lines (41 loc) · 1.16 KB
/
driver.go
File metadata and controls
48 lines (41 loc) · 1.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package sql
import (
"database/sql/driver"
"github.com/opentracing/opentracing-go"
)
// conn defines a tracing wrapper for driver.Driver.
type tracingDriver struct {
driver driver.Driver
tracer *tracer
}
// TracingDriver creates and returns a new SQL driver with tracing capabilities.
func NewTracingDriver(d driver.Driver, t opentracing.Tracer, options ...func(*tracingDriver)) driver.Driver {
td := &tracingDriver{driver: d, tracer: &tracer{t: t}}
for _, option := range options {
option(td)
}
if td.tracer.nameFunc == nil {
td.tracer.nameFunc = defaultNameFunc
}
return td
}
// SpanNameFunction is an option for using a custom span naming function.
func SpanNameFunction(f SpanNameFunc) func(*tracingDriver) {
return func(d *tracingDriver) {
d.tracer.nameFunc = f
}
}
// SaveQuery is an option for saving SQL queries.
func SaveQuery(f SpanNameFunc) func(*tracingDriver) {
return func(d *tracingDriver) {
d.tracer.saveQuery = true
}
}
// Open implements driver.Driver Open.
func (d *tracingDriver) Open(name string) (driver.Conn, error) {
c, err := d.driver.Open(name)
if err != nil {
return nil, err
}
return &conn{conn: c, tracer: d.tracer}, nil
}