]> matita.cs.unibo.it Git - helm.git/blob - helm/ocaml/metadata/sqlStatements.ml
added sqlStatements module (contains all CREATE TABLE/INDEX)
[helm.git] / helm / ocaml / metadata / sqlStatements.ml
1
2 open Printf;;
3 type tbl = [ `RefObj| `RefSort| `RefRel| `ObjectName| `Owners| `Count]
4
5 (* TABLES *)
6
7 let sprintf_refObj_format name = sprintf "
8 CREATE TABLE %s (
9     source varchar(255) binary not null,
10     h_occurrence varchar(255) binary not null,
11     h_position varchar(255) binary not null,
12     h_depth integer
13 );" name
14
15 let sprintf_refSort_format name = sprintf "
16 CREATE TABLE %s (
17     source varchar(255) binary not null,
18     h_position varchar(255) binary not null,
19     h_depth integer not null,
20     h_sort varchar(255) binary not null
21 );" name
22
23 let sprintf_refRel_format name = sprintf "
24 CREATE TABLE %s (
25     source varchar(255) binary not null,
26     h_position varchar(255) binary not null,
27     h_depth integer not null
28 );" name
29
30 let sprintf_objectName_format name = sprintf "
31 CREATE TABLE %s (
32     source varchar(255) binary not null,
33     value varchar(255) binary not null
34 );" name
35
36 let sprintf_owners_format name = sprintf "
37 CREATE TABLE %s (
38     source varchar(255) binary not null,
39     owner varchar(255) binary not null
40 );" name
41
42 let sprintf_count_format name = sprintf "
43 CREATE TABLE %s (
44     source varchar(255) binary unique not null,
45     conclusion smallint(6) not null,
46     hypothesis smallint(6) not null,
47     statement smallint(6) not null
48 );" name
49
50 (* INDEXES *)
51
52 let sprintf_refObj_index name = sprintf "
53 CREATE INDEX %s_source ON %s (source);
54 CREATE INDEX %s_target ON %s (h_occurrence);
55 CREATE INDEX %s_position ON %s (h_position);
56 " name name name name name name 
57
58 let sprintf_refSort_index name = sprintf "
59 CREATE INDEX %s_source ON %s (source);
60 " name name
61
62 let sprintf_objectName_index name = sprintf "
63 CREATE INDEX %s_value ON %s (value);
64 " name name
65
66 let sprintf_owners_index name = sprintf "
67 CREATE INDEX %s_owner ON %s (owner);
68 CREATE INDEX %s_source ON %s (source);
69 " name name name name 
70
71 let sprintf_count_index name = sprintf "
72 CREATE INDEX %s_source ON %s (source);
73 CREATE INDEX %s_conclusion ON %s (conclusion);
74 CREATE INDEX %s_hypothesis ON %s (hypothesis);
75 CREATE INDEX %s_statement ON %s (statement);
76 " name name name name name name name name 
77
78 let sprintf_refRel_index name = ""
79
80 (* FUNCTIONS *)
81
82 let get_table_format t named =
83   match t with
84   | `RefObj -> sprintf_refObj_format named
85   | `RefSort -> sprintf_refSort_format named
86   | `RefRel -> sprintf_refRel_format named
87   | `ObjectName -> sprintf_objectName_format named
88   | `Owners -> sprintf_owners_format named
89   | `Count -> sprintf_count_format named
90
91 let get_index_format t named =
92   match t with
93   | `RefObj -> sprintf_refObj_index named
94   | `RefSort -> sprintf_refSort_index named
95   | `RefRel -> sprintf_refRel_index named
96   | `ObjectName -> sprintf_objectName_index named
97   | `Owners -> sprintf_owners_index named
98   | `Count -> sprintf_count_index named
99   
100 let create_tables l =
101   List.fold_left (fun s (name,table) ->  s ^ get_table_format table name) "" l
102
103 let create_indexes l =
104   List.fold_left (fun s (name,table) ->  s ^ get_index_format table name) "" l
105