in xray/sql_context.go [231:269]
func (conn *driverConn) QueryContext(ctx context.Context, query string, args []driver.NamedValue) (driver.Rows, error) {
var err error
var rows driver.Rows
if queryerCtx, ok := conn.Conn.(driver.QueryerContext); ok {
Capture(ctx, conn.attr.dbname+conn.attr.host, func(ctx context.Context) error {
rows, err = queryerCtx.QueryContext(ctx, query, args)
if err == driver.ErrSkip {
conn.attr.populate(ctx, query+msgErrSkip)
return nil
}
conn.attr.populate(ctx, query)
return err
})
} else {
select {
default:
case <-ctx.Done():
return nil, ctx.Err()
}
queryer, ok := conn.Conn.(driver.Queryer)
if !ok {
return nil, driver.ErrSkip
}
dargs, err0 := namedValuesToValues(args)
if err0 != nil {
return nil, err0
}
err = Capture(ctx, conn.attr.dbname+conn.attr.host, func(ctx context.Context) error {
rows, err = queryer.Query(query, dargs)
if err == driver.ErrSkip {
conn.attr.populate(ctx, query+msgErrSkip)
return nil
}
conn.attr.populate(ctx, query)
return err
})
}
return rows, err
}