tidb: github.com/pingcap/tidb/util/codec Index | Files

package codec

import "github.com/pingcap/tidb/util/codec"

Index

Package Files

bytes.go codec.go decimal.go float.go number.go

Constants

const (
    NilFlag byte = 0
)

First byte in the encoded value which specifies the encoding type.

func CutColumnID Uses

func CutColumnID(b []byte) (remain []byte, n int64, err error)

CutColumnID cuts the column ID from b. It will return the remains as byte slice and column ID

func CutOne Uses

func CutOne(b []byte) (data []byte, remain []byte, err error)

CutOne cuts the first encoded value from b. It will return the first encoded item and the remains as byte slice.

func Decode Uses

func Decode(b []byte, size int) ([]types.Datum, error)

Decode decodes values from a byte slice generated with EncodeKey or EncodeValue before. size is the size of decoded datum slice.

func DecodeBytes Uses

func DecodeBytes(b []byte, buf []byte) ([]byte, []byte, error)

DecodeBytes decodes bytes which is encoded by EncodeBytes before, returns the leftover bytes and decoded value if no error. `buf` is used to buffer data to avoid the cost of makeslice in decodeBytes when DecodeBytes is called by Decoder.DecodeOne.

func DecodeBytesDesc Uses

func DecodeBytesDesc(b []byte, buf []byte) ([]byte, []byte, error)

DecodeBytesDesc decodes bytes which is encoded by EncodeBytesDesc before, returns the leftover bytes and decoded value if no error.

func DecodeCmpUintToInt Uses

func DecodeCmpUintToInt(u uint64) int64

DecodeCmpUintToInt decodes the u that encoded by EncodeIntToCmpUint

func DecodeCompactBytes Uses

func DecodeCompactBytes(b []byte) ([]byte, []byte, error)

DecodeCompactBytes decodes bytes which is encoded by EncodeCompactBytes before.

func DecodeComparableUvarint Uses

func DecodeComparableUvarint(b []byte) ([]byte, uint64, error)

DecodeComparableUvarint decodes mem-comparable uvarint.

func DecodeComparableVarint Uses

func DecodeComparableVarint(b []byte) ([]byte, int64, error)

DecodeComparableVarint decodes mem-comparable varint.

func DecodeDecimal Uses

func DecodeDecimal(b []byte) ([]byte, *types.MyDecimal, int, int, error)

DecodeDecimal decodes bytes to decimal.

func DecodeFloat Uses

func DecodeFloat(b []byte) ([]byte, float64, error)

DecodeFloat decodes a float from a byte slice generated with EncodeFloat before.

func DecodeFloatDesc Uses

func DecodeFloatDesc(b []byte) ([]byte, float64, error)

DecodeFloatDesc decodes a float from a byte slice generated with EncodeFloatDesc before.

func DecodeInt Uses

func DecodeInt(b []byte) ([]byte, int64, error)

DecodeInt decodes value encoded by EncodeInt before. It returns the leftover un-decoded slice, decoded value if no error.

func DecodeIntDesc Uses

func DecodeIntDesc(b []byte) ([]byte, int64, error)

DecodeIntDesc decodes value encoded by EncodeInt before. It returns the leftover un-decoded slice, decoded value if no error.

func DecodeOne Uses

func DecodeOne(b []byte) (remain []byte, d types.Datum, err error)

DecodeOne decodes on datum from a byte slice generated with EncodeKey or EncodeValue.

func DecodeRange Uses

func DecodeRange(b []byte, size int) ([]types.Datum, []byte, error)

DecodeRange decodes the range values from a byte slice that generated by EncodeKey. It handles some special values like `MinNotNull` and `MaxValueDatum`.

func DecodeUint Uses

func DecodeUint(b []byte) ([]byte, uint64, error)

DecodeUint decodes value encoded by EncodeUint before. It returns the leftover un-decoded slice, decoded value if no error.

func DecodeUintDesc Uses

func DecodeUintDesc(b []byte) ([]byte, uint64, error)

DecodeUintDesc decodes value encoded by EncodeInt before. It returns the leftover un-decoded slice, decoded value if no error.

func DecodeUvarint Uses

func DecodeUvarint(b []byte) ([]byte, uint64, error)

DecodeUvarint decodes value encoded by EncodeUvarint before. It returns the leftover un-decoded slice, decoded value if no error.

func DecodeVarint Uses

func DecodeVarint(b []byte) ([]byte, int64, error)

DecodeVarint decodes value encoded by EncodeVarint before. It returns the leftover un-decoded slice, decoded value if no error.

func EncodeBytes Uses

func EncodeBytes(b []byte, data []byte) []byte

EncodeBytes guarantees the encoded value is in ascending order for comparison, encoding with the following rule:

[group1][marker1]...[groupN][markerN]
group is 8 bytes slice which is padding with 0.
marker is `0xFF - padding 0 count`

For example:

[] -> [0, 0, 0, 0, 0, 0, 0, 0, 247]
[1, 2, 3] -> [1, 2, 3, 0, 0, 0, 0, 0, 250]
[1, 2, 3, 0] -> [1, 2, 3, 0, 0, 0, 0, 0, 251]
[1, 2, 3, 4, 5, 6, 7, 8] -> [1, 2, 3, 4, 5, 6, 7, 8, 255, 0, 0, 0, 0, 0, 0, 0, 0, 247]

Refer: https://github.com/facebook/mysql-5.6/wiki/MyRocks-record-format#memcomparable-format

func EncodeBytesDesc Uses

func EncodeBytesDesc(b []byte, data []byte) []byte

EncodeBytesDesc first encodes bytes using EncodeBytes, then bitwise reverses encoded value to guarantee the encoded value is in descending order for comparison.

func EncodeCompactBytes Uses

func EncodeCompactBytes(b []byte, data []byte) []byte

EncodeCompactBytes joins bytes with its length into a byte slice. It is more efficient in both space and time compare to EncodeBytes. Note that the encoded result is not memcomparable.

func EncodeComparableUvarint Uses

func EncodeComparableUvarint(b []byte, v uint64) []byte

EncodeComparableUvarint encodes uint64 into mem-comparable bytes.

func EncodeComparableVarint Uses

func EncodeComparableVarint(b []byte, v int64) []byte

EncodeComparableVarint encodes an int64 to a mem-comparable bytes.

func EncodeDecimal Uses

func EncodeDecimal(b []byte, dec *types.MyDecimal, precision, frac int) ([]byte, error)

EncodeDecimal encodes a decimal into a byte slice which can be sorted lexicographically later.

func EncodeFloat Uses

func EncodeFloat(b []byte, v float64) []byte

EncodeFloat encodes a float v into a byte slice which can be sorted lexicographically later. EncodeFloat guarantees that the encoded value is in ascending order for comparison.

func EncodeFloatDesc Uses

func EncodeFloatDesc(b []byte, v float64) []byte

EncodeFloatDesc encodes a float v into a byte slice which can be sorted lexicographically later. EncodeFloatDesc guarantees that the encoded value is in descending order for comparison.

func EncodeInt Uses

func EncodeInt(b []byte, v int64) []byte

EncodeInt appends the encoded value to slice b and returns the appended slice. EncodeInt guarantees that the encoded value is in ascending order for comparison.

func EncodeIntDesc Uses

func EncodeIntDesc(b []byte, v int64) []byte

EncodeIntDesc appends the encoded value to slice b and returns the appended slice. EncodeIntDesc guarantees that the encoded value is in descending order for comparison.

func EncodeIntToCmpUint Uses

func EncodeIntToCmpUint(v int64) uint64

EncodeIntToCmpUint make int v to comparable uint type

func EncodeKey Uses

func EncodeKey(sc *stmtctx.StatementContext, b []byte, v ...types.Datum) ([]byte, error)

EncodeKey appends the encoded values to byte slice b, returns the appended slice. It guarantees the encoded value is in ascending order for comparison. For Decimal type, datum must set datum's length and frac.

func EncodeMySQLTime Uses

func EncodeMySQLTime(sc *stmtctx.StatementContext, d types.Datum, tp byte, b []byte) (_ []byte, err error)

EncodeMySQLTime encodes datum of `KindMysqlTime` to []byte.

func EncodeUint Uses

func EncodeUint(b []byte, v uint64) []byte

EncodeUint appends the encoded value to slice b and returns the appended slice. EncodeUint guarantees that the encoded value is in ascending order for comparison.

func EncodeUintDesc Uses

func EncodeUintDesc(b []byte, v uint64) []byte

EncodeUintDesc appends the encoded value to slice b and returns the appended slice. EncodeUintDesc guarantees that the encoded value is in descending order for comparison.

func EncodeUvarint Uses

func EncodeUvarint(b []byte, v uint64) []byte

EncodeUvarint appends the encoded value to slice b and returns the appended slice. Note that the encoded result is not memcomparable.

func EncodeValue Uses

func EncodeValue(sc *stmtctx.StatementContext, b []byte, v ...types.Datum) ([]byte, error)

EncodeValue appends the encoded values to byte slice b, returning the appended slice. It does not guarantee the order for comparison.

func EncodeVarint Uses

func EncodeVarint(b []byte, v int64) []byte

EncodeVarint appends the encoded value to slice b and returns the appended slice. Note that the encoded result is not memcomparable.

func EqualChunkRow Uses

func EqualChunkRow(sc *stmtctx.StatementContext,
    row1 chunk.Row, allTypes1 []*types.FieldType, colIdx1 []int,
    row2 chunk.Row, allTypes2 []*types.FieldType, colIdx2 []int,
) (bool, error)

EqualChunkRow returns a boolean reporting whether row1 and row2 with their types and column index are logically equal.

func EstimateValueSize Uses

func EstimateValueSize(sc *stmtctx.StatementContext, val types.Datum) (int, error)

EstimateValueSize uses to estimate the value size of the encoded values.

func HashChunkColumns Uses

func HashChunkColumns(sc *stmtctx.StatementContext, h []hash.Hash64, chk *chunk.Chunk, tp *types.FieldType, colIdx int, buf []byte, isNull []bool) (err error)

HashChunkColumns writes the encoded value of each row's column, which of index `colIdx`, to h.

func HashChunkRow Uses

func HashChunkRow(sc *stmtctx.StatementContext, w io.Writer, row chunk.Row, allTypes []*types.FieldType, colIdx []int, buf []byte) (err error)

HashChunkRow writes the encoded values to w. If two rows are logically equal, it will generate the same bytes.

func SetRawValues Uses

func SetRawValues(data []byte, values []types.Datum) error

SetRawValues set raw datum values from a row data.

type Decoder Uses

type Decoder struct {
    // contains filtered or unexported fields
}

Decoder is used to decode value to chunk.

func NewDecoder Uses

func NewDecoder(chk *chunk.Chunk, timezone *time.Location) *Decoder

NewDecoder creates a Decoder.

func (*Decoder) DecodeOne Uses

func (decoder *Decoder) DecodeOne(b []byte, colIdx int, ft *types.FieldType) (remain []byte, err error)

DecodeOne decodes one value to chunk and returns the remained bytes.

Package codec imports 16 packages (graph) and is imported by 306 packages. Updated 2019-09-19. Refresh now. Tools for package owners.