* http://www.cs.unibo.it/helm/.
*)
-(*
- * implementazione del comando PATTERN
- *)
-
-open Dbconn;;
open Utility;;
-open Eval;;
-open Mathql_semantics;;
-let pattern_ex (apreamble, apattern, afragid) =
- let c = pgc () in
- (*let _ = print_string ("USE ")
- and t = Sys.time () in*)
- (*let r1 = helm_class_id "MathResource" in*)
- (*let qq = "select att0 from t" ^ r1 ^ " where att0 " ^ (pattern_match apreamble apattern afragid) ^ " order by t" ^ r1 ^ ".att0 asc" in*)
- (*PRE-CLAUDIO
- let qq = "select uri from registry where uri " ^ (pattern_match apreamble apattern afragid) ^ " order by registry.uri asc" in
- let result =
- let res =
- c#exec (qq)
- in
- [["retVal"]] @ List.map (fun l -> [l]) (pgresult_to_string_list res)*)
- let qq = "select uri from registry where uri " ^ (pattern_match (apreamble, apattern, afragid)) ^ " order by registry.uri asc" in
-print_endline qq ; flush stderr ;
- (*let _ = print_endline qq in*)
- let res =
- c#exec (qq)
- in
-(* PRE-CLAUDIO
- (*let _ = print_endline (string_of_float (Sys.time () -. t)); flush stdout in*)
- result*)
- List.map
- (function uri -> {uri = uri ; attributes = [] ; extra = ""})
- (pgresult_to_string_list res)
+let cat l1 l2 =
+ if l1 > l2 then
+ l2 @ l1
+ else
+ l1 @ l2
+;;
+
+let rec pattern_ex handle l =
+ match l with
+ [] -> []
+ | s::tl -> let result =
+ let c = MQIConn.pgc handle in
+ let quoted_s =
+ Str.global_substitute (Str.regexp "'")
+ (function _ -> "\\'") s in
+ let qq = "select uri from registry where uri ~ '" ^ quoted_s ^ "' order by registry.uri asc" in
+ let res = c#exec (qq) in
+ List.map (function uri -> (List.hd uri,[])) res#get_list
+ (*for i = 0 to res#ntuples do
+ List.map (function uri -> (uri,[])) (res#get_tuple_list i)
+ done*)
+
+ in
+ cat result (pattern_ex handle tl)
;;
+