Plasma GitLab Archive
Projects Blog Knowledge

(*
  Copyright 2010 Gerd Stolpmann

  This file is part of Plasma, a distributed filesystem and a
  map/reduce computation framework. Unless you have a written license
  agreement with the copyright holder (Gerd Stolpmann), the following
  terms apply:

  Plasma is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.

  Plasma is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with Foobar.  If not, see <http://www.gnu.org/licenses/>.

*)
(* $Id: pfs_db.mli 239 2010-06-23 16:49:03Z gerd $ *)

(** Utility functions for database accesses *)

class type db_config =
object
  method db_host : string option
  method db_hostaddr : string option
  method db_port : string option
  method db_dbname : string option
  method db_user : string option
  method db_password : string option
  method db_ro_connections_max : int
end

val extract_db_config : Netplex_types.config_file -> db_config
  (** Extracts the [db_config] from this Netplex config file:

      {[
         netplex {
           ...
           database {
             dbname = "<name of database>";  (* required *)
             host = "<hostname>";
             hostaddr = "<ipaddr>";
             port = <port>;
             user = "<user name>";
             password = "<password>";
             ro_connections_max = <c>;
           };
           ...
         }
      ]}

      See the documentation of PostgreSQL for [dbname], [host], [hostaddr],
      [port], [user], and [password] (but it should be obvious).

      [ro_connections_max] is the number of db connections dedicated for
      read-only database accesses. Defaults to 20.
   *)


class type ['mode] async_connection =
object
  inherit Postgresql.connection

  method continue_with : (bool -> unit) -> unit
    (** [continue_with f]: Set [f] as the continuation. If the connection
        is non-busy [f] is executed immediately. Otherwise it is pushed
        onto the queue of delayed continuations. The argument of [f] is
        [true] if the previous statement was successful.
     *)

  method next : bool -> unit
    (** If there is a delayed continuation execute it now *)

  method idle : bool
    (** whether nothing is being executed *)
end


type read_write = [`R|`W]
    (** the [mode] that is conventionally used for read-write connections *)

type read_only = [`R]
    (** the [mode] that is conventionally used for read-only connections *)

type rw_async_connection = read_write async_connection
    (** abbrev *)

type ro_async_connection = read_only async_connection
    (** abbrev *)



class ['mode] connect : db_config -> ['mode] async_connection
  (** Right now, we only have a sync connect *)

class async_exec : 'mode async_connection ->
                   Unixqueue.event_system ->
                   ?expect : Postgresql.result_status list -> 
                   ?params : string array ->
                   ?binary_params : bool array -> 
                   ?copy_in_lines : string list ->
                   string ->
                     [Postgresql.result] Uq_engines.engine
  (** Execution as an engine.

      The query is sent immediately. The response is awaited in an
      asynchronous way. When it is complete, the engine transitions
      to state [`Done r] where [r] is the result. In case of an error,
      the engine transitions to [`Error e] where [e] is the exception.

      [copy_in_lines] is for "COPY IN" statements.

      An [abort] invocation cancels the current query.
   *)


This web site is published by Informatikbüro Gerd Stolpmann
Powered by Caml