Skip to main content

aurora_db/
lib.rs

1//! # Aurora Database
2//!
3//! Aurora is a high-performance, embedded document database designed for speed, 
4//! durability, and developer ergonomics. It features a tiered storage architecture 
5//! combining a blazing-fast in-memory cache with reliable, persistent cold storage.
6//!
7//! ## Core Architecture
8//! - **Tiered Storage**: Automatically manages data between a "hot" cache (DashMap/Moka) 
9//!   and "cold" storage (Sled/MMAP) for optimal performance.
10//! - **AQL (Aurora Query Language)**: A GraphQL-inspired query language for powerful 
11//!   data retrieval, manipulation, and real-time subscriptions.
12//! - **Roaring Bitmaps**: Uses Roaring Bitmaps for high-performance secondary indexing 
13//!   and bitwise query optimization.
14//! - **Write-Ahead Logging (WAL)**: Ensures crash-consistency and data durability.
15//!
16//! ## Quick Start
17//!
18//! ```rust
19//! use aurora_db::{Aurora, doc, object, FieldType};
20//!
21//! #[tokio::main]
22//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
23//!     // Open or create a database
24//!     let db = Aurora::open("my_database.db").await?;
25//!
26//!     // Define a collection with schema
27//!     db.new_collection("users", vec![
28//!         ("name", FieldType::SCALAR_STRING, false),
29//!         ("email", FieldType::SCALAR_STRING, true), // Unique constraint
30//!         ("age", FieldType::SCALAR_INT, false),
31//!     ]).await?;
32//!
33//!     // Insert a document using the object! macro
34//!     let user_id = db.insert_map("users", object!({
35//!         "name": "Jane Doe",
36//!         "email": "jane@example.com",
37//!         "age": 28
38//!     }).as_object().unwrap().clone()).await?;
39//!
40//!     // Run a parametrized AQL query using the doc! macro
41//!     let result = db.execute(doc!(
42//!         "query($minAge: Int) {
43//!             users(where: { age: { gte: $minAge } }) {
44//!                 name
45//!                 email
46//!             }
47//!         }",
48//!         { "minAge": 21 }
49//!     )).await?;
50//!
51//!     // Bind the results back to a Rust struct
52//!     #[derive(serde::Deserialize, Debug)]
53//!     struct User { name: String, email: String }
54//!     let users: Vec<User> = result.bind()?;
55//!
56//!     Ok(())
57//! }
58//! ```
59
60// Re-export primary types and modules
61pub use crate::db::Aurora;
62pub use crate::error::{AqlError, ErrorCode, Result};
63pub use crate::query::{QueryBuilder, SearchBuilder, SimpleQueryBuilder};
64pub use types::{
65    AuroraConfig, ColdStoreMode, Collection, Document, DurabilityMode, FieldDefinition, FieldType,
66    Value,
67};
68
69pub use crate::parser::validator::{
70    InMemorySchema, SchemaProvider, ValidationError, ValidationResult, validate_document,
71};
72
73// Re-export AQL execution types for convenience
74pub use crate::parser::executor::{
75    ExecutionResult, MigrationResult, MutationResult, QueryResult, SchemaResult, SubscriptionResult,
76};
77
78// Re-export commonly used storage types
79pub use storage::{EvictionPolicy, HotStore};
80
81// Re-export PubSub types for convenience
82pub use pubsub::{ChangeEvent, ChangeListener, ChangeType};
83
84// Re-export Workers types for convenience
85pub use workers::{Job, JobPriority, JobStatus};
86
87// Re-export Transaction types for convenience
88pub use transaction::{TransactionBuffer, TransactionId};
89
90// Module declarations
91pub mod audit;
92pub mod client;
93pub mod computed;
94pub mod db;
95pub mod error;
96pub mod index;
97#[macro_use]
98pub mod macros;
99pub mod network;
100pub mod parser; // AQL parser module
101pub mod pubsub;
102pub mod query;
103pub mod reactive;
104pub mod search;
105pub mod storage;
106pub mod transaction;
107pub mod types;
108pub mod wal;
109pub mod workers;