datum-sql 0.10.3

DataFusion and Arrow SQL front end for Datum streams
Documentation
use std::sync::Arc;

use arrow::array::{Int64Array, StringArray};
use arrow::datatypes::{DataType, Field, Schema};
use arrow::record_batch::RecordBatch;
use datum::Source;
use datum_sql::DatumSqlContext;

#[tokio::main]
async fn main() -> datafusion::common::Result<()> {
    let schema = Arc::new(Schema::new(vec![
        Field::new("city", DataType::Utf8, false),
        Field::new("temp", DataType::Int64, false),
        Field::new("humidity", DataType::Int64, false),
    ]));
    let batch = RecordBatch::try_new(
        Arc::clone(&schema),
        vec![
            Arc::new(StringArray::from(vec!["sf", "nyc", "sea", "aus"])),
            Arc::new(Int64Array::from(vec![67, 74, 58, 91])),
            Arc::new(Int64Array::from(vec![72, 64, 80, 40])),
        ],
    )?;

    let context = DatumSqlContext::new();
    context.register_source("weather", schema, Source::from_iter([batch]))?;

    let batches = context
        .execute("SELECT city, temp FROM weather WHERE temp >= 70")
        .await?;
    for batch in batches {
        println!("{batch:?}");
    }

    Ok(())
}