]> matita.cs.unibo.it Git - helm.git/blob - helm/ocaml/metadata/table_creator/table_creator.ml
better table creator
[helm.git] / helm / ocaml / metadata / table_creator / table_creator.ml
1
2 let map =
3   (MetadataTypes.library_obj_tbl,`RefObj) ::
4   (MetadataTypes.library_sort_tbl,`RefSort) ::
5   (MetadataTypes.library_rel_tbl,`RefRel) ::
6   (MetadataTypes.library_name_tbl,`ObjectName) ::
7 (*  (MetadataTypes.library_???_tbl,`Owners) :: *)
8   (MetadataTypes.library_count_tbl,`Count) :: []
9
10 let usage argv_o =
11   prerr_string "\nusage:";
12   prerr_string ("\t" ^ argv_o ^ " what tablename[=rename]\n");
13   prerr_string ("\t" ^ argv_o ^ " what all\n\n");
14   prerr_endline "what:";
15   prerr_endline "\ttable\toutput SQL regarding tables";
16   prerr_endline "\tindex\toutput SQL regarding indexes\n";
17   prerr_string "known tables:\n\t";
18   List.iter (fun (n,_) -> prerr_string (" " ^ n)) map;
19   prerr_endline "\n"
20
21 let eq_RE = Str.regexp "="
22   
23 let parse_args l =
24   List.map (fun s -> 
25     let parts = Str.split eq_RE s in
26     let len = List.length parts in
27     assert (len = 1 || len = 2);
28     if len = 1 then (s,s) else (List.nth parts 0, List.nth parts 1)) 
29   l
30
31 let destructor_RE = Str.regexp "table_destructor\\(\\|\\.opt\\)$"
32   
33 let am_i_destructor () = 
34   try 
35     let _ = Str.search_forward destructor_RE Sys.argv.(0) 0 in true
36   with Not_found -> false
37   
38 let main () =
39   let len = Array.length Sys.argv in
40   if len < 2 then 
41     begin
42     usage Sys.argv.(0);
43     exit 1
44     end
45   else
46     begin
47       let tab,idx =
48         if am_i_destructor () then
49           (SqlStatements.drop_tables,SqlStatements.drop_indexes) 
50         else
51           (SqlStatements.create_tables,SqlStatements.create_indexes)
52       in
53       let from = 2 in
54       let index = if Sys.argv.(1) = "index" then true else false in
55       let todo = Array.to_list (Array.sub Sys.argv from (len - from)) in
56       let todo = match todo with ["all"] -> List.map fst map | todo -> todo in
57       let todo = parse_args todo in
58       let todo = List.map (fun (x,name) -> name, (List.assoc x map)) todo in
59       if index then 
60         print_endline (String.concat "\n" (idx todo))
61       else
62         print_endline (String.concat "\n" (tab todo))
63     end
64
65 let _ = main ()
66
67