Documentation
¶
Overview ¶
Package encoding implements hdb field type encodings and decodings.
Index ¶
- Constants
- Variables
- type Decimal
- func NewDecimalFromDecompose(form byte, negative bool, coefficient []byte, exponent int32) (Decimal, error)
- func NewDecimalFromRat(r *big.Rat) (Decimal, error)
- func NewFixedFromDecompose(form byte, negative bool, coefficient []byte, exponent int32, prec, scale int) (Decimal, error)
- func NewFixedFromRat(r *big.Rat, prec, scale int) (Decimal, error)
- type Decoder
- func (d *Decoder) AlphanumField(alphanumDfv1 bool) (any, error)
- func (d *Decoder) AuthBigUint32() (uint32, error)
- func (d *Decoder) AuthBytes() []byte
- func (d *Decoder) AuthCesu8String() (string, error)
- func (d *Decoder) AuthString() string
- func (d *Decoder) AuthVarFieldInd() int
- func (d *Decoder) Bool() bool
- func (d *Decoder) BooleanField() (any, error)
- func (d *Decoder) Buffer() []byte
- func (d *Decoder) Byte() byte
- func (d *Decoder) Bytes(n int) []byte
- func (d *Decoder) CESU8Bytes(size int) ([]byte, error)
- func (d *Decoder) CESU8LIBytes() (int, []byte, error)
- func (d *Decoder) CESU8LIString() (int, string, error)
- func (d *Decoder) Cesu8Field() (any, error)
- func (d *Decoder) DateField() (any, error)
- func (d *Decoder) DaydateField(emptyDateAsNull bool) (any, error)
- func (d *Decoder) Decimal() (*big.Int, int, error)
- func (d *Decoder) DecimalField() (any, error)
- func (d *Decoder) DoubleField() (any, error)
- func (d *Decoder) Fixed(size int) *big.Int
- func (d *Decoder) Fixed8Field(scale int) (any, error)
- func (d *Decoder) Fixed12Field(scale int) (any, error)
- func (d *Decoder) Fixed16Field(scale int) (any, error)
- func (d *Decoder) Float32() float32
- func (d *Decoder) Float64() float64
- func (d *Decoder) HexField() (any, error)
- func (d *Decoder) Int8() int8
- func (d *Decoder) Int16() int16
- func (d *Decoder) Int32() int32
- func (d *Decoder) Int64() int64
- func (d *Decoder) LIBytes() (int, []byte)
- func (d *Decoder) LIString() (n int, s string)
- func (d *Decoder) LongdateField() (any, error)
- func (d *Decoder) RealField() (any, error)
- func (d *Decoder) SeconddateField() (any, error)
- func (d *Decoder) SecondtimeField() (any, error)
- func (d *Decoder) SetBuffer(buf []byte)
- func (d *Decoder) Skip(cnt int)
- func (d *Decoder) Str(n int) string
- func (d *Decoder) TimeField() (any, error)
- func (d *Decoder) TimestampField() (any, error)
- func (d *Decoder) Transformer() transform.Transformer
- func (d *Decoder) Uint16() uint16
- func (d *Decoder) Uint16ByteOrder(byteOrder binary.ByteOrder) uint16
- func (d *Decoder) Uint32() uint32
- func (d *Decoder) Uint32ByteOrder(byteOrder binary.ByteOrder) uint32
- func (d *Decoder) Uint64() uint64
- func (d *Decoder) VarField() (any, error)
- type Encoder
- func (e *Encoder) BigintField(v any) error
- func (e *Encoder) Bool(v bool)
- func (e *Encoder) BooleanField(v any) error
- func (e *Encoder) Buffer() []byte
- func (e *Encoder) Byte(b byte)
- func (e *Encoder) Bytes(p []byte)
- func (e *Encoder) CESU8Bytes(p []byte) (int, error)
- func (e *Encoder) CESU8LIBytes(p []byte) error
- func (e *Encoder) CESU8LIString(s string) error
- func (e *Encoder) CESU8String(s string) (int, error)
- func (e *Encoder) Cesu8Field(v any) error
- func (e *Encoder) DateField(v any) error
- func (e *Encoder) DaydateField(v any) error
- func (e *Encoder) Decimal(m *big.Int, exp int)
- func (e *Encoder) DecimalField(v any) error
- func (e *Encoder) DoubleField(v any) error
- func (e *Encoder) Fixed(m *big.Int, size int)
- func (e *Encoder) FixedField(v any, size int) error
- func (e *Encoder) Float32(f float32)
- func (e *Encoder) Float64(f float64)
- func (e *Encoder) HexField(v any) error
- func (e *Encoder) Int8(i8 int8)
- func (e *Encoder) Int16(i16 int16)
- func (e *Encoder) Int32(i32 int32)
- func (e *Encoder) Int64(i64 int64)
- func (e *Encoder) IntegerField(v any) error
- func (e *Encoder) LIBytes(p []byte) error
- func (e *Encoder) LIString(s string) error
- func (e *Encoder) LongdateField(v any) error
- func (e *Encoder) RealField(v any) error
- func (e *Encoder) SeconddateField(v any) error
- func (e *Encoder) SecondtimeField(v any) error
- func (e *Encoder) SetBuffer(buf []byte)
- func (e *Encoder) SmallintField(v any) error
- func (e *Encoder) String(s string)
- func (e *Encoder) TimeField(v any) error
- func (e *Encoder) TimestampField(v any) error
- func (e *Encoder) TinyintField(v any) error
- func (e *Encoder) Transformer() transform.Transformer
- func (e *Encoder) Uint16(u16 uint16)
- func (e *Encoder) Uint16ByteOrder(u16 uint16, byteOrder binary.ByteOrder)
- func (e *Encoder) Uint32(u32 uint32)
- func (e *Encoder) Uint64(u64 uint64)
- func (e *Encoder) VarField(v any) error
- func (e *Encoder) Zeroes(n int)
- type ShortBufferError
Constants ¶
const IntegerFieldSize = 4
IntegerFieldSize constant.
Variables ¶
var ErrDecimalOutOfRange = errors.New("decimal out of range error")
ErrDecimalOutOfRange means that a big.Rat exceeds the size of hdb decimal fields.
Functions ¶
This section is empty.
Types ¶
type Decimal ¶ added in v1.17.2
type Decimal struct {
// contains filtered or unexported fields
}
Decimal is the internal representation of a decimal value as mantissa and exponent.
func NewDecimalFromDecompose ¶ added in v1.17.2
func NewDecimalFromDecompose(form byte, negative bool, coefficient []byte, exponent int32) (Decimal, error)
NewDecimalFromDecompose creates a Decimal (dec128) from decimalDecompose parts.
func NewDecimalFromRat ¶ added in v1.17.2
NewDecimalFromRat creates a Decimal (dec128) from a *big.Rat.
func NewFixedFromDecompose ¶ added in v1.17.2
func NewFixedFromDecompose(form byte, negative bool, coefficient []byte, exponent int32, prec, scale int) (Decimal, error)
NewFixedFromDecompose creates a Decimal (fixed) from decimalDecompose parts.
func NewFixedFromRat ¶ added in v1.17.2
NewFixedFromRat creates a Decimal (fixed) from a *big.Rat.
type Decoder ¶
type Decoder struct {
// contains filtered or unexported fields
}
Decoder decodes hdb protocol datatypes on basis of an buffer.
Decoder primitives slice the buffer using lengths/counts taken from the wire. A read is length-checked first: if the buffer is shorter than the read requires - an internally inconsistent frame, which a correct server never sends - the read panics ShortBufferError rather than a raw slice-bounds error. The typed panic lets the part-decode boundary recover it deterministically (see protocol.recoverShortBuffer) and fail just the current statement, while a genuine driver bug (a different panic) still crashes.
func NewDecoder ¶
func NewDecoder(buf []byte, tr transform.Transformer) *Decoder
NewDecoder returns a new Decoder over buf using tr for CESU-8 -> UTF-8 field decoding. Either argument may be nil (nil buf: set later via SetBuffer; nil tr: no CESU-8 field decoding on this decoder).
func (*Decoder) AlphanumField ¶ added in v1.8.14
AlphanumField decodes an alphanum field.
func (*Decoder) AuthBigUint32 ¶ added in v1.16.2
AuthBigUint32 decodes an auth big uint32 field.
func (*Decoder) AuthCesu8String ¶ added in v1.16.2
AuthCesu8String decodes an auth variable cesu8 string field.
func (*Decoder) AuthString ¶ added in v1.16.2
AuthString decodes an auth variable string field.
func (*Decoder) AuthVarFieldInd ¶ added in v1.16.2
AuthVarFieldInd decodes an auth variable field indicator.
func (*Decoder) BooleanField ¶ added in v1.8.14
BooleanField decodes a boolean field.
func (*Decoder) CESU8Bytes ¶
CESU8Bytes decodes CESU-8 into UTF-8 bytes. - error is only returned in case of conversion errors.
func (*Decoder) CESU8LIBytes ¶ added in v0.107.3
CESU8LIBytes decodes CESU-8 into UTF-8 bytes with length indicator.
func (*Decoder) CESU8LIString ¶ added in v0.107.3
CESU8LIString decodes a CESU-8 into a UTF-8 string with length indicator.
func (*Decoder) Cesu8Field ¶ added in v1.8.14
Cesu8Field decodes a cesu8 field.
func (*Decoder) DaydateField ¶ added in v1.8.14
DaydateField decodes a daydate field.
func (*Decoder) Decimal ¶
Decimal decodes a decimal. - error is only returned in case of conversion errors.
func (*Decoder) DecimalField ¶ added in v1.8.14
DecimalField decodes a decimal field.
func (*Decoder) DoubleField ¶ added in v1.8.14
DoubleField decodes a double field.
func (*Decoder) Fixed8Field ¶ added in v1.8.14
Fixed8Field decodes a fixed8 field.
func (*Decoder) Fixed12Field ¶ added in v1.8.14
Fixed12Field decodes a fixed12 field.
func (*Decoder) Fixed16Field ¶ added in v1.8.14
Fixed16Field decodes a fixed16 field.
func (*Decoder) LongdateField ¶ added in v1.8.14
LongdateField decodes a longdate field.
func (*Decoder) SeconddateField ¶ added in v1.8.14
SeconddateField decodes a seconddate field.
func (*Decoder) SecondtimeField ¶ added in v1.8.14
SecondtimeField decodes a secondtime field.
func (*Decoder) SetBuffer ¶ added in v1.18.6
SetBuffer points the decoder at buf, resetting its read position. The transformer is retained.
func (*Decoder) TimestampField ¶ added in v1.8.14
TimestampField decodes a timestamp field.
func (*Decoder) Transformer ¶ added in v1.8.21
func (d *Decoder) Transformer() transform.Transformer
Transformer returns the decoder's CESU-8 transformer.
func (*Decoder) Uint16ByteOrder ¶ added in v0.107.0
Uint16ByteOrder decodes an uint16 in given byte order.
func (*Decoder) Uint32ByteOrder ¶
Uint32ByteOrder decodes an uint32 in given byte order.
type Encoder ¶
type Encoder struct {
// contains filtered or unexported fields
}
Encoder encodes hdb protocol datatypes on basis of an io.Writer.
func NewEncoder ¶
func NewEncoder(buf []byte, tr transform.Transformer) *Encoder
NewEncoder returns a new Encoder over buf using tr for UTF-8 -> CESU-8 field encoding. Either argument may be nil (nil buf: append from empty; nil tr: no CESU-8 field encoding on this encoder).
func (*Encoder) BigintField ¶ added in v1.8.14
BigintField encodes a bigint field.
func (*Encoder) BooleanField ¶ added in v1.8.14
BooleanField encodes a boolean field.
func (*Encoder) CESU8Bytes ¶
CESU8Bytes encodes UTF-8 bytes into CESU-8 and returns the CESU-8 bytes written.
func (*Encoder) CESU8LIBytes ¶ added in v0.107.3
CESU8LIBytes encodes UTF-8 into CESU-8 bytes with length indicator.
func (*Encoder) CESU8LIString ¶ added in v0.107.3
CESU8LIString encodes a UTF-8 string into a CESU-8 string with length indicator.
func (*Encoder) CESU8String ¶
CESU8String encodes a UTF-8 string into CESU-8 and returns the CESU-8 bytes written.
func (*Encoder) Cesu8Field ¶ added in v1.8.14
Cesu8Field encodes a cesu8 field.
func (*Encoder) DaydateField ¶ added in v1.8.14
DaydateField encodes a daydate field.
func (*Encoder) DecimalField ¶ added in v1.8.14
DecimalField encodes a decimal field.
func (*Encoder) DoubleField ¶ added in v1.8.14
DoubleField encodes a double field.
func (*Encoder) Fixed ¶
Fixed encodes a fixed decimal value. Fixed consumes m: for negative values it mutates m in place (two's complement). Callers must pass a freshly allocated, single-use *big.Int (do not reuse m afterwards).
func (*Encoder) FixedField ¶ added in v1.17.2
FixedField encodes a fixed field.
func (*Encoder) IntegerField ¶ added in v1.8.14
IntegerField encodes an integer field.
func (*Encoder) LongdateField ¶ added in v1.8.14
LongdateField encodes a longdate field.
func (*Encoder) SeconddateField ¶ added in v1.8.14
SeconddateField encodes a seconddate field.
func (*Encoder) SecondtimeField ¶ added in v1.8.14
SecondtimeField encodes a secondtime field.
func (*Encoder) SetBuffer ¶ added in v1.18.6
SetBuffer points the encoder at buf (its write head is len(buf)). The transformer is retained.
func (*Encoder) SmallintField ¶ added in v1.8.14
SmallintField encodes a smallint field.
func (*Encoder) TimestampField ¶ added in v1.8.14
TimestampField encodes a timestamp field.
func (*Encoder) TinyintField ¶ added in v1.8.14
TinyintField encodes a tinyint field.
func (*Encoder) Transformer ¶ added in v1.18.6
func (e *Encoder) Transformer() transform.Transformer
Transformer returns the encoder's CESU-8 transformer, e.g. to seed a separate encoder that must encode CESU-8 with the same transformer (see auth.Prms).
func (*Encoder) Uint16ByteOrder ¶ added in v0.107.0
Uint16ByteOrder encodes an uint16 in given byte order.
type ShortBufferError ¶ added in v1.18.2
type ShortBufferError struct{ Need, Have int }
ShortBufferError is panicked by a Decoder read that would consume more bytes than remain in the buffer - a truncated or internally inconsistent part payload, which a correct server never sends. It is recovered at the part-decode boundary and turned into a normal statement error; it is not meant to escape the protocol layer.
func (ShortBufferError) Error ¶ added in v1.18.2
func (e ShortBufferError) Error() string