let f = if b then U.mql_prod else U.set_union in
let g a s = (fst a, f (snd a) (eval_grp c z)) :: s in
List.fold_right g (eval_query c x) []
- | M.Property q0 q1 q2 mc ct cf el pat y ->
+ | M.Property q0 q1 q2 mc ct cfl el pat y ->
let subj, mct =
if q0 then [], (pat, q2 @ mc, eval_val c y)
else (q2 @ mc), (pat, [], eval_val c y)
in
let eval_cons (pat, p, y) = (pat, q2 @ p, eval_val c y) in
let cons_true = mct :: List.map eval_cons ct in
- let cons_false = List.map eval_cons cf in
+ let cons_false = List.map (List.map eval_cons) cfl in
let eval_exp (p, po) = (q2 @ p, po) in
let exp = List.map eval_exp el in
let t = U.start_time () in
let keep_av (s, g) = (s, List.fold_right keep_set g []) in
List.map keep_av (eval_query c x)
and eval_grp c = function
- | M.Attr l ->
+ | M.Attr gs ->
let attr_aux g (p, y) = U.mql_union g [(p, eval_val c y)] in
- [List.fold_left attr_aux [] l]
+ let attr_auxs s l = U.set_union s [List.fold_left attr_aux [] l] in
+ List.fold_left attr_auxs [] gs
| M.From i ->
try snd (List.assoc i c.avars)
with Not_found -> warn (M.AVar i); []