use aurora_db::{Aurora, FieldType, Value};
use serde_json::json;
use std::time::Instant;
use tempfile::TempDir;
#[tokio::test]
async fn test_fluent_vs_aql_optimized() {
let temp_dir = TempDir::new().unwrap();
let db = Aurora::open(temp_dir.path().to_str().unwrap())
.await
.unwrap();
println!("\n=== OPTIMIZED PERFORMANCE: Fluent API vs AQL (Variable Caching) ===");
db.new_collection(
"perf",
vec![
(
"name",
aurora_db::types::FieldDefinition {
field_type: FieldType::SCALAR_STRING,
unique: false,
indexed: false,
nullable: true,
validations: vec![],
relation: None,
},
),
(
"val",
aurora_db::types::FieldDefinition {
field_type: FieldType::SCALAR_INT,
unique: false,
indexed: true,
nullable: true,
validations: vec![],
relation: None,
},
), ],
)
.await
.unwrap();
println!("\nIngestion (1,000 Inserts):");
let start = Instant::now();
for i in 0..1000 {
db.insert_into(
"perf",
vec![
("name", Value::String(format!("User {}", i))),
("val", Value::Int(i)),
],
)
.await
.unwrap();
}
let fluent_ingest_time = start.elapsed();
println!(" Fluent API: {:?}", fluent_ingest_time);
let aql_mutation = "mutation Create($n: String, $v: Int) { insertInto(collection: \"perf\", data: { name: $n, val: $v }) { id } }";
let start = Instant::now();
for i in 0..1000 {
let vars = json!({ "n": format!("User {}", i + 1000), "v": i + 1000 });
db.execute((aql_mutation, vars)).await.unwrap();
}
let aql_ingest_time = start.elapsed();
println!(" AQL (Cached): {:?}", aql_ingest_time);
println!("\nQuery (1,000 Index Lookups):");
let start = Instant::now();
for i in 0..1000 {
let target = (i % 1000) as i64;
let _ = db
.query("perf")
.filter(|f: &aurora_db::query::FilterBuilder| f.eq("val", target))
.collect()
.await
.unwrap();
}
let fluent_query_time = start.elapsed();
println!(" Fluent API: {:?}", fluent_query_time);
let aql_query = "query Find($v: Int) { perf(where: { val: { eq: $v } }) { name } }";
let start = Instant::now();
for i in 0..1000 {
let target = (i % 1000) as i64;
let vars = json!({ "v": target });
let _ = db.execute((aql_query, vars)).await.unwrap();
}
let aql_query_time = start.elapsed();
println!(" AQL (Cached): {:?}", aql_query_time);
println!("\nSummary:");
println!(
" AQL overhead for Ingestion: {:.1}x (was 4.0x)",
aql_ingest_time.as_secs_f64() / fluent_ingest_time.as_secs_f64()
);
println!(
" AQL overhead for Query: {:.1}x (was 1.1x)",
aql_query_time.as_secs_f64() / fluent_query_time.as_secs_f64()
);
println!("==========================================================\n");
}