#[cfg(test)]
#[cfg(feature = "state_machine")]
mod tests {
use crate::{
query::{parse_select, SelectExecutor, SelectOptimizer, SelectStatement},
schema::SchemaManager,
storage::StorageEngine,
types::TableId,
Config,
};
use std::sync::Arc;
use tempfile::TempDir;
#[tokio::test]
async fn test_parser_only() {
let sql = "SELECT COUNT(*) FROM orders WHERE active = true";
let statement = parse_select(sql).unwrap();
assert!(statement.requires_aggregation());
assert!(statement.group_by.is_none()); assert!(statement.having_clause.is_none()); assert!(statement.order_by.is_none()); assert!(statement.limit.is_none()); }
#[tokio::test]
async fn test_optimizer_and_executor_integration() {
let temp_dir = TempDir::new().unwrap();
let config = Config::default();
let platform = Arc::new(crate::platform::Platform::new(&config).await.unwrap());
let storage = Arc::new(
StorageEngine::open(
temp_dir.path(),
&config,
platform,
#[cfg(feature = "state_machine")]
None,
)
.await
.unwrap(),
);
let schema = Arc::new(SchemaManager::new(temp_dir.path()).await.unwrap());
let optimizer = SelectOptimizer::new(schema.clone(), storage.clone());
let _executor = SelectExecutor::new(schema.clone(), storage.clone());
let statement = SelectStatement::select_all_from(TableId::new("users"));
let optimized_plan = optimizer.optimize(statement).await.unwrap();
assert!(!optimized_plan.execution_steps.is_empty());
}
}