// valueToBigRat converts a numeric 'value' into a big.Rat object. func valueToBigRat(value sqltypes.Value) (*big.Rat, error) { switch { case value.IsUnsigned(): nativeValue, err := value.ParseUint64() if err != nil { return nil, err } return uint64ToBigRat(nativeValue), nil case value.IsSigned(): nativeValue, err := value.ParseInt64() if err != nil { return nil, err } return int64ToBigRat(nativeValue), nil case value.IsFloat(): nativeValue, err := value.ParseFloat64() if err != nil { return nil, err } return float64ToBigRat(nativeValue), nil default: panic(fmt.Sprintf("got value with a non numeric type: %v", value)) } }