update imperative condition to support `as` clause, which fixes https://github.com/cozodb/cozo/issues/131

main
Ziyang Hu 1 year ago
parent 1e8f3dbf60
commit 28750eb95a

@ -111,7 +111,7 @@ fn parse_imperative_stmt(
let condition = inner.next().unwrap(); let condition = inner.next().unwrap();
let cond = match condition.as_rule() { let cond = match condition.as_rule() {
Rule::underscore_ident => Left(SmartString::from(condition.as_str())), Rule::underscore_ident => Left(SmartString::from(condition.as_str())),
Rule::query_script_inner => { Rule::imperative_clause => {
let mut src = condition.into_inner(); let mut src = condition.into_inner();
let prog = parse_query( let prog = parse_query(
src.next().unwrap().into_inner(), src.next().unwrap().into_inner(),

@ -1361,3 +1361,21 @@ fn param_shorthand() {
let res = db.run_default(r"?[x, y, z] := *x {x, y, z}"); let res = db.run_default(r"?[x, y, z] := *x {x, y, z}");
assert_eq!(res.unwrap().into_json()["rows"], json!([[1, 2, 3]])); assert_eq!(res.unwrap().into_json()["rows"], json!([[1, 2, 3]]));
} }
#[test]
fn crashy_imperative() {
let db = DbInstance::default();
db.run_default(
r"
{:create _test {a}}
%loop
%if { len[count(x)] := *_test[x]; ?[x] := len[z], x = z >= 10 }
%then %return _test
%end
{ ?[a] := a = rand_uuid_v1(); :put _test {a} }
%end
",
)
.unwrap();
}

Loading…
Cancel
Save