]> matita.cs.unibo.it Git - helm.git/blob - helm/ocaml/metadata/table_creator/table_creator.ml
added table_creator (comman line frontend to SqlStatements)
[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 ^ " [-index] tablename[=rename]\n\n");
13   prerr_string "known tables:";
14   List.iter (fun (n,_) -> prerr_string (" " ^ n)) map;
15   prerr_endline "\n"
16
17 let eq_RE = Str.regexp "="
18   
19 let parse_args l =
20   List.map (fun s -> 
21     let parts = Str.split eq_RE s in
22     let len = List.length parts in
23     assert (len = 1 || len = 2);
24     if len = 1 then (s,s) else (List.nth parts 0, List.nth parts 1)) 
25   l
26   
27 let main () =
28   let len = Array.length Sys.argv in
29   if len < 2 then 
30     begin
31     usage Sys.argv.(0);
32     exit 1
33     end
34   else
35     begin
36       let from, index = if Sys.argv.(1) = "-index" then 2,true else 1,false in
37       let todo = Array.to_list (Array.sub Sys.argv from (len - from)) in
38       let todo = parse_args todo in
39       let todo = List.map (fun (x,name) -> name, (List.assoc x map)) todo in
40       print_endline (SqlStatements.create_tables todo);
41       if index then print_endline (SqlStatements.create_indexes todo)
42     end
43
44 let _ = main ()
45