Copyright | (c) Winterland 2016 |
---|---|
License | BSD |
Maintainer | drkoster@qq.com |
Stability | experimental |
Portability | PORTABLE |
Safe Haskell | Safe-Inferred |
Language | Haskell2010 |
Binlog protocol
Synopsis
- data BinLogValue
- = BinLogTiny !Int8
- | BinLogShort !Int16
- | BinLogInt24 !Int24
- | BinLogLong !Int32
- | BinLogLongLong !Int64
- | BinLogFloat !Float
- | BinLogDouble !Double
- | BinLogBit !Word64
- | BinLogTimeStamp !Word32
- | BinLogTimeStamp2 !Word32 !Word32
- | BinLogDateTime !Word16 !Word8 !Word8 !Word8 !Word8 !Word8
- | BinLogDateTime2 !Word16 !Word8 !Word8 !Word8 !Word8 !Word8 !Word32
- | BinLogDate !Word16 !Word8 !Word8
- | BinLogTime !Word8 !Word16 !Word8 !Word8
- | BinLogTime2 !Word8 !Word16 !Word8 !Word8 !Word32
- | BinLogYear !Word16
- | BinLogNewDecimal !Scientific
- | BinLogEnum !Word16
- | BinLogSet !Word64
- | BinLogBytes !ByteString
- | BinLogGeometry !ByteString
- | BinLogNull
- getBinLogField :: BinLogMeta -> Get BinLogValue
- getMicroSecond :: Word8 -> Get Int32
- getBits' :: Word8 -> Get Word64
- getBinLogRow :: [BinLogMeta] -> BitMap -> Get [BinLogValue]
Documentation
data BinLogValue Source #
Data type for representing binlog values.
This data type DOES NOT try to parse binlog values into detailed haskell values, because you may not want to waste performance in situations like database middleware.
Due to the lack of signedness infomation in binlog meta, we cannot distinguish,
for example, between unsigned tiny 255 and tiny -1, so we use int to present
TINY,SHORT,INT,LONG
. If you have unsigned columns, use fromIntegral
to convert it
to word to get real unsigned value back, for example, fromIntegral (-1 :: Int) == 255 :: Word
For above reason, we use Int24
to present MySQL's INT24
type, you can get back the
unsigned value using word24
package's Word24
type.
Timestamp types(BinLogTimeStamp
and BinLogTimeStamp2
) are values converted into UTC already,
see MySQLVaule
's note.
There's also no infomation about charset, so we use ByteString
to present both text
and blob types, if you want to get text representation back, you have to query column charset
infomation, and use icu or iconv to decode. IT MAY NOT BE UTF-8.
The SET
and ENUM
values are presented by their index's value and bitmap respectively,
if you need get the string value back, you have to perform a 'DESC tablename' to get the
set or enum table.
BinLogTiny !Int8 | |
BinLogShort !Int16 | |
BinLogInt24 !Int24 | |
BinLogLong !Int32 | |
BinLogLongLong !Int64 | |
BinLogFloat !Float | |
BinLogDouble !Double | |
BinLogBit !Word64 | a 64bit bitmap. |
BinLogTimeStamp !Word32 | a utc timestamp, note 0 doesn't mean |
BinLogTimeStamp2 !Word32 !Word32 | like |
BinLogDateTime !Word16 !Word8 !Word8 !Word8 !Word8 !Word8 | YYYY MM DD hh mm ss |
BinLogDateTime2 !Word16 !Word8 !Word8 !Word8 !Word8 !Word8 !Word32 | YYYY MM DD hh mm ss microsecond |
BinLogDate !Word16 !Word8 !Word8 | YYYY MM DD |
BinLogTime !Word8 !Word16 !Word8 !Word8 | sign(1= non-negative, 0= negative) hh mm ss |
BinLogTime2 !Word8 !Word16 !Word8 !Word8 !Word32 | sign(1= non-negative, 0= negative) hh mm ss microsecond |
BinLogYear !Word16 | year value, 0 stand for '0000' |
BinLogNewDecimal !Scientific | sign(1= non-negative, 0= negative) integeral part, fractional part |
BinLogEnum !Word16 | enum indexing value |
BinLogSet !Word64 | set indexing 64bit bitmap. |
BinLogBytes !ByteString | all string and blob values. |
BinLogGeometry !ByteString | |
BinLogNull |
Instances
getBinLogField :: BinLogMeta -> Get BinLogValue Source #
BinLog protocol decoder
getBinLogRow :: [BinLogMeta] -> BitMap -> Get [BinLogValue] Source #
BinLog row decoder