func()

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
}