X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;ds=sidebyside;f=helm%2Focaml%2Fmathql_interpreter%2Fuse.ml;h=ed8a855ec1f86b994bd184f0d1736bb71061c079;hb=6eae299f77793d89079a24bb8eaa50c5041ae4a7;hp=7755ff20a78a14a60c05383761d10a6fa2bd37d2;hpb=2ef44e8d1a908a08d31e6114c15898ae7dc8109e;p=helm.git diff --git a/helm/ocaml/mathql_interpreter/use.ml b/helm/ocaml/mathql_interpreter/use.ml index 7755ff20a..ed8a855ec 100644 --- a/helm/ocaml/mathql_interpreter/use.ml +++ b/helm/ocaml/mathql_interpreter/use.ml @@ -20,7 +20,7 @@ * MA 02111-1307, USA. * * For details, see the HELM World-Wide-Web page, - * http://cs.unibo.it/helm/. + * http://www.cs.unibo.it/helm/. *) (* @@ -45,18 +45,56 @@ open Dbconn;; * comando USE/USED BY *) let use_ex alist asvar usek = - let _ = print_string ("USE ") - and t = Unix.time () in + (*(*let _ = print_string ("USE ") + and t = Unix.time () in*) let result = - let c = pgc () - in - [ (List.hd alist) @ [asvar] ] - @ + let c = pgc () + in + [ (List.hd alist) @ [asvar] ] + @ + Sort.list + (fun l m -> List.hd l < List.hd m) + (List.fold_left + (fun parziale xres -> + (*let r1 = helm_property_id usek + and r2 = helm_property_id "position" + and r3 = helm_property_id "occurrence" + in + let qq = "select distinct t" ^ r3 ^ ".att1, t" ^ r2 ^ ".att1 " ^ + "from t" ^ r3 ^ ", t" ^ r2 ^ ", t" ^ r1 ^ " " ^ + "where " ^ "t" ^ r1 ^ ".att0 = '" ^ (List.hd xres) ^ "' and t" ^ r1 ^ + ".att1 = t" ^ r2 ^ ".att0 and t" ^ r1 ^ ".att1 = t" ^ r3 ^ + ".att0 order by t" ^ r3 ^ ".att1 asc"*) + let tv = pgresult_to_string (c#exec ("select id from registry where uri='" ^ (List.hd xres) ^ "'")) in + let _ = print_endline ("DEBUG (use.ml): " ^ tv) in + let qq = "select uri, context from t" ^ tv ^ " where back_for='" ^ usek ^ "'" in + let res = c#exec qq in + (List.map + (fun l -> [List.hd l] @ List.tl xres @ List.tl l) + res#get_list + ) + @ + parziale + ) + [] + (List.tl alist) + ) + in + (*let _ = print_endline (string_of_float (Unix.time () -. t)); flush stdout in*) + + *) +let module S = Mathql_semantics in +let _ = print_string ("USE ") +and t = Unix.time () in +let result = + let c = pgc () in Sort.list - (fun l m -> List.hd l < List.hd m) + (fun {S.uri = uri1} {S.uri = uri2} -> uri1 < uri2) (List.fold_left - (fun parziale xres -> - (*let r1 = helm_property_id usek + (fun parziale {S.uri = uri ; S.attributes = attributes} -> + print_string uri ; + (* RSSDB + let r1 = helm_property_id usek and r2 = helm_property_id "position" and r3 = helm_property_id "occurrence" in @@ -64,23 +102,30 @@ let use_ex alist asvar usek = "from t" ^ r3 ^ ", t" ^ r2 ^ ", t" ^ r1 ^ " " ^ "where " ^ "t" ^ r1 ^ ".att0 = '" ^ (List.hd xres) ^ "' and t" ^ r1 ^ ".att1 = t" ^ r2 ^ ".att0 and t" ^ r1 ^ ".att1 = t" ^ r3 ^ - ".att0 order by t" ^ r3 ^ ".att1 asc"*) - let tv = pgresult_to_string (c#exec ("select id from registry where uri='" ^ (List.hd xres) ^ "'")) in - let qq = "select uri, context from t" ^ tv ^ " where back_for='" ^ usek ^ "'" + ".att0 order by t" ^ r3 ^ ".att1 asc" + *) + let tv = + pgresult_to_string + (c#exec ("select id from registry where uri='" ^ uri ^ "'")) + in + let qq = + "select uri, context from t" ^ tv ^ " where back_for='" ^ usek ^ + "' order by uri asc" in let res = c#exec qq in (List.map - (fun l -> [List.hd l] @ List.tl xres @ List.tl l) - res#get_list - ) - @ + (function + [uri;context] -> {S.uri = uri ; S.attributes = [asvar, context] ; S.extra = ""} + | _ -> assert false + ) res#get_list + ) @ parziale - ) - [] - (List.tl alist) + ) [] alist ) - in - let _ = print_endline (string_of_float (Unix.time () -. t)); flush stdout in +in +print_string (" = " ^ string_of_int (List.length result) ^ ": ") ; +print_endline (string_of_float (Unix.time () -. t) ^ "s") ; +flush stdout ; result ;;