Add infinity support for Numeric Binary Encode/Decode
This commit is contained in:
committed by
Jack Christensen
parent
8890a746d7
commit
14c515db82
+18
@@ -18,6 +18,12 @@ const nbase = 10000
|
|||||||
const (
|
const (
|
||||||
pgNumericNaN = 0x00000000c0000000
|
pgNumericNaN = 0x00000000c0000000
|
||||||
pgNumericNaNSign = 0xc000
|
pgNumericNaNSign = 0xc000
|
||||||
|
|
||||||
|
pgNumericPosInf = 0x00000000d0000000
|
||||||
|
pgNumericPosInfSign = 0xd000
|
||||||
|
|
||||||
|
pgNumericNegInf = 0x00000000f0000000
|
||||||
|
pgNumericNegInfSign = 0xf000
|
||||||
)
|
)
|
||||||
|
|
||||||
var big0 *big.Int = big.NewInt(0)
|
var big0 *big.Int = big.NewInt(0)
|
||||||
@@ -492,6 +498,12 @@ func (dst *Numeric) DecodeBinary(ci *ConnInfo, src []byte) error {
|
|||||||
if sign == pgNumericNaNSign {
|
if sign == pgNumericNaNSign {
|
||||||
*dst = Numeric{Status: Present, NaN: true}
|
*dst = Numeric{Status: Present, NaN: true}
|
||||||
return nil
|
return nil
|
||||||
|
} else if sign == pgNumericPosInfSign {
|
||||||
|
*dst = Numeric{Status: Present, InfinityModifier: Infinity}
|
||||||
|
return nil
|
||||||
|
} else if sign == pgNumericNegInfSign {
|
||||||
|
*dst = Numeric{Status: Present, InfinityModifier: NegativeInfinity}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if ndigits == 0 {
|
if ndigits == 0 {
|
||||||
@@ -628,6 +640,12 @@ func (src Numeric) EncodeBinary(ci *ConnInfo, buf []byte) ([]byte, error) {
|
|||||||
if src.NaN {
|
if src.NaN {
|
||||||
buf = pgio.AppendUint64(buf, pgNumericNaN)
|
buf = pgio.AppendUint64(buf, pgNumericNaN)
|
||||||
return buf, nil
|
return buf, nil
|
||||||
|
} else if src.InfinityModifier == Infinity {
|
||||||
|
buf = pgio.AppendUint64(buf, pgNumericPosInf)
|
||||||
|
return buf, nil
|
||||||
|
} else if src.InfinityModifier == NegativeInfinity {
|
||||||
|
buf = pgio.AppendUint64(buf, pgNumericNegInf)
|
||||||
|
return buf, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
var sign int16
|
var sign int16
|
||||||
|
|||||||
Reference in New Issue
Block a user