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(())
}