// Copyright 2026 ppyq882
// Licensed under the Apache License, Version 2.0
///|
/// Interactive scenario demonstrating Differentially Private Tabular SQL Engine.
pub fn run_sql_demo() -> Unit {
println("==================================================")
println(" 2. Private Tabular Query Engine Scenario ")
println("==================================================")
let bound = match @core.DomainBound::new(0.0, 150000.0) {
Ok(b) => b
Err(_) => return ()
}
let salaries = [50000.0, 65000.0, 80000.0, 120000.0, 95000.0, 72000.0]
let col = @query.Column::new("salary", salaries, bound)
let tbl = @query.Table::new("employee_salaries")
let _ = tbl.add_column(col)
let init_b = match @core.PrivacyBudget::make(5.0, 0.0001) {
Ok(b) => b
Err(_) => return ()
}
let acc = @ledger.PrivacyAccount::new(
"analyst_01", "Finance Analyst", init_b, 50,
)
let p_guard = @query.PrivacyGuard::new(acc, 9999UL)
let req_b = match @core.PrivacyBudget::make(0.5, 0.00001) {
Ok(b) => b
Err(_) => return ()
}
let res_avg = match
p_guard.execute_query(
"q_avg_salary",
tbl,
@query.QueryType::select_avg("salary"),
req_b,
) {
Ok(v) => v
Err(_) => []
}
if res_avg.length() > 0 {
println("DP Salary Average Result: " + @core.format_decimal(res_avg[0], 2))
}
println("Remaining Budget: " + p_guard.remaining_budget().to_string())
println("")
}