+
+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
+