use std::collections::HashMap;
extern crate query_planner;
use query_planner::rel::*;
use query_planner::exec::*;
use query_planner::parser::*;
use query_planner::sqltorel::*;
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 sql = "SELECT name, id FROM people WHERE id > 4";
let ast = Parser::parse_sql(String::from(sql)).unwrap();
let query_planner = SqlToRel::new(schemas.clone());
let plan = query_planner.sql_to_rel(&ast).unwrap();
let rel_str = serde_json::to_string_pretty(&plan).unwrap();
println!("Relational plan: {}", rel_str);
let ctx = ExecutionContext::new(schemas.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")
}
});
}