Eval implements the sql.Expression interface.
(ctx *sql.Context, row sql.Row)
| 49 | |
| 50 | // Eval implements the sql.Expression interface. |
| 51 | func (ac *AssignmentCast) Eval(ctx *sql.Context, row sql.Row) (any, error) { |
| 52 | val, err := ac.expr.Eval(ctx, row) |
| 53 | if err != nil || val == nil { |
| 54 | return val, err |
| 55 | } |
| 56 | castsColl, err := core.GetCastsCollectionFromContext(ctx, "") |
| 57 | if err != nil { |
| 58 | return nil, err |
| 59 | } |
| 60 | cast, err := castsColl.GetAssignmentCast(ctx, ac.sourceType, ac.targetType) |
| 61 | if err != nil { |
| 62 | return nil, err |
| 63 | } |
| 64 | if !cast.ID.IsValid() { |
| 65 | return nil, errors.Errorf("ASSIGNMENT_CAST: target is of type %s but expression is of type %s: %s", |
| 66 | ac.targetType.String(), ac.sourceType.String(), ac.expr.String()) |
| 67 | } |
| 68 | return cast.Eval(ctx, val, ac.sourceType, ac.targetType) |
| 69 | } |
| 70 | |
| 71 | // IsNullable implements the sql.Expression interface. |
| 72 | func (ac *AssignmentCast) IsNullable(ctx *sql.Context) bool { |
nothing calls this directly
no test coverage detected