MCPcopy Create free account
hub / github.com/auxten/postgresql-parser / Eval

Method Eval

pkg/sql/sem/tree/eval.go:3928–3965  ·  view source on GitHub ↗

Eval implements the TypedExpr interface.

(ctx *EvalContext)

Source from the content-addressed store, hash-verified

3926
3927// Eval implements the TypedExpr interface.
3928func (expr *IndirectionExpr) Eval(ctx *EvalContext) (Datum, error) {
3929 var subscriptIdx int
3930 for i, t := range expr.Indirection {
3931 if t.Slice || i > 0 {
3932 return nil, errors.AssertionFailedf("unsupported feature should have been rejected during planning")
3933 }
3934
3935 d, err := t.Begin.(TypedExpr).Eval(ctx)
3936 if err != nil {
3937 return nil, err
3938 }
3939 if d == DNull {
3940 return d, nil
3941 }
3942 subscriptIdx = int(MustBeDInt(d))
3943 }
3944
3945 d, err := expr.Expr.(TypedExpr).Eval(ctx)
3946 if err != nil {
3947 return nil, err
3948 }
3949 if d == DNull {
3950 return d, nil
3951 }
3952
3953 // Index into the DArray, using 1-indexing.
3954 arr := MustBeDArray(d)
3955
3956 // VECTOR types use 0-indexing.
3957 switch arr.customOid {
3958 case oid.T_oidvector, oid.T_int2vector:
3959 subscriptIdx++
3960 }
3961 if subscriptIdx < 1 || subscriptIdx > arr.Len() {
3962 return DNull, nil
3963 }
3964 return arr.Array[subscriptIdx-1], nil
3965}
3966
3967// Eval implements the TypedExpr interface.
3968func (expr *CollateExpr) Eval(ctx *EvalContext) (Datum, error) {

Callers

nothing calls this directly

Calls 4

MustBeDIntFunction · 0.85
MustBeDArrayFunction · 0.85
EvalMethod · 0.65
LenMethod · 0.65

Tested by

no test coverage detected