Skip to content

Pipes in Rust

This local example provides rows directly and writes them through the SQL connector. Use the dependencies from Embedding.

use meerschaum::{Frame, InstanceConnector, Pipe, SqlConnector, SyncOptions};
use meerschaum::kernel::value::Value as Cell;
use meerschaum::sql::uri::ConnectionSpec;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let spec = ConnectionSpec::from_uri("sqlite:///demo.db", Some("demo"), None)?;
    let conn = SqlConnector::connect("demo", spec).await?;
    let pipe = Pipe::builder("plugin:manual", "readings")
        .instance("sql:demo")
        .build()?;
    let rows = Frame::from_object_columns(vec![
        ("id".into(), vec![Cell::Int(1)]),
        ("temperature".into(), vec![Cell::Float(21.5)]),
    ])?;
    let result = InstanceConnector::sync_pipe(
        &conn, &pipe, rows, &SyncOptions::default(),
    ).await;
    println!("{result:?}");
    Ok(())
}

Frame accepts Arrow record batches too. InstanceConnector exposes the same operations across SQL, API, and Valkey instances; select the matching Cargo feature.

See Frame, InstanceConnector, and SqlConnector for method signatures.