Skip to main content

dbx_core/engine/
database.rs

1//! Database struct definition — the core data structure
2
3use crate::engine::types::BackgroundJob;
4use crate::engine::{DeltaVariant, DurabilityLevel, WosVariant};
5use crate::sql::optimizer::QueryOptimizer;
6use crate::sql::parser::SqlParser;
7use crate::storage::encryption::EncryptionConfig;
8use crate::transaction::mvcc::manager::TransactionManager;
9use arrow::array::RecordBatch;
10use arrow::datatypes::Schema;
11use dashmap::DashMap;
12use std::collections::HashMap;
13use std::sync::{Arc, RwLock};
14
15/// DBX 데이터베이스 엔진
16///
17/// 5-Tier Hybrid Storage 아키텍처를 관리하는 메인 API입니다.
18///
19/// # 데이터 흐름
20///
21/// - **INSERT**: Delta Store (Tier 1)에 먼저 쓰기
22/// - **GET**: Delta → WOS 순서로 조회 (첫 번째 hit에서 short-circuit)
23/// - **DELETE**: 모든 계층에서 삭제
24/// - **flush()**: Delta Store 데이터를 WOS로 이동
25///
26/// # 예제
27///
28/// ```rust
29/// use dbx_core::Database;
30///
31/// # fn main() -> dbx_core::DbxResult<()> {
32/// let db = Database::open_in_memory()?;
33/// db.insert("users", b"user:1", b"Alice")?;
34/// let value = db.get("users", b"user:1")?;
35/// assert_eq!(value, Some(b"Alice".to_vec()));
36/// # Ok(())
37/// # }
38/// ```
39pub struct Database {
40    /// Tier 1: Delta Store (in-memory write buffer) — row-based or columnar
41    pub(crate) delta: DeltaVariant,
42
43    /// Tier 3: WOS (Write-Optimized Store) — persistent storage (plain or encrypted)
44    pub(crate) wos: WosVariant,
45
46    /// Schema registry: table_name → Arrow Schema
47    #[allow(dead_code)]
48    pub(crate) schemas: Arc<RwLock<HashMap<String, Arc<Schema>>>>,
49
50    /// SQL table registry: table_name → `Vec<RecordBatch>`
51    pub(crate) tables: RwLock<HashMap<String, Vec<RecordBatch>>>,
52
53    /// SQL table schemas: table_name → Schema
54    pub(crate) table_schemas: Arc<RwLock<HashMap<String, Arc<Schema>>>>,
55
56    /// Hash Index: fast O(1) key lookups
57    pub(crate) index: Arc<crate::index::HashIndex>,
58
59    /// Row ID counters: table_name → next_row_id
60    pub(crate) row_counters: Arc<DashMap<String, std::sync::atomic::AtomicUsize>>,
61
62    /// SQL parser (cached)
63    pub(crate) sql_parser: SqlParser,
64    /// SQL optimizer (cached)
65    pub(crate) sql_optimizer: QueryOptimizer,
66
67    /// Write-Ahead Log for crash recovery (optional, plain or encrypted)
68    pub(crate) wal: Option<Arc<crate::wal::WriteAheadLog>>,
69
70    /// Encrypted WAL (optional, used when encryption is enabled)
71    pub(crate) encrypted_wal: Option<Arc<crate::wal::encrypted_wal::EncryptedWal>>,
72
73    /// Encryption config (None = no encryption)
74    pub(crate) encryption: RwLock<Option<EncryptionConfig>>,
75
76    /// MVCC Transaction Manager
77    pub(crate) tx_manager: Arc<TransactionManager>,
78
79    /// Columnar Cache for OLAP queries (Tier 2)
80    pub(crate) columnar_cache: Arc<crate::storage::columnar_cache::ColumnarCache>,
81
82    /// GPU Manager for optional acceleration (Phase 6.4)
83    pub(crate) gpu_manager: Option<Arc<crate::storage::gpu::GpuManager>>,
84
85    /// Background job sender
86    pub(crate) job_sender: Option<std::sync::mpsc::Sender<BackgroundJob>>,
87
88    /// WAL 내구성 정책
89    pub durability: DurabilityLevel,
90
91    /// Index registry: index_name → (table, column) mapping for DROP INDEX
92    pub(crate) index_registry: RwLock<HashMap<String, (String, String)>>,
93
94    /// Automation & Extensibility Engine (UDF, Triggers, Scheduler)
95    pub(crate) automation_engine: Arc<crate::automation::ExecutionEngine>,
96
97    /// Trigger Registry (이벤트 매칭용)
98    pub(crate) trigger_registry: crate::engine::automation_api::TriggerRegistry,
99
100    /// SQL Trigger Executor
101    pub(crate) trigger_executor: Arc<RwLock<crate::automation::TriggerExecutor>>,
102
103    /// Stored Procedure Executor
104    pub(crate) procedure_executor: Arc<RwLock<crate::automation::ProcedureExecutor>>,
105
106    /// SQL Schedule Executor
107    pub(crate) schedule_executor: Arc<RwLock<crate::automation::ScheduleExecutor>>,
108
109    /// Parallel Execution Engine for multi-threaded query execution
110    #[allow(dead_code)]
111    pub(crate) parallel_engine: Arc<crate::engine::parallel_engine::ParallelExecutionEngine>,
112}