]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/ocaml/metadata/sqlStatements.ml
added sqlStatements module (contains all CREATE TABLE/INDEX)
[helm.git] / helm / ocaml / metadata / sqlStatements.ml
diff --git a/helm/ocaml/metadata/sqlStatements.ml b/helm/ocaml/metadata/sqlStatements.ml
new file mode 100644 (file)
index 0000000..b57c661
--- /dev/null
@@ -0,0 +1,105 @@
+
+open Printf;;
+type tbl = [ `RefObj| `RefSort| `RefRel| `ObjectName| `Owners| `Count]
+
+(* TABLES *)
+
+let sprintf_refObj_format name = sprintf "
+CREATE TABLE %s (
+    source varchar(255) binary not null,
+    h_occurrence varchar(255) binary not null,
+    h_position varchar(255) binary not null,
+    h_depth integer
+);" name
+
+let sprintf_refSort_format name = sprintf "
+CREATE TABLE %s (
+    source varchar(255) binary not null,
+    h_position varchar(255) binary not null,
+    h_depth integer not null,
+    h_sort varchar(255) binary not null
+);" name
+
+let sprintf_refRel_format name = sprintf "
+CREATE TABLE %s (
+    source varchar(255) binary not null,
+    h_position varchar(255) binary not null,
+    h_depth integer not null
+);" name
+
+let sprintf_objectName_format name = sprintf "
+CREATE TABLE %s (
+    source varchar(255) binary not null,
+    value varchar(255) binary not null
+);" name
+
+let sprintf_owners_format name = sprintf "
+CREATE TABLE %s (
+    source varchar(255) binary not null,
+    owner varchar(255) binary not null
+);" name
+
+let sprintf_count_format name = sprintf "
+CREATE TABLE %s (
+    source varchar(255) binary unique not null,
+    conclusion smallint(6) not null,
+    hypothesis smallint(6) not null,
+    statement smallint(6) not null
+);" name
+
+(* INDEXES *)
+
+let sprintf_refObj_index name = sprintf "
+CREATE INDEX %s_source ON %s (source);
+CREATE INDEX %s_target ON %s (h_occurrence);
+CREATE INDEX %s_position ON %s (h_position);
+" name name name name name name 
+
+let sprintf_refSort_index name = sprintf "
+CREATE INDEX %s_source ON %s (source);
+" name name
+
+let sprintf_objectName_index name = sprintf "
+CREATE INDEX %s_value ON %s (value);
+" name name
+
+let sprintf_owners_index name = sprintf "
+CREATE INDEX %s_owner ON %s (owner);
+CREATE INDEX %s_source ON %s (source);
+" name name name name 
+
+let sprintf_count_index name = sprintf "
+CREATE INDEX %s_source ON %s (source);
+CREATE INDEX %s_conclusion ON %s (conclusion);
+CREATE INDEX %s_hypothesis ON %s (hypothesis);
+CREATE INDEX %s_statement ON %s (statement);
+" name name name name name name name name 
+
+let sprintf_refRel_index name = ""
+
+(* FUNCTIONS *)
+
+let get_table_format t named =
+  match t with
+  | `RefObj -> sprintf_refObj_format named
+  | `RefSort -> sprintf_refSort_format named
+  | `RefRel -> sprintf_refRel_format named
+  | `ObjectName -> sprintf_objectName_format named
+  | `Owners -> sprintf_owners_format named
+  | `Count -> sprintf_count_format named
+
+let get_index_format t named =
+  match t with
+  | `RefObj -> sprintf_refObj_index named
+  | `RefSort -> sprintf_refSort_index named
+  | `RefRel -> sprintf_refRel_index named
+  | `ObjectName -> sprintf_objectName_index named
+  | `Owners -> sprintf_owners_index named
+  | `Count -> sprintf_count_index named
+  
+let create_tables l =
+  List.fold_left (fun s (name,table) ->  s ^ get_table_format table name) "" l
+
+let create_indexes l =
+  List.fold_left (fun s (name,table) ->  s ^ get_index_format table name) "" l
+