use oxibase::{Database, Result};
fn main() -> Result<()> {
let db = Database::open("memory://")?;
db.execute(
"CREATE FUNCTION hello() RETURNS TEXT LANGUAGE RHAI AS 'return \"Hello, World!\";'",
(),
)?;
let result: String = db.query_one("SELECT hello()", ())?;
println!("Result: {}", result);
db.execute(
r#"CREATE FUNCTION add_nums(a INTEGER, b INTEGER) RETURNS INTEGER LANGUAGE RHAI AS 'a + b'"#,
(),
)?;
let sum: i64 = db.query_one("SELECT add_nums(5, 3)", ())?;
println!("5 + 3 = {}", sum);
db.execute(
r#"CREATE FUNCTION greet(name TEXT) RETURNS TEXT LANGUAGE RHAI AS '"Hello, " + name + "!";'"#,
(),
)?;
let greeting: String = db.query_one("SELECT greet('Rust')", ())?;
println!("Greeting: {}", greeting);
db.execute(
r#"CREATE FUNCTION discount(price FLOAT, rate FLOAT) RETURNS FLOAT LANGUAGE RHAI AS '
if rate > 0.5 {
return price * 0.5; // Cap discount at 50%
} else {
return price * (1.0 - rate);
}
'"#,
(),
)?;
let discounted: f64 = db.query_one("SELECT discount(100.0, 0.2)", ())?;
println!("Discounted price: ${:.2}", discounted);
#[cfg(feature = "js")]
{
println!("\n--- Deno/JavaScript Examples ---");
db.execute(
r#"CREATE FUNCTION js_add(a INTEGER, b INTEGER) RETURNS INTEGER LANGUAGE DENO AS 'return a + b;'"#,
(),
)?;
let js_sum: i64 = db.query_one("SELECT js_add(10, 15)", ())?;
println!("JS Add: 10 + 15 = {}", js_sum);
db.execute(
r#"CREATE FUNCTION js_format(name TEXT, age INTEGER) RETURNS TEXT LANGUAGE DENO AS 'return `${name} is ${age} years old`;' "#,
(),
)?;
let js_formatted: String = db.query_one("SELECT js_format('Alice', 30)", ())?;
println!("JS Format: {}", js_formatted);
}
#[cfg(feature = "python")]
{
println!("\n--- Python Examples ---");
db.execute(
r#"CREATE FUNCTION py_multiply(x INTEGER, y INTEGER) RETURNS INTEGER LANGUAGE PYTHON AS 'return x * y'"#,
(),
)?;
let py_product: i64 = db.query_one("SELECT py_multiply(7, 8)", ())?;
println!("Python Multiply: 7 * 8 = {}", py_product);
db.execute(
r#"CREATE FUNCTION py_list_sum(nums TEXT) RETURNS INTEGER LANGUAGE PYTHON AS '
import json
numbers = json.loads(nums)
return sum(numbers)
'"#,
(),
)?;
let py_sum: i64 = db.query_one("SELECT py_list_sum('[1,2,3,4,5]')", ())?;
println!("Python List Sum: {}", py_sum);
}
Ok(())
}