use std::fs;
use tegdb::{Database, Result};
fn main() -> Result<()> {
println!("=== TegDB Query Planner Usage Demo ===\n");
let db_path = "planner_usage_demo.db";
let _ = fs::remove_file(db_path);
{
let mut db = Database::open(format!("file://{db_path}"))?;
println!("1. Creating test table and inserting data...");
db.execute(
"CREATE TABLE benchmark_test (id INTEGER PRIMARY KEY, value TEXT(32), score REAL)",
)?;
for i in 1..=10 {
db.execute(&format!(
"INSERT INTO benchmark_test (id, value, score) VALUES ({}, 'Item{}', {})",
i,
i,
i as f64 * 2.5
))?;
}
println!(" ✓ Created table with 10 rows");
println!("\n2. Executing queries through the planner pipeline...");
let start = std::time::Instant::now();
let result = db.query("SELECT * FROM benchmark_test WHERE id = 5")?;
let pk_time = start.elapsed();
println!(" Primary Key Query: SELECT * FROM benchmark_test WHERE id = 5");
println!(" → Found {} rows in {:?}", result.rows().len(), pk_time);
println!(" → Plan type: PrimaryKeyLookup (O(1) direct access)");
let start = std::time::Instant::now();
let result = db.query("SELECT value FROM benchmark_test WHERE score > 15.0")?;
let scan_time = start.elapsed();
println!("\n Table Scan Query: SELECT value FROM benchmark_test WHERE score > 15.0");
println!(" → Found {} rows in {:?}", result.rows().len(), scan_time);
println!(" → Plan type: TableScan with predicate pushdown");
let start = std::time::Instant::now();
let result = db.query("SELECT * FROM benchmark_test LIMIT 3")?;
let limit_time = start.elapsed();
println!("\n Limited Query: SELECT * FROM benchmark_test LIMIT 3");
println!(
" → Found {} rows in {:?}",
result.rows().len(),
limit_time
);
println!(" → Plan type: TableScan with early termination");
println!("\n3. Executing modification operations through planner...");
let start = std::time::Instant::now();
let affected = db.execute("UPDATE benchmark_test SET score = 100.0 WHERE id = 1")?;
let update_time = start.elapsed();
println!(" Update: UPDATE benchmark_test SET score = 100.0 WHERE id = 1");
println!(" → Updated {affected} rows in {update_time:?}");
println!(" → Plan type: PrimaryKeyLookup + Update");
let start = std::time::Instant::now();
let affected = db.execute("DELETE FROM benchmark_test WHERE score < 10.0")?;
let delete_time = start.elapsed();
println!("\n Delete: DELETE FROM benchmark_test WHERE score < 10.0");
println!(" → Deleted {affected} rows in {delete_time:?}");
println!(" → Plan type: TableScan + Bulk Delete");
let result = db.query("SELECT * FROM benchmark_test")?;
println!("\n Remaining rows: {}", result.rows().len());
println!("\n=== Query Planner Integration Confirmed ===");
println!("✓ All operations executed through the planner pipeline");
println!("✓ Optimized execution plans selected automatically");
println!("✓ Performance benefits from plan-based optimization");
println!("\n[PLANNER ENABLED] - Using QueryPlanner + PlanQueryProcessor pipeline");
}
let _ = fs::remove_file(db_path);
Ok(())
}