2.3 KiB
2.3 KiB
Table file structure (v1)
Table file version changelog
v1.0
- Added previous page offset in page.
v1.x specification
TBL!
file signature (4 bytes) could beTBL?
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
- Previous page offset (8 bytes) could be 0 if first page
- Row count (2 bytes)
- Rows
- 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.
15-8 | 7-0 |
---|---|
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
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|
RSV | RSV | RSV | RSV | RSV | RSV | RSV | DEL |
- RSV -- reserved for further usage.
- DEL -- free page flag.
Row flags specification
See "Page flags specification" above.
Free pages
A page can be called free iff all its rows are deleted. If there is a free page, there actions are being done:
- Set
DEL
page 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))
- If a page is not the last one, replace previous page offset in the next page with a value in current page ((previous 6.3) = (6.3))
- 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)
File signature
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
transaction.