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

Function PerformCast

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

PerformCast performs a cast from the provided Datum to the specified types.T.

(ctx *EvalContext, d Datum, t *types.T)

Source from the content-addressed store, hash-verified

3295// PerformCast performs a cast from the provided Datum to the specified
3296// types.T.
3297func PerformCast(ctx *EvalContext, d Datum, t *types.T) (Datum, error) {
3298 switch t.Family() {
3299 case types.BitFamily:
3300 switch v := d.(type) {
3301 case *DBitArray:
3302 if t.Width() == 0 || v.BitLen() == uint(t.Width()) {
3303 return d, nil
3304 }
3305 var a DBitArray
3306 switch t.Oid() {
3307 case oid.T_varbit:
3308 // VARBITs do not have padding attached.
3309 a.BitArray = v.BitArray.Clone()
3310 if uint(t.Width()) < a.BitArray.BitLen() {
3311 a.BitArray = a.BitArray.ToWidth(uint(t.Width()))
3312 }
3313 default:
3314 a.BitArray = v.BitArray.Clone().ToWidth(uint(t.Width()))
3315 }
3316 return &a, nil
3317 case *DInt:
3318 return NewDBitArrayFromInt(int64(*v), uint(t.Width()))
3319 case *DString:
3320 res, err := bitarray.Parse(string(*v))
3321 if err != nil {
3322 return nil, err
3323 }
3324 if t.Width() > 0 {
3325 res = res.ToWidth(uint(t.Width()))
3326 }
3327 return &DBitArray{BitArray: res}, nil
3328 case *DCollatedString:
3329 res, err := bitarray.Parse(v.Contents)
3330 if err != nil {
3331 return nil, err
3332 }
3333 if t.Width() > 0 {
3334 res = res.ToWidth(uint(t.Width()))
3335 }
3336 return &DBitArray{BitArray: res}, nil
3337 }
3338
3339 case types.BoolFamily:
3340 switch v := d.(type) {
3341 case *DBool:
3342 return d, nil
3343 case *DInt:
3344 return MakeDBool(*v != 0), nil
3345 case *DFloat:
3346 return MakeDBool(*v != 0), nil
3347 case *DDecimal:
3348 return MakeDBool(v.Sign() != 0), nil
3349 case *DString:
3350 return ParseDBool(string(*v))
3351 case *DCollatedString:
3352 return ParseDBool(v.Contents)
3353 }
3354

Callers 1

EvalMethod · 0.85

Calls 15

SetStringMethod · 0.95
AppendMethod · 0.95
ResolveFunctionMethod · 0.95
ParseFunction · 0.92
TruncateStringFunction · 0.92
MakeDateFromUnixEpochFunction · 0.92
FromTimeFunction · 0.92
TimeOfDayTypeAlias · 0.92
UnixFunction · 0.92
FromInt64Function · 0.92
FromFloat64Function · 0.92

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…