diff --git a/src/db/plan.rs b/src/db/plan.rs index 8fa10247..a9f68227 100644 --- a/src/db/plan.rs +++ b/src/db/plan.rs @@ -44,6 +44,8 @@ use crate::parser::Rule; use crate::error::{CozoError, Result}; use crate::parser::text_identifier::build_name_in_def; use crate::relation::data::DataKind; +use crate::relation::value; +use crate::relation::value::Value; #[derive(Debug, Eq, PartialEq, Clone)] pub enum FromEl { @@ -175,6 +177,11 @@ impl<'a> Session<'a> { Ok((table_name, name.map(|v| v.to_string()), table_info)) } + + pub fn parse_where_pattern(&self, pair: Pair) -> Result { + let conditions = pair.into_inner().map(Value::from_pair).collect::>>()?; + Ok(Value::Apply(value::OP_AND.into(), conditions).to_static()) + } } #[cfg(test)] @@ -236,9 +243,8 @@ mod tests { let s = "where b.id > c.id || x.name.is_null(), a.id == 5, x.name == 'Joe', x.name.len() == 3"; let parsed = Parser::parse(Rule::where_pattern, s).unwrap().next().unwrap(); - let first = parsed.into_inner().next().unwrap(); - println!("{:#?}", first); - println!("{:#?}", Value::from_pair(first)); + let where_result = sess.parse_where_pattern(parsed).unwrap(); + println!("{:#?}", where_result); } drop(engine); let _ = fs::remove_dir_all(db_path);