Skip to content

Rust API

Native Rust API for embedded database usage.

Basic Usage

use heliosdb_lite::{EmbeddedDatabase, Value};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Create database
    let db = EmbeddedDatabase::new("./data")?;

    // Execute SQL
    db.execute("CREATE TABLE users (id INT, name TEXT)")?;

    // Insert with parameters
    db.execute_params(
        "INSERT INTO users VALUES ($1, $2)",
        &[Value::Int4(1), Value::String("Alice".into())]
    )?;

    // Query
    let results = db.query("SELECT * FROM users")?;
    for row in results.rows {
        println!("{:?}", row);
    }

    Ok(())
}

Core Types

pub struct EmbeddedDatabase { ... }
pub struct QueryResult {
    pub rows: Vec<HashMap<String, Value>>,
    pub columns: Vec<String>,
    pub rows_affected: i64,
}

pub enum Value {
    Null,
    Bool(bool),
    Int4(i32),
    Int8(i64),
    Float8(f64),
    String(String),
    Bytes(Vec<u8>),
    Json(serde_json::Value),
    Vector(Vec<f32>),
}

Transactions

let tx = db.begin_transaction()?;
db.execute("INSERT INTO users VALUES (1, 'Alice')")?;
db.execute("INSERT INTO users VALUES (2, 'Bob')")?;
tx.commit()?;
// Or tx.rollback()?;

Branching

db.create_branch("dev", Some("main"), None)?;
db.switch_branch("dev")?;
db.merge_branch("dev", "main")?;
db.drop_branch("dev")?;

Time-Travel

let results = db.query_as_of_timestamp(
    "SELECT * FROM orders",
    "2025-01-15 00:00:00",
    &[]
)?;
let results = db.vector_search("documents", "search query", 10)?;
for result in results {
    println!("{}: {}", result.id, result.score);
}

See API Reference for complete documentation.