1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
//! Magic numbers and constants for KiteDB
//!
//! Ported from src/constants.ts
use crateNodeId;
// ============================================================================
// Magic bytes (little-endian u32)
// ============================================================================
/// Snapshot magic: "GDS1"
pub const MAGIC_SNAPSHOT: u32 = 0x31534447;
// ============================================================================
// Current versions
// ============================================================================
pub const VERSION_SNAPSHOT: u32 = 4;
// ============================================================================
// Minimum reader versions
// ============================================================================
pub const MIN_READER_SNAPSHOT: u32 = 4;
// ============================================================================
// Alignment requirements
// ============================================================================
/// 64-byte alignment for mmap friendliness
pub const SECTION_ALIGNMENT: usize = 64;
/// 8-byte alignment for WAL records
pub const WAL_RECORD_ALIGNMENT: usize = 8;
// ============================================================================
// Single-file format constants
// ============================================================================
/// Magic bytes for single-file format: "KiteDB format 1\0" (16 bytes)
pub const MAGIC_KITEDB: = ;
/// Single-file format version
pub const VERSION_SINGLE_FILE: u32 = 1;
pub const MIN_READER_SINGLE_FILE: u32 = 1;
/// Single-file extension
pub const EXT_KITEDB: &str = ".kitedb";
/// Default page size (4KB - matches OS page size and SSD blocks)
pub const DEFAULT_PAGE_SIZE: usize = 4096;
/// Minimum page size (4KB)
pub const MIN_PAGE_SIZE: usize = 4096;
/// Maximum page size (64KB)
pub const MAX_PAGE_SIZE: usize = 65536;
/// OS page size for mmap alignment validation
pub const OS_PAGE_SIZE: usize = 4096;
/// Database header size (first page)
pub const DB_HEADER_SIZE: usize = 4096;
/// Database header reserved area size - reduced for V2 fields
pub const DB_HEADER_RESERVED_SIZE: usize = 14;
/// Default WAL buffer size (1MB - grows dynamically as needed)
pub const WAL_DEFAULT_SIZE: usize = 4 * 1024 * 1024;
/// Minimum WAL to snapshot ratio (10%)
pub const WAL_MIN_SNAPSHOT_RATIO: f64 = 0.1;
/// SQLite-style lock byte offset (2^30 = 1GB)
pub const LOCK_BYTE_OFFSET: u64 = 0x40000000;
/// Lock byte range size
pub const LOCK_BYTE_RANGE: usize = 512;
// ============================================================================
// Database header flags
// ============================================================================
pub const DB_FLAG_WAL_MODE: u32 = 1 << 0;
pub const DB_FLAG_COMPRESSION: u32 = 1 << 1;
pub const DB_FLAG_ENCRYPTED: u32 = 1 << 2;
// ============================================================================
// Thresholds for compact recommendation
// ============================================================================
/// 10% of snapshot edges
pub const COMPACT_EDGE_RATIO: f64 = 0.1;
/// 10% of snapshot nodes
pub const COMPACT_NODE_RATIO: f64 = 0.1;
/// 64MB
pub const COMPACT_WAL_SIZE: usize = 64 * 1024 * 1024;
// ============================================================================
// Delta set upgrade threshold
// ============================================================================
/// Upgrade from Vec to Set after this many elements
pub const DELTA_SET_UPGRADE_THRESHOLD: usize = 64;
// ============================================================================
// Compression settings
// ============================================================================
/// Default minimum section size for compression (bytes)
pub const COMPRESSION_MIN_SIZE: usize = 64;
// ============================================================================
// Initial IDs (start from 1, 0 is reserved/null)
// ============================================================================
pub const INITIAL_NODE_ID: NodeId = 1;
pub const INITIAL_LABEL_ID: u32 = 1;
pub const INITIAL_ETYPE_ID: u32 = 1;
pub const INITIAL_PROPKEY_ID: u32 = 1;
pub const INITIAL_TX_ID: u64 = 1;
// ============================================================================
// Snapshot generation starts at 1 (0 means no snapshot)
// ============================================================================
pub const INITIAL_SNAPSHOT_GEN: u64 = 0;