Table file structure (v0)
Notice that this version is not supported now. Use v1 documentation instead.
Table file version changelog
- Added table "write incomplete" flag.
TBL!file signature (4 bytes) could be
TBL?if an operation on a table is incompleted
- Table file version (2 bytes)
- The offset to the first page in a table. (8 bytes)
- The offset to the last page in a table. (8 bytes)
- The offset to the last available free page (8 bytes)
- Pages (64 KiB each)
- Page flags (1 byte)
- Next page offset (8 bytes) could be 0 if last page
- Row count (2 bytes)
- Row flags (1 byte)
- Row data
Table file version specification
In the further time, it's planned to rewrite the file structure, so it's useful to have a version marker.
|Major version||Minor version|
That means that the first byte defines major version, and the second one defines minor version.
If tables with different versions are binary-compatible with each other, their major version must be the same.
Page flags specification
- RSV -- reserved for further usage.
- DEL -- free page flag.
Row flags specification
See "Page flags specification" above.
A page can be called free iff all its rows are deleted. If there is a free page, there actions are being done:
DELpage flag ((6.1) |= FLAG_DEL)
- If a page is not the first one, replace next page offset in the previous page with a value in current page ((previous 6.2) = (6.2))
- Put last available free page as the next page ((6.2) = 5)
- Set current page offset as the offset to the last available free page ((5) = current_page_offset)
Since v0.2 a file signature could be
TBL?, which signals for incomplete table write operation.
If that signature is detected, the state of a table should be reverted to that it was before failed