Add table file v1 doc
parent
9aa270106f
commit
ab4ea22cc1
|
@ -151,7 +151,7 @@ YDB_Error ydb_delete_current_page(YDB_Engine* instance);
|
|||
*
|
||||
* - types.h
|
||||
*
|
||||
* And in some cases even [table file structure](table_file.md)
|
||||
* And in some cases even [table file structure](table_file_v0.md)
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Table file structure
|
||||
# Table file structure (v0)
|
||||
|
||||
## Table file version changelog
|
||||
|
||||
|
@ -8,7 +8,7 @@
|
|||
### v0.1
|
||||
Initial version.
|
||||
|
||||
## Overall specification
|
||||
## v0.x specification
|
||||
|
||||
1. `TBL!` file signature (4 bytes) **could be `TBL?` if an operation on a table is incompleted**
|
||||
2. Table file version (2 bytes)
|
||||
|
@ -27,7 +27,7 @@ Initial version.
|
|||
|
||||
In the further time, it's planned to rewrite the file structure, so it's useful to have a version marker.
|
||||
|
||||
| 7-4 | 3-0 |
|
||||
| 15-8 | 7-0 |
|
||||
|---------------|---------------|
|
||||
| Major version | Minor version |
|
||||
|
||||
|
@ -53,10 +53,10 @@ 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:
|
||||
|
||||
1. Set `DEL` page flag ((6.3) |= FLAG_DEL)
|
||||
2. If a page is **not** the last one, replace next page offset in the previous page with a value in current page
|
||||
((previous 6.1) = (6.1))
|
||||
3. Put last available free page as the next page ((6.1) = 5)
|
||||
1. Set `DEL` page flag ((6.1) |= FLAG_DEL)
|
||||
2. 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))
|
||||
3. Put last available free page as the next page ((6.2) = 5)
|
||||
4. Set current page offset as the offset to the last available free page ((5) = current_page_offset)
|
||||
|
||||
## File signature
|
|
@ -0,0 +1,66 @@
|
|||
# Table file structure (v1)
|
||||
|
||||
## Table file version changelog
|
||||
|
||||
### v1.0
|
||||
+ Added previous page offset in page.
|
||||
|
||||
## v1.x specification
|
||||
|
||||
1. `TBL!` file signature (4 bytes) **could be `TBL?` if an operation on a table is incompleted**
|
||||
2. Table file version (2 bytes)
|
||||
3. The offset to the first page in a table. (8 bytes)
|
||||
4. The offset to the last page in a table. (8 bytes)
|
||||
5. The offset to the last available *free* page (8 bytes)
|
||||
6. Pages (64 KiB each)
|
||||
1. Page flags (1 byte)
|
||||
2. Next page offset (8 bytes) **could be 0 if last page**
|
||||
3. Previous page offset (8 bytes) **could be 0 if first page**
|
||||
4. Row count (2 bytes)
|
||||
5. Rows
|
||||
1. Row flags (1 byte)
|
||||
2. 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:
|
||||
|
||||
1. Set `DEL` page flag ((6.1) |= FLAG_DEL)
|
||||
2. 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))
|
||||
3. 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))
|
||||
4. Put last available free page as the next page ((6.2) = 5)
|
||||
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.
|
Loading…
Reference in New Issue