- 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"
- in
- (*let _ = print_endline ("use: " ^ qq) in*)
- let res = c#exec qq in
- parziale
- @
- if not (List.mem asvar (List.tl (List.hd alist))) then
- List.map
- (fun l -> [List.hd l] @ List.tl xres @ List.tl l)
- res#get_list
- else
- List.map
- (fun l ->
- let t =
- match xres with
- hd::tl -> (List.hd l)::tl
- | [] -> []
- in
- List.map
- snd
- (Utility.set_assoc
- asvar
- (List.hd (List.tl l))
- (List.combine (List.hd alist) t)
- )
- )
- (List.find_all
- (fun l ->
- let currv =
- List.hd (List.tl l)
- and xresv =
- try (
- List.assoc
- asvar
- (List.combine
- (List.tl (List.hd alist))
- (List.tl xres)
- )
- ) with
- Not_found -> ""
- in
- xresv = "" or xresv = currv
- )
- res#get_list
- )
+ Sort.list
+ (fun (uri1-> uri1 < uri2)
+ (List.fold_left
+ (fun parziale (uri,aset)->
+ print_string uri ;
+ let tv =
+ pgresult_to_string
+ (c#exec ("select id from registry where uri='" ^ uri ^ "'"))
+ in
+ let qq =
+ "select uri, context from t" ^ tv ^ " where prop_id='" ^ usek ^
+ "' order by uri asc"
+ in
+ let res = c#exec qq in
+ (List.map
+ (function
+ [uri;context] -> {S.uri = uri ; S.attributes = [asvar, context] ; S.extra = ""}
+ | _ -> assert false
+ ) res#get_list
+ ) @
+ parziale
+ ) [] rset