]> matita.cs.unibo.it Git - helm.git/blob - helm/ocaml/metadata/sqlStatements.ml
added index on refRel and the rename table statements
[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 = [
8 sprintf "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 = [
16 sprintf "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 = [
24 sprintf "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 = [
31 sprintf "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 = [
37 sprintf "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 = [
43 sprintf "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 let sprintf_refObj_drop name = [sprintf "DROP TABLE %s;" name]
51
52 let sprintf_refSort_drop name = [sprintf "DROP TABLE %s;" name]
53
54 let sprintf_refRel_drop name = [sprintf "DROP TABLE %s;" name]
55
56 let sprintf_objectName_drop name = [sprintf "DROP TABLE %s;" name]
57
58 let sprintf_owners_drop name = [sprintf "DROP TABLE %s;" name]
59
60 let sprintf_count_drop name = [sprintf "DROP TABLE %s;" name]
61
62 (* INDEXES *)
63
64 let sprintf_refObj_index name = [
65 sprintf "CREATE INDEX %s_source ON %s (source);" name name ;
66 sprintf "CREATE INDEX %s_target ON %s (h_occurrence);" name name ;
67 sprintf "CREATE INDEX %s_position ON %s (h_position);" name name ]
68
69 let sprintf_refSort_index name = [sprintf "
70 CREATE INDEX %s_source ON %s (source);
71 " name name]
72
73 let sprintf_objectName_index name = [
74 sprintf " CREATE INDEX %s_value ON %s (value);" name name]
75
76 let sprintf_owners_index name = [
77 sprintf "CREATE INDEX %s_owner ON %s (owner);" name name ;
78 sprintf "CREATE INDEX %s_source ON %s (source);" name name] 
79
80 let sprintf_count_index name = [
81 sprintf "CREATE INDEX %s_source ON %s (source);" name name;
82 sprintf "CREATE INDEX %s_conclusion ON %s (conclusion);" name name;
83 sprintf "CREATE INDEX %s_hypothesis ON %s (hypothesis);" name name;
84 sprintf "CREATE INDEX %s_statement ON %s (statement);" name name]
85  
86 let sprintf_refRel_index name = [
87 sprintf "CREATE INDEX %s_source ON %s (source);" name name
88 ]
89
90 let sprintf_refObj_index_drop name = [
91 sprintf "DROP INDEX %s_source ON %s;" name name ;
92 sprintf "DROP INDEX %s_target ON %s;" name name ;
93 sprintf "DROP INDEX %s_position ON %s;" name name ]
94
95 let sprintf_refSort_index_drop name = [
96 sprintf "DROP INDEX %s_source ON %s;" name name
97 ]
98
99 let sprintf_objectName_index_drop name = [
100 sprintf " DROP INDEX %s_value ON %s;" name name]
101
102 let sprintf_owners_index_drop name = [
103 sprintf "DROP INDEX %s_owner ON %s;" name name ;
104 sprintf "DROP INDEX %s_source ON %s;" name name] 
105
106 let sprintf_count_index_drop name = [
107 sprintf "DROP INDEX %s_source ON %s;" name name;
108 sprintf "DROP INDEX %s_conclusion ON %s;" name name;
109 sprintf "DROP INDEX %s_hypothesis ON %s;" name name;
110 sprintf "DROP INDEX %s_statement ON %s;" name name]
111  
112 let sprintf_refRel_index_drop name = []
113
114 let sprintf_rename_table oldname newname = [
115 sprintf "RENAME TABLE %s TO %s;" oldname newname 
116 ]
117           
118
119 (* FUNCTIONS *)
120
121 let get_table_format t named =
122   match t with
123   | `RefObj -> sprintf_refObj_format named
124   | `RefSort -> sprintf_refSort_format named
125   | `RefRel -> sprintf_refRel_format named
126   | `ObjectName -> sprintf_objectName_format named
127   | `Owners -> sprintf_owners_format named
128   | `Count -> sprintf_count_format named
129
130 let get_index_format t named =
131   match t with
132   | `RefObj -> sprintf_refObj_index named
133   | `RefSort -> sprintf_refSort_index named
134   | `RefRel -> sprintf_refRel_index named
135   | `ObjectName -> sprintf_objectName_index named
136   | `Owners -> sprintf_owners_index named
137   | `Count -> sprintf_count_index named
138
139 let get_table_drop t named =
140   match t with
141   | `RefObj -> sprintf_refObj_drop named
142   | `RefSort -> sprintf_refSort_drop named
143   | `RefRel -> sprintf_refRel_drop named
144   | `ObjectName -> sprintf_objectName_drop named
145   | `Owners -> sprintf_owners_drop named
146   | `Count -> sprintf_count_drop named
147
148 let get_index_drop t named =
149   match t with
150   | `RefObj -> sprintf_refObj_index_drop named
151   | `RefSort -> sprintf_refSort_index_drop named
152   | `RefRel -> sprintf_refRel_index_drop named
153   | `ObjectName -> sprintf_objectName_index_drop named
154   | `Owners -> sprintf_owners_index_drop named
155   | `Count -> sprintf_count_index_drop named
156
157 let create_tables l =
158   List.fold_left (fun s (name,table) ->  s @ get_table_format table name) [] l
159
160 let create_indexes l =
161   List.fold_left (fun s (name,table) ->  s @ get_index_format table name) [] l
162  
163 let drop_tables l =
164   List.fold_left (fun s (name,table) ->  s @ get_table_drop table name) [] l
165   
166 let drop_indexes l =
167   List.fold_left (fun s (name,table) ->  s @ get_index_drop table name) [] l
168
169 let rename_tables l = 
170   List.fold_left (fun s (o,n) ->  s @ sprintf_rename_table o n) [] l
171