in xray/sql_context.go [186:225]
func (conn *driverConn) ExecContext(ctx context.Context, query string, args []driver.NamedValue) (driver.Result, error) {
var err error
var result driver.Result
if execerCtx, ok := conn.Conn.(driver.ExecerContext); ok {
Capture(ctx, conn.attr.dbname+conn.attr.host, func(ctx context.Context) error {
result, err = execerCtx.ExecContext(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()
}
execer, ok := conn.Conn.(driver.Execer)
if !ok {
return nil, driver.ErrSkip
}
dargs, err0 := namedValuesToValues(args)
if err0 != nil {
return nil, err0
}
Capture(ctx, conn.attr.dbname+conn.attr.host, func(ctx context.Context) error {
var err error
result, err = execer.Exec(query, dargs)
if err == driver.ErrSkip {
conn.attr.populate(ctx, query+msgErrSkip)
return nil
}
conn.attr.populate(ctx, query)
return err
})
}
return result, err
}