]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/ocaml/metadata/metadataDb.ml
cosmetic changes (no longer open Neturl)
[helm.git] / helm / ocaml / metadata / metadataDb.ml
index 7eaf4d88167b875957853bbe0f1b1fd875520ed9..c56a1a027d6fd900b7aa50c66fec3771cce5d14a 100644 (file)
@@ -28,24 +28,26 @@ open MetadataTypes
 open Printf
 
 let prepare_insert () =
+  (*
   let insert_owner a b =
-    sprintf "INSERT %s VALUES (\"%s\", \"%s\")" owners_tbl a b
+    sprintf "INSERT %s VALUES (\"%s\", \"%s\")" (owners_tbl ())a b
   in
+  *)
   let insert_sort  a b c d =
-    sprintf "INSERT %s VALUES (\"%s\", \"%s\", %d, \"%s\")" sort_tbl a b c d
+    sprintf "INSERT %s VALUES (\"%s\", \"%s\", %d, \"%s\")" (sort_tbl ())a b c d
   in
   let insert_rel a b c =
-    sprintf "INSERT %s VALUES (\"%s\", \"%s\", %d)" rel_tbl a b c
+    sprintf "INSERT %s VALUES (\"%s\", \"%s\", %d)" (rel_tbl ()) a b c
   in
   let insert_obj a b c d =
-    sprintf "INSERT %s VALUES (\"%s\", \"%s\", \"%s\", %s)" obj_tbl a b c d
+    sprintf "INSERT %s VALUES (\"%s\", \"%s\", \"%s\", %s)" (obj_tbl ()) a b c d
   in
-  (insert_owner, insert_sort, insert_rel, insert_obj)
+  ((*insert_owner, *)insert_sort, insert_rel, insert_obj)
 
-let execute_insert dbd (insert_owner, insert_sort, insert_rel, insert_obj)
+let execute_insert dbd ((*insert_owner, *)insert_sort, insert_rel, insert_obj)
   uri owner (sort_cols, rel_cols, obj_cols)
 =
-  ignore (Mysql.exec dbd (insert_owner uri owner));
+  (* ignore (Mysql.exec dbd (insert_owner uri owner)); *)
   List.iter (function
       | [`String a; `String b; `Int c; `String d] ->
           ignore (Mysql.exec dbd (insert_sort a b c d))
@@ -67,21 +69,21 @@ let execute_insert dbd (insert_owner, insert_sort, insert_rel, insert_obj)
 let insert_const_no dbd uri =
   let inconcl_no =
     sprintf "INSERT %s SELECT \"%s\", COUNT(DISTINCT h_occurrence) FROM %s WHERE (h_position=\"%s\" OR h_position=\"%s\") AND source LIKE \"%s%%\""
-      conclno_tbl uri obj_tbl inconcl_pos mainconcl_pos uri
+      (conclno_tbl ()) uri (obj_tbl ()) inconcl_pos mainconcl_pos uri
   in
   let concl_hyp =
     sprintf "INSERT %s
         SELECT \"%s\",COUNT(DISTINCT h_occurrence)
         FROM %s
         WHERE NOT (h_position=\"%s\") AND (source = \"%s\")"
-      conclno_hyp_tbl uri obj_tbl inbody_pos uri
+      (conclno_hyp_tbl ()) uri (obj_tbl ()) inbody_pos uri
   in
   ignore (Mysql.exec dbd inconcl_no);
   ignore (Mysql.exec dbd concl_hyp)
 
 let insert_name ~dbd ~uri ~name =
   let query =
-    sprintf "INSERT %s VALUES (\"%s\", \"%s\")" name_tbl uri name
+    sprintf "INSERT %s VALUES (\"%s\", \"%s\")" (name_tbl ()) uri name
   in
   ignore (Mysql.exec dbd query)
 
@@ -111,24 +113,41 @@ let index_inductive_def ~dbd =
     List.iter (insert_const_no dbd) uris;
     List.iter (fun (uri, name, _) -> insert_name ~dbd ~uri ~name) metadata
 
-let clean ~(dbd:Mysql.dbd) ~owner =
+let clean ~(dbd:Mysql.dbd) =
   let owned_uris =  (* list of uris in list-of-columns format *)
     let query =
-      sprintf "SELECT source FROM %s WHERE owner = \"%s\"" owners_tbl owner
+      (* sprintf 
+       *  "SELECT source FROM %s WHERE owner = \"%s\"" (owners_tbl ())
+       * owner*)
+      sprintf "SELECT source FROM %s" (obj_tbl ())
     in
     let result = Mysql.exec dbd query in
-    Mysql.map result (fun cols ->
+    let uris = Mysql.map result (fun cols ->
       match cols.(0) with
       | Some src -> src
-      | None -> assert false)
+      | None -> assert false) in
+    (* and now some stuff to remove #xpointers and duplicates *)
+    let cleaned_uris = 
+      List.map (fun x -> Str.replace_first (Str.regexp "\#.*$") "" x) uris
+    in
+    let sorted_uris = List.fast_sort Pervasives.compare cleaned_uris in
+    match sorted_uris with
+    | [] -> sorted_uris
+    | he::tl -> 
+        (* no List.remove dups ?? *)
+        snd(List.fold_left (fun (last,l) cur -> if cur <> last then
+        (cur,cur::l) else (last,l)) (he,[he]) tl)
   in
   let del_from tbl =
-    let query s = sprintf "DELETE FROM %s WHERE source LIKE \"%s%%\"" tbl s in
+    let query s = 
+      sprintf "DELETE FROM %s WHERE source LIKE \"%s%%\"" (tbl ()) s 
+    in
     List.iter
       (fun source_col -> ignore (Mysql.exec dbd (query source_col)))
       owned_uris
   in
   List.iter del_from
-    [sort_tbl; rel_tbl; obj_tbl; conclno_tbl; conclno_hyp_tbl; name_tbl;
-    owners_tbl]
+    [sort_tbl; rel_tbl; obj_tbl; conclno_tbl; conclno_hyp_tbl; name_tbl(*;
+    owners_tbl*)];
+  List.iter Http_getter.unregister owned_uris