print_endline (string_of_float (Sys.time () -. before) ^ "s") ;
flush stdout ; res
| MathQL.Relation (rop, path, sexp, attl) -> relation_ex rop path (exec_set_exp c sexp) attl
- | MathQL.Select (rvar, sexp, bexp) ->
+ | MathQL.Select (rvar, sexp, bexp) ->
+ let before = Sys.time () in
let rset = (exec_set_exp c sexp) in
let rec select_ex rset =
match rset with
| r::tl -> let c1 = upd_rvars c ((rvar,r)::c.rvars) in
if (exec_boole_exp c1 bexp) then r::(select_ex tl)
else select_ex tl
- in select_ex rset
+ in
+ let res = select_ex rset in
+ print_string ("SELECT " ^ rvar ^ " = " ^ string_of_int (List.length res) ^ ": ") ;
+ print_endline (string_of_float (Sys.time () -. before) ^ "s") ;
+ flush stdout ; res
| MathQL.Diff (sexp1, sexp2) -> diff_ex (exec_set_exp c sexp1) (exec_set_exp c sexp2)
| _ -> assert false
| MathQL.Not x -> not (exec_boole_exp c x)
| MathQL.And (x, y) -> (exec_boole_exp c x) && (exec_boole_exp c y)
| MathQL.Or (x, y) -> (exec_boole_exp c x) || (exec_boole_exp c y)
- | MathQL.Sub (vexp1, vexp2) -> sub_ex (exec_val_exp c vexp1) (exec_val_exp c vexp2)
- | MathQL.Meet (vexp1, vexp2) -> meet_ex (exec_val_exp c vexp1) (exec_val_exp c vexp2)
+ | MathQL.Sub (vexp1, vexp2) -> let res = sub_ex (exec_val_exp c vexp1) (exec_val_exp c vexp2)
+ in
+ if res then (print_endline"SUB: TRUE";flush stdout)
+ else (print_endline"SUB: FALSE";flush stdout);
+ res
+ | MathQL.Meet (vexp1, vexp2) -> let res = meet_ex (exec_val_exp c vexp1) (exec_val_exp c vexp2)
+ in
+ if res then (print_endline"MEET: TRUE";flush stdout)
+ else (print_endline"MEET: FALSE";flush stdout);
+ res
+
| MathQL.Eq (vexp1, vexp2) -> (exec_val_exp c vexp1) = (exec_val_exp c vexp2)
| MathQL.Ex l bexp ->
- if l = [] then (exec_boole_exp c bexp)
+ let res =
+ if l = [] then (print_endline"LISTA VUOTA!";flush stdout;(exec_boole_exp c bexp))
else
let latt = List.map (fun uri ->
let (r,attl) = List.assoc uri c.rvars in (uri,attl)) l (*latt = l + attributi*)
in
sub_prod attl
in
- prod c latt; false
- with BooleExpTrue -> true
+ prod c latt; print_endline"SONO ARRIVATO ALLA FINE!"; flush stdout;false
+ with BooleExpTrue -> true
+ in if res then (print_endline"TRUE"; flush stdout)
+ else (print_endline"FALSE"; flush stdout);
+ res
| _ -> assert false
(* valuta una MathQL.val_exp e ritorna un MathQL.value *)