Basic datatype packers/unpackers little endianMySQL packet packers/unpackers
Types
SessionStateType {...}{.pure.} = enum systemVariables = 0, schema = 1, stateChange = 2, gtids = 3, transactionCharacteristics = 4, transactionState = 5
SessionState = object name*: string typ*: SessionStateType value*: string
Command {...}{.pure.} = enum quit = 1, initDb = 2, query = 3, fieldList = 4, createDb = 5, dropDb = 6, refresh = 7, shutdown = 8, statistics = 9, processInfo = 10, processKill = 12, debug = 13, ping = 14, changeUser = 17, statementPrepare = 22, statementExecute = 23, statementSendLongData = 24, statementClose = 25, statementReset = 26, setOption = 27, statementFetch = 28, resetConnection = 31 ## https://dev.mysql.com/doc/dev/mysql-server/latest/group__group__cs__column__definition__flags.html
FieldFlag {...}{.pure.} = enum notNull = 0, primaryKey = 1, uniqueKey = 2, multipleKey = 3, blob = 4, unsigned = 5, zeroFill = 6, binary = 7, enumeration = 8, autoIncrement = 9, timeStamp = 10, isSet = 11, noDefaultValue = 12, onUpdateNow = 13, isNum = 15
FieldType = enum fieldTypeDecimal = 0, fieldTypeTiny = 1, fieldTypeShort = 2, fieldTypeLong = 3, fieldTypeFloat = 4, fieldTypeDouble = 5, fieldTypeNull = 6, fieldTypeTimestamp = 7, fieldTypeLongLong = 8, fieldTypeInt24 = 9, fieldTypeDate = 10, fieldTypeTime = 11, fieldTypeDateTime = 12, fieldTypeYear = 13, fieldTypeVarchar = 15, fieldTypeBit = 16, fieldTypeJson = 245, fieldTypeNewDecimal = 246, fieldTypeEnum = 247, fieldTypeSet = 248, fieldTypeTinyBlob = 249, fieldTypeMediumBlob = 250, fieldTypeLongBlob = 251, fieldTypeBlob = 252, fieldTypeVarString = 253, fieldTypeString = 254, fieldTypeGeometry = 255
CursorType {...}{.pure.} = enum noCursor = 0, readOnly = 1, forUpdate = 2, scrollable = 3
ResponseOK {...}{.final.} = object eof: bool affectedRows*: Natural lastInsertId*: Natural statusFlags*: set[Status] warningCount*: Natural info*: string sessionStateChanges*: seq[SessionState]
ResponseAuthSwitch {...}{.final.} = object status: uint8 pluginName*: string pluginData*: string
ResponseAuthMore {...}{.final.} = object status: uint8 pluginData*: string
ResponseERR = object of CatchableError error_code: uint16 sqlstate: string
HandshakePacket = ref HandshakePacketObj
ColumnDefinition {...}{.final.} = object catalog*: string schema*: string table*: string origTable*: string name*: string origName*: string charset*: int16 length*: uint32 columnType*: FieldType flags*: set[FieldFlag] decimals*: int
ResultSet[T] {...}{.final.} = object status*: ResponseOK columns*: seq[ColumnDefinition] rows*: seq[seq[T]]
Consts
ResponseCode_OK: uint8 = 0
ResponseCode_EOF: uint8 = 254
ResponseCode_ERR: uint8 = 255
ResponseCode_LOCAL_INFILE: uint8 = 251
ResponseCode_AuthSwitchRequest: uint8 = 254
ResponseCode_ExtraAuthData: uint8 = 1
NullColumn = 0x000000FB
Charset_utf8_ci: uint8 = 0x00000021
Procs
proc isEOF(stats: ResponseOK): bool {...}{.raises: [], tags: [].}
proc setInt32(buf: var openArray[char]; pos: int; value: int) {...}{.inline, raises: [], tags: [].}
proc putU8(buf: var string; val: range[0 .. 255]) {...}{.inline, raises: [], tags: [].}
proc scanU16(buf: openArray[char]; pos: int): uint16 {...}{.raises: [], tags: [].}
proc putU16(buf: var string; val: uint16) {...}{.raises: [], tags: [].}
proc scanU32(buf: openArray[char]; pos: int): uint32 {...}{.raises: [], tags: [].}
proc putU32(buf: var string; val: uint32) {...}{.raises: [], tags: [].}
proc putFloat(buf: var string; val: float32) {...}{.raises: [], tags: [].}
proc putDouble(buf: var string; val: float64) {...}{.raises: [], tags: [].}
proc scanFloat(buf: openArray[char]; pos: int): float32 {...}{.raises: [], tags: [].}
proc scanDouble(buf: openArray[char]; pos: int): float64 {...}{.raises: [], tags: [].}
proc scanU64(buf: openArray[char]; pos: int): uint64 {...}{.raises: [], tags: [].}
proc putS64(buf: var string; val: int64) {...}{.raises: [], tags: [].}
proc putU64(buf: var string; val: uint64) {...}{.raises: [], tags: [].}
proc readLenInt(buf: openArray[char]; pos: var int): int {...}{.raises: [], tags: [].}
proc putLenInt(buf: var string; val: int | uint | int32 | uint32): int {...}{. discardable.}
proc countLenInt(val: int | uint | int32 | uint32): int
proc readNulString(buf: openArray[char]; pos: var int): string {...}{.raises: [], tags: [].}
proc readNulStringX(buf: openArray[char]; pos: var int): string {...}{.raises: [], tags: [].}
proc putNulString(buf: var string; val: string) {...}{.raises: [], tags: [].}
proc readLenStr(buf: openArray[char]; pos: var int): string {...}{. raises: [ProtocolError], tags: [].}
proc putLenStr(buf: var string; val: string) {...}{.raises: [ProtocolError], tags: [].}
proc writeTypeAndFlag(buf: var string; intVal: int64) {...}{.inline, raises: [], tags: [].}
proc writeTypeAndFlag(buf: var string; intVal: uint64) {...}{.inline, raises: [], tags: [].}
proc putValue(buf: var string; intVal: int64) {...}{.raises: [], tags: [].}
proc putValue(buf: var string; intVal: uint64) {...}{.raises: [], tags: [].}
proc writeTypeAndFlag(buf: var string; fieldType: FieldType) {...}{.inline, raises: [], tags: [].}
proc isEOFPacket(conn: Connection): bool {...}{.raises: [], tags: [].}
proc isEOFPacketFollowed(conn: Connection): bool {...}{.raises: [], tags: [].}
proc isERRPacket(conn: Connection): bool {...}{.raises: [], tags: [].}
proc isOKPacket(conn: Connection): bool {...}{.raises: [], tags: [].}
proc isAuthSwitchRequestPacket(conn: Connection): bool {...}{.raises: [], tags: [].}
- http://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::AuthSwitchRequest
proc isExtraAuthDataPacket(conn: Connection): bool {...}{.raises: [], tags: [].}
- https://dev.mysql.com/doc/internals/en/successful-authentication.html
proc isLocalInfileRequestPacket(conn: Connection): bool {...}{.raises: [], tags: [].}
proc parseLocalInfileRequestPacket(conn: Connection): string {...}{.raises: [], tags: [].}
proc parseErrorPacket(conn: Connection): ref ResponseERR {...}{.raises: [], tags: [].}
proc checkEof(conn: Connection) {...}{.inline, raises: [ProtocolError], tags: [].}
proc parseAuthSwitchPacket(conn: Connection): ref ResponseAuthSwitch {...}{. raises: [], tags: [].}
proc parseResponseAuthMorePacket(conn: Connection; pkt: string): ref ResponseAuthMore {...}{. raises: [], tags: [].}
proc parseOKPacket(conn: Connection): ResponseOK {...}{.raises: [ProtocolError], tags: [].}
proc parseEOFPacket(conn: Connection): ResponseOK {...}{.raises: [], tags: [].}
proc putTime(buf: var string; val: Duration): int {...}{.discardable, raises: [], tags: [].}
proc readTime(buf: openArray[char]; pos: var int): Duration {...}{.raises: [], tags: [].}
proc putDate(buf: var string; val: DateTime): int {...}{.discardable, raises: [], tags: [].}
proc putDateTime(buf: var string; val: DateTime): int {...}{.discardable, raises: [], tags: [].}
proc readDateTime(buf: openArray[char]; pos: var int; zone: Timezone = utc()): DateTime {...}{. raises: [], tags: [].}
proc putTimestamp(buf: var string; val: DateTime): int {...}{.discardable, raises: [ValueError], tags: [].}
proc hexdump(buf: openArray[char]; fp: File) {...}{.raises: [IOError], tags: [WriteIOEffect].}
proc sendQuery(conn: Connection; query: string): Future[void] {...}{. tags: [WriteIOEffect, RootEffect], raises: [].}
proc sendFile(conn: Connection; filename: string): Future[void] {...}{. tags: [WriteIOEffect, RootEffect], raises: [IOError].}
proc sendEmptyPacket(conn: Connection): Future[void] {...}{. tags: [WriteIOEffect, RootEffect], raises: [].}
proc processMetadata(conn: Connection; meta: var seq[ColumnDefinition]; index: int) {...}{.raises: [ProtocolError], tags: [].}