(* AUTOR: Ferruccio Guidi <fguidi@cs.unibo.it>
*)
+type connection = MySQL_C of Mysql.dbd
+ | Postgres_C of Postgres.connection
+ | No_C
+
type flag = Galax | Postgres | Queries | Result | Source | Times | Warn
type handle = {
- log : string -> unit; (* logging function *)
- set : flag list; (* options *)
- pgc : MQIDataBase.connection option; (* PG connection *)
- pgm : MQIMap.pg_map; (* PG conversion function *)
- pga : MQIMap.pg_alias (* PG table aliases *)
+ log : string -> unit; (* logging function *)
+ set : flag list; (* options *)
+ pgc : connection; (* PG connection *)
+ pgm : MQIMap.pg_map; (* PG conversion function *)
+ pga : MQIMap.pg_alias (* PG table aliases *)
}
let tables handle p = MQIMap.get_tables handle.pgm p
| Galax -> "G"
| Postgres -> "P"
| Queries -> "Q"
- | Result -> "R"
+ | Result -> "R"
| Source -> "S"
| Times -> "T"
| Warn -> "W"
in g ()
in
{log = log; set = flags;
- pgc =
- if List.mem Galax flags then
- None
- else
- MQIDataBase.init
- (Helm_registry.get "mathql_interpreter.postgresql_connection_string");
+ pgc = begin
+ try
+ if List.mem Galax flags then No_C else
+ if List.mem Postgres flags then Postgres_C (MQIPostgres.init ()) else
+ MySQL_C (MQIMySql.init ())
+ with Failure "mqi_connection" -> No_C
+ end;
pgm = m; pga = a
}
let close handle =
- if set handle Galax then () else MQIDataBase.close handle.pgc
+ match pgc handle with
+ | MySQL_C c -> MQIMySql.close c
+ | Postgres_C c -> MQIPostgres.close c
+ | No_C -> ()
+
+let exec handle out table cols ct cfl =
+ match pgc handle with
+ | MySQL_C c -> MQIMySql.exec (c, out) table cols ct cfl
+ | Postgres_C c -> MQIPostgres.exec (c, out) table cols ct cfl
+ | No_C -> []
let connected handle =
- if set handle Galax then false else (pgc handle) <> None
+ pgc handle <> No_C
let init_if_connected ?(flags = []) ?(log = ignore) () =
let handle = init ~flags:flags ~log:log () in
- ignore (pgc handle); handle
+ if connected handle then handle else raise (Failure "mqi connection failed")