This description uses the same conventions as the protocol description.
The dump file format is not final and is subject to change before EdgeDB 1.0.
Dump file is structure as follows:
Dump file format marker \xFF\xD8\x00\x00\xD8EDGEDB\x00DUMP\x00
(17 bytes)
Format version number \x00\x00\x00\x00\x00\x00\x00\x01
(8 bytes)
Header block
Any number of data blocks
Both header and data blocks are formatted as follows:
struct DumpHeader {
int8 mtype;
// SHA1 hash sum of block data
byte sha1sum[20];
// Length of message contents in bytes,
// including self.
int32 message_length;
// Block data. Should be treated in opaque way by a client.
byte data[message_length];
}
Upon receiving a protocol dump data message, the dump client should:
@
(0x40) → H
(0x48)
=
(0x3d) → D
(0x44)
Prepend SHA1 checksum to the block
Append the entire dump protocol message disregarding the first byte (the message type).
Format:
struct DumpHeader {
// Message type ('H')
int8 mtype = 0x48;
// SHA1 hash sum of block data
byte sha1sum[20];
// Length of message contents in bytes,
// including self.
int32 message_length;
// A set of message headers.
Headers headers;
// Protocol version of the dump
int16 major_ver;
int16 minor_ver;
// Schema data
string schema_ddl;
// Type identifiers
int32 num_types;
TypeInfo types[num_types];
// Object descriptors
int32 num_descriptors;
ObjectDesc descriptors[num_descriptors]
};
struct TypeInfo {
string type_name;
string type_class;
byte type_id[16];
}
struct ObjectDesc {
byte object_id[16];
bytes description;
int16 num_dependencies;
byte dependency_id[num_dependencies][16];
}
Known headers:
101 BLOCK_TYPE
– block type, always “I”
SERVER_TIME
– server time when dump is started as a floating pointunix timestamp stringified
103 SERVER_VERSION
– full version of server as string
Format:
struct DumpBlock {
// Message type ('=')
int8 mtype = 0x3d;
// Length of message contents in bytes,
// including self.
int32 message_length;
// A set of message headers.
Headers headers;
}
Known headers:
101 BLOCK_TYPE
– block type, always “D”
110 BLOCK_ID
– block identifier (16 bytes of UUID)
111 BLOCK_NUM
– integer block index stringified
112 BLOCK_DATA
– the actual block data