Ziyang Hu 1 year ago
parent 36f9db62bb
commit aa8af156c8

@ -84,11 +84,11 @@ relation_named_apply = {relation_ident ~ "{" ~ named_apply_args ~ validity_claus
relation_apply = {relation_ident ~ "[" ~ apply_args ~ validity_clause? ~ "]"} relation_apply = {relation_ident ~ "[" ~ apply_args ~ validity_clause? ~ "]"}
search_apply = {search_index_ident ~ "{" ~ named_apply_args ~ "|" ~ (index_opt_field ~ ",")* ~ index_opt_field? ~ "}"} search_apply = {search_index_ident ~ "{" ~ named_apply_args ~ "|" ~ (index_opt_field ~ ",")* ~ index_opt_field? ~ "}"}
disjunction = {(atom ~ "or" )* ~ atom} disjunction = {(atom ~ WHITESPACE+ ~ "or" ~ WHITESPACE+ )* ~ atom}
atom = _{ negation | relation_named_apply | relation_apply | search_apply | rule_apply | unify_multi | unify | expr | grouped} atom = _{ negation | relation_named_apply | relation_apply | search_apply | rule_apply | unify_multi | unify | expr | grouped}
unify = {var ~ "=" ~ expr} unify = {var ~ "=" ~ expr}
unify_multi = {var ~ "in" ~ expr} unify_multi = {var ~ WHITESPACE+ ~ "in" ~ WHITESPACE+ ~ expr}
negation = {"not" ~ atom} negation = {"not" ~ WHITESPACE+ ~ atom}
apply = {ident ~ "(" ~ apply_args ~ ")"} apply = {ident ~ "(" ~ apply_args ~ ")"}
apply_args = {(expr ~ ",")* ~ expr?} apply_args = {(expr ~ ",")* ~ expr?}
named_apply_args = {(named_apply_pair ~ ",")* ~ named_apply_pair?} named_apply_args = {(named_apply_pair ~ ",")* ~ named_apply_pair?}

@ -1159,3 +1159,22 @@ fn multi_index_vec() {
println!("{}", row); println!("{}", row);
} }
} }
#[test]
fn parser_corner_case() {
let db = DbInstance::new("mem", "", "").unwrap();
db.run_script(
r#"
?[C] := C = 1
orx[C] := C = 1
"#,
Default::default(),
).unwrap();
db.run_script(
r#"
?[C] := C = true, C
inx[C] := C = 1
"#,
Default::default(),
).unwrap();
}
Loading…
Cancel
Save