in literals.go [125:207]
func LiteralFromBytes(typ Type, data []byte) (Literal, error) {
if data == nil {
return nil, ErrInvalidBinSerialization
}
switch t := typ.(type) {
case BooleanType:
var v BoolLiteral
err := v.UnmarshalBinary(data)
return v, err
case Int32Type:
var v Int32Literal
err := v.UnmarshalBinary(data)
return v, err
case Int64Type:
var v Int64Literal
err := v.UnmarshalBinary(data)
return v, err
case Float32Type:
var v Float32Literal
err := v.UnmarshalBinary(data)
return v, err
case Float64Type:
var v Float64Literal
err := v.UnmarshalBinary(data)
return v, err
case StringType:
var v StringLiteral
err := v.UnmarshalBinary(data)
return v, err
case BinaryType:
var v BinaryLiteral
err := v.UnmarshalBinary(data)
return v, err
case FixedType:
if len(data) != t.Len() {
// looks like some writers will write a prefix of the fixed length
// for lower/upper bounds instead of the full length. so let's pad
// it out to the full length if unpacking a fixed length literal
padded := make([]byte, t.Len())
copy(padded, data)
data = padded
}
var v FixedLiteral
err := v.UnmarshalBinary(data)
return v, err
case DecimalType:
v := DecimalLiteral{Scale: t.scale}
err := v.UnmarshalBinary(data)
return v, err
case DateType:
var v DateLiteral
err := v.UnmarshalBinary(data)
return v, err
case TimeType:
var v TimeLiteral
err := v.UnmarshalBinary(data)
return v, err
case TimestampType, TimestampTzType:
var v TimestampLiteral
err := v.UnmarshalBinary(data)
return v, err
case UUIDType:
var v UUIDLiteral
err := v.UnmarshalBinary(data)
return v, err
}
return nil, ErrType
}