X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Focaml%2Fmathql_interpreter%2FmQueryInterpreter.ml;h=453b1643ce7fec85eef7483312848fde097f0298;hb=4167cea65ca58897d1a3dbb81ff95de5074700cc;hp=58fb7b87e734545491f893046333a50a85265bf0;hpb=931f10c61b4e3914474955a94a05cf43b5fa2bc0;p=helm.git diff --git a/helm/ocaml/mathql_interpreter/mQueryInterpreter.ml b/helm/ocaml/mathql_interpreter/mQueryInterpreter.ml index 58fb7b87e..453b1643c 100644 --- a/helm/ocaml/mathql_interpreter/mQueryInterpreter.ml +++ b/helm/ocaml/mathql_interpreter/mQueryInterpreter.ml @@ -56,7 +56,7 @@ let execute h x = if C.set h C.Warn then begin C.log h "MQIExecute: waring: reference to undefined variables: "; - P.text_of_query (C.log h) q "\n" + P.text_of_query (C.log h) "\n" q end in let rec eval_val c = function @@ -64,7 +64,7 @@ let execute h x = | M.True -> U.mql_true | M.Const s -> [s] | M.Set l -> U.iter (eval_val c) l - | M.Test k y1 y2 -> + | M.Test (k,y1,y2) -> let cand y1 y2 = if eval_val c y1 = U.mql_false then U.mql_false else eval_val c y2 in @@ -89,16 +89,16 @@ let execute h x = | M.VVar i -> begin try List.assoc i c.vvars with Not_found -> warn (M.Subj (M.VVar i)); [] end - | M.Dot i p -> begin + | M.Dot (i,p) -> begin try List.assoc p (List.assoc i c.groups) - with Not_found -> warn (M.Subj (M.Dot i p)); [] end - | M.Proj None x -> List.map (fun (r, _) -> r) (eval_query c x) - | M.Proj (Some p) x -> + with Not_found -> warn (M.Subj (M.Dot (i,p))); [] end + | M.Proj (None,x) -> List.map (fun (r, _) -> r) (eval_query c x) + | M.Proj ((Some p),x) -> let proj_group_aux (q, v) = if q = p then v else [] in let proj_group a = U.iter proj_group_aux a in let proj_set (_, g) = U.iter proj_group g in U.iter proj_set (eval_query c x) - | M.Ex l y -> + | M.Ex (l,y) -> let rec ex_aux h = function | [] -> let d = {c with groups = h} in @@ -123,32 +123,32 @@ let execute h x = C.log h (Printf.sprintf "Stat: %s,%i\n" s (List.length r)); r | M.Count y -> [string_of_int (List.length (eval_val c y))] - | M.Align s y -> U.iter (U.align s) (eval_val c y) + | M.Align (s,y) -> U.iter (U.align s) (eval_val c y) and eval_query c = function | M.Empty -> [] | M.Subj x -> List.map (fun s -> (s, [])) (eval_val c x) - | M.Log _ b x -> + | M.Log (_,b,x) -> if b then begin let t = P.start_time () in - P.text_of_query (C.log h) x "\n"; + P.text_of_query (C.log h) "\n" x; let s = P.stop_time t in - if C.set h C.Stat then + if C.set h C.Times then C.log h (Printf.sprintf "Log source: %s\n" s); eval_query c x end else begin let s = (eval_query c x) in let t = P.start_time () in - P.text_of_result (C.log h) s "\n"; + P.text_of_result (C.log h) "\n" s; let r = P.stop_time t in - if C.set h C.Stat then + if C.set h C.Times then C.log h (Printf.sprintf "Log: %s\n" r); s end - | M.If y x1 x2 -> + | M.If (y,x1,x2) -> if (eval_val c y) = U.mql_false then (eval_query c x2) else (eval_query c x1) - | M.Bin k x1 x2 -> + | M.Bin (k,x1,x2) -> let f = match k with | M.BinFJoin -> U.mql_union | M.BinFMeet -> U.mql_intersect @@ -161,13 +161,13 @@ let execute h x = | M.AVar i -> begin try [List.assoc i c.avars] with Not_found -> warn (M.AVar i); [] end - | M.LetSVar i x1 x2 -> + | M.LetSVar (i,x1,x2) -> let d = {c with svars = U.set (i, eval_query c x1) c.svars} in eval_query d x2 - | M.LetVVar i y x -> + | M.LetVVar (i,y,x) -> let d = {c with vvars = U.set (i, eval_val c y) c.vvars} in eval_query d x - | M.For k i x1 x2 -> + | M.For (k,i,x1,x2) -> let f = match k with | M.GenFJoin -> U.mql_union | M.GenFMeet -> U.mql_intersect @@ -179,11 +179,11 @@ let execute h x = f (eval_query d x2) (for_aux t) in for_aux (eval_query c x1) - | M.Add b z x -> + | M.Add (b,z,x) -> 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 cfl 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) @@ -196,7 +196,7 @@ let execute h x = let t = P.start_time () in let r = MQIProperty.exec h q1 subj cons_true cons_false exp in let s = P.stop_time t in - if C.set h C.Stat then + if C.set h C.Times then C.log h (Printf.sprintf "Property: %s,%i\n" s (List.length r)); r | M.StatQuery x -> @@ -205,7 +205,7 @@ let execute h x = let s = P.stop_time t in C.log h (Printf.sprintf "Stat: %s,%i\n" s (List.length r)); r - | M.Select i x y -> + | M.Select (i,x,y) -> let rec select_aux = function | [] -> [] | h :: t -> @@ -214,7 +214,7 @@ let execute h x = then select_aux t else h :: select_aux t in select_aux (eval_query c x) - | M.Keep b l x -> + | M.Keep (b,l,x) -> let keep_path (p, v) t = if List.mem p l = b then t else (p, v) :: t in let keep_grp a = List.fold_right keep_path a [] in @@ -234,10 +234,12 @@ let execute h x = with Not_found -> warn (M.AVar i); [] in let c = {svars = []; avars = []; groups = []; vvars = []} in - let t = P.start_time () in + let t = P.start_time () in + if C.set h C.Source then P.text_of_query (C.log h) "\n" x; let r = eval_query c x in + if C.set h C.Result then P.text_of_result (C.log h) "\n" r; let s = P.stop_time t in - if C.set h C.Stat then + if C.set h C.Times then C.log h (Printf.sprintf "MQIExecute: %s,%s\n" s (C.string_of_flags (C.flags h))); r