use std::collections::HashMap;
extern crate query_planner;
use query_planner::rel::*;
use query_planner::exec::*;
extern crate serde_json;
fn main() {
let schema = TupleType::new(vec![
ColumnMeta::new("id", DataType::UnsignedLong, false),
ColumnMeta::new("name", DataType::String, false)
]);
let mut schemas : HashMap<String, TupleType> = HashMap::new();
schemas.insert("people".to_string(), schema.clone());
let csv_file = Rel::CsvFile {
filename: "test/people.csv".to_string(),
schema: schema.clone()
};
let filter_expr = Rex::BinaryExpr {
left: Box::new(Rex::TupleValue(0)),
op: Operator::Eq,
right: Box::new(Rex::Literal(Value::UnsignedLong(2)))
};
let plan = Rel::Selection {
expr: filter_expr,
input: Box::new(csv_file),
schema: schema.clone()
};
let rel_str = serde_json::to_string_pretty(&plan).unwrap();
println!("Relational plan: {}", rel_str);
let mut ctx = ExecutionContext::new(schemas.clone());
ctx.register_table("people".to_string(), schema.clone());
let execution_plan = ctx.create_execution_plan(&plan).unwrap();
let it = execution_plan.scan(&ctx);
it.for_each(|t| {
match t {
Ok(tuple) => println!("Tuple: {:?}", tuple),
_ => println!("Error")
}
});
}