in literals.go [500:538]
func (i Int64Literal) To(t Type) (Literal, error) {
switch t := t.(type) {
case Int32Type:
if math.MaxInt32 < i {
return Int32AboveMaxLiteral(), nil
} else if math.MinInt32 > i {
return Int32BelowMinLiteral(), nil
}
return Int32Literal(i), nil
case Int64Type:
return i, nil
case Float32Type:
return Float32Literal(i), nil
case Float64Type:
return Float64Literal(i), nil
case DateType:
return DateLiteral(i), nil
case TimeType:
return TimeLiteral(i), nil
case TimestampType:
return TimestampLiteral(i), nil
case TimestampTzType:
return TimestampLiteral(i), nil
case DecimalType:
unscaled := Decimal{Val: decimal128.FromI64(int64(i)), Scale: 0}
if t.scale == 0 {
return DecimalLiteral(unscaled), nil
}
out, err := unscaled.Val.Rescale(0, int32(t.scale))
if err != nil {
return nil, fmt.Errorf("%w: failed to cast to DecimalType: %s", ErrBadCast, err.Error())
}
return DecimalLiteral{Val: out, Scale: t.scale}, nil
}
return nil, fmt.Errorf("%w: Int64Literal to %s", ErrBadCast, t)
}