X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Focaml%2Fmathql_interpreter%2Fmqint.ml;h=3a0a5fb310b277a4729a36d5da17e30b144c9209;hb=b6992cac4c9ffa80337e5e11e5017b0b9b17c65e;hp=dce67f86494d9fc3f95006622eae5af340626a51;hpb=1cfcea66d7394a785ec439cd6b03497b276918c4;p=helm.git diff --git a/helm/ocaml/mathql_interpreter/mqint.ml b/helm/ocaml/mathql_interpreter/mqint.ml index dce67f864..3a0a5fb31 100644 --- a/helm/ocaml/mathql_interpreter/mqint.ml +++ b/helm/ocaml/mathql_interpreter/mqint.ml @@ -37,6 +37,9 @@ open Diff;; open Sortedby;; open Use;; open Select;; +open Letin;; + +let prop_pool = ref None;; let fi_to_string fi = match fi with @@ -55,10 +58,38 @@ let fi_to_string fi = ")" ;; +let see_prop_pool () = + let _ = print_endline "eccomi" in + List.iter + (fun elem -> print_endline (fst elem ^ ": " ^ snd elem)) + (match !prop_pool with Some l -> l | _ -> print_endline "ciao"; assert false) +;; + (* * inizializzazione della connessione al database *) -let init () = Dbconn.init ();; +let init () = + let _ = Dbconn.init () in + let c = pgc () in + let res = + c#exec "select name,id from property where ns_id in (select id from namespace where url='http://www.cs.unibo.it/helm/schemas/mattone.rdf#')" + in + prop_pool := Some + ( + List.map + (function + a::b::_ -> (a, b) + | _ -> print_endline "no"; assert false + ) + res#get_list + ) +;; + +let get_prop_id prop = + if prop="refObj" then "F" + else if prop="backPointer" then "B" + else List.assoc prop (match !prop_pool with Some l -> l | _ -> assert false) +;; (* execute_ex env q *) (* [env] is the attributed uri environment in which the query [q] *) @@ -70,22 +101,35 @@ let rec execute_ex env = MQSelect (apvar, alist, abool) -> select_ex env apvar (execute_ex env alist) abool | MQUsedBy (alist, asvar) -> - use_ex (execute_ex env alist) asvar "F" (*"refObj"*) + use_ex (execute_ex env alist) asvar (get_prop_id "refObj") (* "F" (*"refObj"*) *) | MQUse (alist, asvar) -> - use_ex (execute_ex env alist) asvar "B" (*"backPointer"*) + use_ex (execute_ex env alist) asvar (get_prop_id "backPointer") (* "B" (*"backPointer"*) *) | MQPattern (apreamble, apattern, afragid) -> pattern_ex (apreamble, apattern, afragid) | MQUnion (l1, l2) -> union_ex (execute_ex env l1) (execute_ex env l2) -(* | MQDiff (l1, l2) -> diff_ex (execute_ex env l1) (execute_ex env l2) | MQSortedBy (l, o, f) -> sortedby_ex (execute_ex env l) o f -*) | MQIntersect (l1, l2) -> intersect_ex (execute_ex env l1) (execute_ex env l2) - | MQRVarOccur rvar -> [List.assoc rvar env] + | MQListRVar rvar -> [List.assoc rvar env] + | MQLetIn (lvar, l1, l2) -> + let t = Unix.time () in + let res = + (*CSC: The interesting code *) + let _ = letin_ex lvar (execute_ex env l1) in + execute_ex env l2 + (*CSC: end of the interesting code *) + in + letdispose (); + print_string ("LETIN = " ^ string_of_int (List.length res) ^ ": ") ; + print_endline (string_of_float (Unix.time () -. t) ^ "s") ; + flush stdout ; + res + | MQListLVar lvar -> + letref_ex lvar ;; (* Let's initialize the execute in Select, creating a cyclical recursion *) @@ -128,10 +172,11 @@ let xres_to_res l = MQRefs (List.map (function l -> - match Str.split (Str.regexp ":\|#\|/") l with - hd::tl -> ( + (*let _ = print_endline ("DEBUG: (mqint.ml: xres_to_res)" ^ l) in*) + match Str.split (Str.regexp ":\|#\|/\|(\|)") l with + hd::""::tl -> ( match List.rev tl with - ")"::n::"xpointer(1"::tail -> + n::"1"::"xpointer"::tail -> ( Some hd, List.fold_left @@ -144,7 +189,7 @@ let xres_to_res l = tail, [MQFC (int_of_string n)] ) - | ")"::n::m::"xpointer(1"::tail -> + | n::m::"1"::"xpointer"::tail -> ( Some hd, List.fold_left @@ -171,7 +216,7 @@ let xres_to_res l = [] ) ) - | [] -> assert false + | _ -> assert false ) tmp )