crepedb_redb/
lib.rs

1//! # CrepeDB Redb Backend
2//!
3//! This crate provides a [redb](https://github.com/cberner/redb) backend implementation for CrepeDB.
4//!
5//! Redb is a simple, portable, high-performance, ACID, embedded key-value database.
6//! This backend allows CrepeDB to use redb as its underlying storage engine.
7//!
8//! ## Features
9//!
10//! - **ACID Transactions**: Full transactional support via redb
11//! - **Embedded**: No separate server process required
12//! - **Persistent Storage**: Data is stored on disk
13//! - **In-Memory Mode**: Support for temporary in-memory databases
14//!
15//! ## Example
16//!
17//! ```ignore
18//! use crepedb::{CrepeDB, SnapshotId, TableType};
19//! use crepedb_redb::RedbDatabase;
20//!
21//! // Open a persistent database
22//! let backend = RedbDatabase::open_or_create("mydb.redb")?;
23//! let db = CrepeDB::new(backend);
24//!
25//! // Or create an in-memory database
26//! let backend = RedbDatabase::memory()?;
27//! let db = CrepeDB::new(backend);
28//! ```
29
30mod db;
31pub use db::*;
32
33mod read;
34pub use read::*;
35
36mod write;
37pub use write::*;
38
39mod table;
40pub use table::*;
41
42mod range;
43pub use range::*;
44
45pub(crate) mod types;
46
47#[cfg(test)]
48mod tests {
49    use crate::RedbDatabase;
50
51    #[test]
52    fn test_db_10() {
53        let _ = env_logger::builder().is_test(true).try_init();
54
55        let backend = RedbDatabase::memory().unwrap();
56
57        crepedb_core::tests::test_db_10(backend).unwrap();
58    }
59
60    #[test]
61    fn test_read() {
62        let _ = env_logger::builder().is_test(true).try_init();
63
64        let backend = RedbDatabase::memory().unwrap();
65
66        crepedb_core::read_tests::test_read(backend).unwrap();
67    }
68
69    #[test]
70    fn test_snapshot_isolation() {
71        let _ = env_logger::builder().is_test(true).try_init();
72
73        let backend = RedbDatabase::memory().unwrap();
74
75        crepedb_core::read_tests::test_snapshot_isolation(backend).unwrap();
76    }
77
78    #[test]
79    fn test_multiple_keys() {
80        let _ = env_logger::builder().is_test(true).try_init();
81
82        let backend = RedbDatabase::memory().unwrap();
83
84        crepedb_core::read_tests::test_multiple_keys(backend).unwrap();
85    }
86
87    #[test]
88    fn test_error_handling() {
89        let _ = env_logger::builder().is_test(true).try_init();
90
91        let backend = RedbDatabase::memory().unwrap();
92
93        crepedb_core::read_tests::test_error_handling(backend).unwrap();
94    }
95
96    #[test]
97    fn test_multiple_tables() {
98        let _ = env_logger::builder().is_test(true).try_init();
99
100        let backend = RedbDatabase::memory().unwrap();
101
102        crepedb_core::read_tests::test_multiple_tables(backend).unwrap();
103    }
104
105    #[test]
106    fn test_basic_table_type() {
107        let _ = env_logger::builder().is_test(true).try_init();
108
109        let backend = RedbDatabase::memory().unwrap();
110
111        crepedb_core::read_tests::test_basic_table_type(backend).unwrap();
112    }
113
114    #[test]
115    fn test_edge_cases() {
116        let _ = env_logger::builder().is_test(true).try_init();
117
118        let backend = RedbDatabase::memory().unwrap();
119
120        crepedb_core::read_tests::test_edge_cases(backend).unwrap();
121    }
122
123    #[test]
124    fn test_version_chain() {
125        let _ = env_logger::builder().is_test(true).try_init();
126
127        let backend = RedbDatabase::memory().unwrap();
128
129        crepedb_core::read_tests::test_version_chain(backend).unwrap();
130    }
131
132    #[test]
133    fn test_delete_operations() {
134        let _ = env_logger::builder().is_test(true).try_init();
135
136        let backend = RedbDatabase::memory().unwrap();
137
138        crepedb_core::read_tests::test_delete_operations(backend).unwrap();
139    }
140
141    #[test]
142    fn test_root_snapshot() {
143        let _ = env_logger::builder().is_test(true).try_init();
144
145        let backend = RedbDatabase::memory().unwrap();
146
147        crepedb_core::read_tests::test_root_snapshot(backend).unwrap();
148    }
149
150    #[test]
151    fn test_transaction_lifecycle() {
152        let _ = env_logger::builder().is_test(true).try_init();
153
154        let backend = RedbDatabase::memory().unwrap();
155
156        crepedb_core::read_tests::test_transaction_lifecycle(backend).unwrap();
157    }
158
159    #[test]
160    fn test_mixed_operations() {
161        let _ = env_logger::builder().is_test(true).try_init();
162
163        let backend = RedbDatabase::memory().unwrap();
164
165        crepedb_core::read_tests::test_mixed_operations(backend).unwrap();
166    }
167
168    #[test]
169    fn test_parent_child_visibility() {
170        let _ = env_logger::builder().is_test(true).try_init();
171
172        let backend = RedbDatabase::memory().unwrap();
173
174        crepedb_core::read_tests::test_parent_child_visibility(backend).unwrap();
175    }
176
177    #[test]
178    fn test_complex_branching() {
179        let _ = env_logger::builder().is_test(true).try_init();
180
181        let backend = RedbDatabase::memory().unwrap();
182
183        crepedb_core::read_tests::test_complex_branching(backend).unwrap();
184    }
185}