|
| 1 | +# mdbx Crate Notes |
| 2 | + |
| 3 | +## Crate Overview |
| 4 | + |
| 5 | +Rust bindings for libmdbx (MDBX database). Crate name: `signet-libmdbx`. |
| 6 | + |
| 7 | +## Key Types |
| 8 | + |
| 9 | +- `Environment` - Database environment (in `src/sys/environment.rs`) |
| 10 | +- `Transaction<K>` - Transaction with kind marker RO/RW (in `src/tx/transaction.rs`) |
| 11 | +- `Database` - Handle to a database, stores `dbi` + `DatabaseFlags` (in `src/tx/database.rs`) |
| 12 | +- `Cursor<'tx, K>` - Database cursor, stores `&Transaction`, raw cursor ptr, and `Database` (in `src/tx/cursor.rs`) |
| 13 | + |
| 14 | +## API Patterns |
| 15 | + |
| 16 | +### Cursor Creation |
| 17 | + |
| 18 | +```rust |
| 19 | +let db = txn.open_db(None).unwrap(); // Returns Database (has dbi + flags) |
| 20 | +let cursor = txn.cursor(db).unwrap(); // Takes Database, NOT raw dbi |
| 21 | +``` |
| 22 | + |
| 23 | +### Database Flags Validation |
| 24 | + |
| 25 | +DUP_SORT/DUP_FIXED methods validate flags at runtime: |
| 26 | + |
| 27 | +- `require_dup_sort()` returns `MdbxError::RequiresDupSort` |
| 28 | +- `require_dup_fixed()` returns `MdbxError::RequiresDupFixed` |
| 29 | +- `debug_assert_integer_key()` validates key length (4 or 8 bytes) in debug builds |
| 30 | + |
| 31 | +Methods requiring DUP_SORT: `first_dup`, `last_dup`, `next_dup`, `prev_dup`, `get_both`, `get_both_range` |
| 32 | +Methods requiring DUP_FIXED: `get_multiple`, `next_multiple`, `prev_multiple` |
| 33 | + |
| 34 | +### Error Types |
| 35 | + |
| 36 | +- `MdbxError` - FFI/database errors (in `src/error.rs`) |
| 37 | +- `ReadError` - Wraps MdbxError + decoding errors for read operations |
| 38 | +- `MdbxResult<T>` = `Result<T, MdbxError>` |
| 39 | +- `ReadResult<T>` = `Result<T, ReadError>` |
| 40 | + |
| 41 | +## File Layout |
| 42 | + |
| 43 | +``` |
| 44 | +src/ |
| 45 | + lib.rs - Re-exports |
| 46 | + error.rs - MdbxError, ReadError |
| 47 | + flags.rs - DatabaseFlags, WriteFlags, etc. |
| 48 | + codec.rs - TableObject trait |
| 49 | + tx/ |
| 50 | + mod.rs |
| 51 | + cursor.rs - Cursor impl |
| 52 | + database.rs - Database struct |
| 53 | + transaction.rs - Transaction impl |
| 54 | + iter.rs - Iterator types |
| 55 | + sys/ |
| 56 | + environment.rs - Environment impl |
| 57 | +tests/ |
| 58 | + cursor.rs - Cursor tests |
| 59 | + transaction.rs - Transaction tests |
| 60 | + environment.rs - Environment tests |
| 61 | +benches/ |
| 62 | + cursor.rs - Cursor benchmarks |
| 63 | +``` |
| 64 | + |
| 65 | +## Testing |
| 66 | + |
| 67 | +```bash |
| 68 | +cargo t # Run all tests |
| 69 | +cargo t --test cursor # Run cursor tests only |
| 70 | +cargo clippy --all-features --all-targets |
| 71 | +cargo clippy --no-default-features --all-targets |
| 72 | +cargo +nightly fmt |
| 73 | +``` |
0 commit comments