return where pattern as a single value

main
Ziyang Hu 2 years ago
parent 5581f23e51
commit 9671ff0639

@ -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<Rule>) -> Result<Value> {
let conditions = pair.into_inner().map(Value::from_pair).collect::<Result<Vec<_>>>()?;
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);

Loading…
Cancel
Save