in literals.go [1157:1200]
func (d DecimalLiteral) To(t Type) (Literal, error) {
switch t := t.(type) {
case DecimalType:
if d.Scale == t.scale {
return d, nil
}
return nil, fmt.Errorf("%w: could not convert %v to %s",
ErrBadCast, d, t)
case Int32Type:
v := d.Val.BigInt().Int64()
if v > math.MaxInt32 {
return Int32AboveMaxLiteral(), nil
} else if v < math.MinInt32 {
return Int32BelowMinLiteral(), nil
}
return Int32Literal(int32(v)), nil
case Int64Type:
v := d.Val.BigInt()
if !v.IsInt64() {
if v.Sign() > 0 {
return Int64AboveMaxLiteral(), nil
} else if v.Sign() < 0 {
return Int64BelowMinLiteral(), nil
}
}
return Int64Literal(v.Int64()), nil
case Float32Type:
v := d.Val.ToFloat64(int32(d.Scale))
if v > math.MaxFloat32 {
return Float32AboveMaxLiteral(), nil
} else if v < -math.MaxFloat32 {
return Float32BelowMinLiteral(), nil
}
return Float32Literal(float32(v)), nil
case Float64Type:
return Float64Literal(d.Val.ToFloat64(int32(d.Scale))), nil
}
return nil, fmt.Errorf("%w: DecimalLiteral to %s", ErrBadCast, t)
}