]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/ocaml/mathql_interpreter/property.ml
New: stylesheets are now partially cached (i.e. all the stylesheets which
[helm.git] / helm / ocaml / mathql_interpreter / property.ml
index 6052c2072842ee14caecda71d660082def1a1621..84382fc74a88d889c26d67e403359ef243eb1819 100644 (file)
@@ -43,19 +43,26 @@ let getpid p =
 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))
@@ -68,8 +75,8 @@ let rec property_ex rop path inv = function
             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))
@@ -77,25 +84,32 @@ let rec property_ex rop path inv = function
             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))