]> matita.cs.unibo.it Git - helm.git/blob - helm/ocaml/metadata/extractor/extractor.ml
added new extractor based on MetadataDb.index_obj
[helm.git] / helm / ocaml / metadata / extractor / extractor.ml
1 let _ = Helm_registry.load_from "extractor.conf.xml"
2 let _ = Unix.system ("mkdir -p " ^ (Helm_registry.get "tmp.dir"))
3 let _ = Http_getter.init () 
4 (*let _ = Http_getter.update () *)
5
6 let dbd =
7   Mysql.quick_connect 
8     ~host:(Helm_registry.get "db.host") 
9     ~user:(Helm_registry.get "db.user") 
10     ~database:(Helm_registry.get "db.database") ()
11
12 let _ =
13   try
14     MetadataTypes.ownerize_tables Sys.argv.(1)
15   with Invalid_argument _ -> MetadataTypes.ownerize_tables "NEW"
16
17 let uri_RE = Str.regexp ".*\\(ind\\|var\\|con\\)$"
18  
19 let create_all () =
20   let obj_tbl = MetadataTypes.obj_tbl () in
21   let sort_tbl = MetadataTypes.sort_tbl () in
22   let rel_tbl = MetadataTypes.rel_tbl () in
23   let name_tbl =  MetadataTypes.name_tbl () in
24   let count_tbl = MetadataTypes.count_tbl () in
25   let tbls = [ 
26     (obj_tbl,`RefObj) ; (sort_tbl,`RefSort) ; (rel_tbl,`RefRel) ;
27     (name_tbl,`ObjectName) ; (count_tbl,`Count) ] 
28   in
29   let statements = 
30     (SqlStatements.create_tables tbls) @ (SqlStatements.create_indexes tbls)
31   in
32   List.iter (fun statement -> 
33     try
34       ignore (Mysql.exec dbd statement)
35     with
36       exn -> 
37          let status = Mysql.status dbd in
38          match status with 
39          | Mysql.StatusError Mysql.Table_exists_error -> ()
40          | Mysql.StatusError _ -> raise exn
41          | _ -> ()
42       ) statements
43
44 let drop_all () =
45   let obj_tbl = MetadataTypes.obj_tbl () in
46   let sort_tbl = MetadataTypes.sort_tbl () in
47   let rel_tbl = MetadataTypes.rel_tbl () in
48   let name_tbl =  MetadataTypes.name_tbl () in
49   let count_tbl = MetadataTypes.count_tbl () in
50   let tbls = [ 
51     (obj_tbl,`RefObj) ; (sort_tbl,`RefSort) ; (rel_tbl,`RefRel) ;
52     (name_tbl,`ObjectName) ; (count_tbl,`Count) ] 
53   in
54   let statements = 
55     (SqlStatements.drop_tables tbls) @ (SqlStatements.drop_indexes tbls)
56   in
57   List.iter (fun statement -> 
58     try
59       ignore (Mysql.exec dbd statement)
60     with Mysql.Error _ as exn ->
61       match Mysql.errno dbd with 
62       | Mysql.Bad_table_error 
63       | Mysql.No_such_index | Mysql.No_such_table -> () 
64       | _ -> raise exn
65     ) statements
66   
67
68 let main () =
69   drop_all ();
70   create_all ();
71   let uris = Http_getter.getalluris () in
72   let uris = List.filter (fun u -> Str.string_match uri_RE u 0) uris in
73   let len = float_of_int (List.length uris) in
74   let i = ref 0 in
75   List.iter (fun u ->
76     incr i;
77     let perc = ((float_of_int !i)  /. len *. 100.0) in
78     let l = String.length u in
79     let short = 
80       if l < 60 then 
81         u ^ String.make (63 - l) ' ' 
82       else 
83         "..." ^  String.sub u (l - 60) 60
84     in
85     Printf.printf "\rIndexing (%3.1f%%): %s" perc short;
86     flush stdout;
87     let uri = UriManager.uri_of_string u in
88     MetadataDb.index_obj ~dbd ~uri)
89   uris
90 ;;
91
92 main ()