MCPcopy Create free account
hub / github.com/dolthub/doltgresql / Eval

Method Eval

server/expression/subscript.go:69–105  ·  view source on GitHub ↗

Eval implements the sql.Expression interface.

(ctx *sql.Context, row sql.Row)

Source from the content-addressed store, hash-verified

67
68// Eval implements the sql.Expression interface.
69func (s Subscript) Eval(ctx *sql.Context, row sql.Row) (interface{}, error) {
70 childVal, err := s.Child.Eval(ctx, row)
71 if err != nil {
72 return nil, err
73 }
74 if childVal == nil {
75 return nil, nil
76 }
77
78 indexVal, err := s.Index.Eval(ctx, row)
79 if err != nil {
80 return nil, err
81 }
82 if indexVal == nil {
83 return nil, nil
84 }
85
86 switch child := childVal.(type) {
87 case []interface{}:
88 index, ok := indexVal.(int32)
89 if !ok {
90 converted, _, err := types.Int32.Convert(ctx, indexVal)
91 if err != nil {
92 return nil, err
93 }
94 index = converted.(int32)
95 }
96
97 // subscripts are 1-based
98 if index < 1 || int(index) > len(child) {
99 return nil, nil
100 }
101 return child[index-1], nil
102 default:
103 return nil, fmt.Errorf("unsupported type %T for subscript", child)
104 }
105}
106
107// Children implements the sql.Expression interface.
108func (s Subscript) Children() []sql.Expression {

Callers

nothing calls this directly

Calls 3

EvalMethod · 0.65
ErrorfMethod · 0.65
ConvertMethod · 0.45

Tested by

no test coverage detected