let rec property_ex rop path inv = function
[] -> []
| s::tl -> let mprop = fst path in
- print_endline mprop;
- let prop = List.hd (snd path) in
+ prerr_endline mprop;
+ let l_sub_p = snd path in
+
+ let prop = (if (l_sub_p <> []) then List.hd l_sub_p
+ else "")
+ in
match mprop with
"refObj" (* in base al valore di prop restituisco i valori del relativo campo della tabella relativa all'uri rappresentata da s *)
| "backPointer" ->
- print_endline mprop;
+ prerr_endline mprop;
let mpid = getpid mprop in
let res =
let c = pgc () in
- let tv = pgresult_to_string (c#exec ("select id from registry where uri='" ^ s ^ "'")) in
- let q = "select t" ^ tv ^ "." ^ prop ^ " from t" ^ tv ^ " where prop_id= '" ^ mpid ^ "'" in
- print_endline q;
+ let quoted_s =
+ Str.global_substitute (Str.regexp "'")
+ (function _ -> "\\'") s in
+ let tv = pgresult_to_string (c#exec ("select distinct id from registry where uri='" ^ quoted_s ^ "' order by id")) in
+ let q = "select distinct t" ^ tv ^ "." ^ prop ^ " from t" ^ tv ^ " where prop_id= '" ^ mpid ^ "' order by t" ^ tv ^ "." ^ prop in
+ prerr_endline q;
pgresult_to_string_list (c#exec q)
in
append (res,(property_ex rop path inv tl))
if inv then (* restituisco gli uri che il valore della prop richiesta uguale a s *)
let res =
let c = pgc () in
- let q = ("select h" ^ mprop ^ ".uri from h" ^ mprop ^ " where h" ^ mprop ^ "." ^ prop ^ "= '" ^ s ^ "'") in
- print_endline q;
+ let q = ("select distinct h" ^ mprop ^ ".uri from h" ^ mprop ^ " where h" ^ mprop ^ "." ^ prop ^ "= '" ^ s ^ "' order by h" ^ mprop ^ ".uri") in
+ prerr_endline q;
pgresult_to_string_list (c#exec q)
in
append (res,(property_ex rop path inv tl))
else
let res = (* restituisco il valore della prop relativo all'uri rappresentato da s*)
let c = pgc () in
- let q = ("select h" ^ mprop ^ "." ^ prop ^" from h" ^ mprop ^ " where h" ^ mprop ^ ".uri = '" ^ s ^ "'") in
+ let quoted_s =
+ Str.global_substitute (Str.regexp "'")
+ (function _ -> "\\'") s in
+ let q = ("select distinct h" ^ mprop ^ "." ^ prop ^" from h" ^ mprop ^ " where h" ^ mprop ^ ".uri = '" ^ quoted_s ^ "' order by h" ^ mprop ^ "." ^ prop) in
pgresult_to_string_list (c#exec q)
in
append (res,(property_ex rop path inv tl))
-
| _ -> (* metadati DC !!!! Controllare se i nomi delle tabelle cominciano con h !!!!*)
+ prerr_endline "DC";
if inv then
let res =
let c = pgc () in
let q = ("select " ^ mprop ^ ".uri from " ^ mprop ^ " where " ^ mprop ^ ".value = '" ^ s ^ "'") in
- pgresult_to_string_list (c#exec q)
+ prerr_endline q;
+ pgresult_to_string_list (c#exec q)
in
append (res,(property_ex rop path inv tl))
else
let res =
let c = pgc () in
- let q = ("select " ^ mprop ^ ".value from " ^ mprop ^ " where " ^ mprop ^ ".uri = '" ^ s ^ "'") in
+ let quoted_s =
+ Str.global_substitute (Str.regexp "'")
+ (function _ -> "\\'") s in
+ let q = ("select " ^ mprop ^ ".value from " ^ mprop ^ " where " ^ mprop ^ ".uri = '" ^ quoted_s ^ "'") in
pgresult_to_string_list (c#exec q)
in
append (res,(property_ex rop path inv tl))