package pgocaml

  1. Overview
  2. Docs

Module PGOCamlSource

Sourcemodule Simple_thread : PGOCaml_generic.THREAD with type 'a t = 'a
include PGOCaml_generic.PGOCAML_GENERIC with type 'a monad = 'a
Sourcetype 'a t

Database handle.

Sourcetype 'a monad = 'a
Sourcetype isolation = [
  1. | `Serializable
  2. | `Repeatable_read
  3. | `Read_committed
  4. | `Read_uncommitted
]
Sourcetype access = [
  1. | `Read_write
  2. | `Read_only
]
Sourceexception Error of string

For library errors.

Sourceexception PostgreSQL_Error of string * (char * string) list

For errors generated by the PostgreSQL database back-end. The first argument is a printable error message. The second argument is the complete set of error fields returned from the back-end.

See http://www.postgresql.org/docs/8.1/static/protocol-error-fields.html

Connection management
Sourcetype connection_desc = {
  1. user : string;
  2. port : int;
  3. password : string;
  4. host : [ `Hostname of string | `Unix_domain_socket_dir of string ];
  5. database : string;
}
Sourceval describe_connection : ?host:string -> ?port:int -> ?user:string -> ?password:string -> ?database:string -> ?unix_domain_socket_dir:string -> unit -> connection_desc

Produce the actual, concrete connection parameters based on the values and * availability of the various configuration variables.

Sourceval connection_desc_to_string : connection_desc -> string

Produce a human-readable textual representation of a concrete connection * descriptor (the password is NOT included in the output of this function) * for logging and error reporting purposes.

Sourceval connect : ?host:string -> ?port:int -> ?user:string -> ?password:string -> ?database:string -> ?unix_domain_socket_dir:string -> ?desc:connection_desc -> unit -> 'a t monad

Connect to the database.

The normal $PGDATABASE, etc. environment variables are available.

Sourceval close : 'a t -> unit monad

Close the database handle.

You must call this after you have finished with the handle, or else you will get leaked file descriptors.

Sourceval ping : 'a t -> unit monad

Ping the database.

If the database is not available, some sort of exception will be thrown.

Sourceval alive : 'a t -> bool monad

This function is a wrapper of ping that returns a boolean instead of raising an exception.

Transactions
Sourceval begin_work : ?isolation:isolation -> ?access:access -> ?deferrable:bool -> 'a t -> unit monad

Start a transaction.

Sourceval commit : 'a t -> unit monad

Perform a COMMIT operation on the database.

Sourceval rollback : 'a t -> unit monad

Perform a ROLLBACK operation on the database.

Sourceval transact : 'a t -> ?isolation:isolation -> ?access:access -> ?deferrable:bool -> ('a t -> 'b monad) -> 'b monad

transact db ?isolation ?access ?deferrable f wraps your function f inside a transactional block. First it calls begin_work with isolation, access and deferrable, then calls f and do rollback if f raises an exception, commit otherwise.

Serial column
Sourceval serial : 'a t -> string -> int64 monad

This is a shorthand for SELECT CURRVAL(serial).

For a table called table with serial column id you would typically call this as serial dbh "table_id_seq" after the previous INSERT operation to get the serial number of the inserted row.

Sourceval serial4 : 'a t -> string -> int32 monad

As serial but assumes that the column is a SERIAL or SERIAL4 type.

Sourceval serial8 : 'a t -> string -> int64 monad

Same as serial.

Miscellaneous
Sourceval max_message_length : int ref

Maximum message length accepted from the back-end.

The default is Sys.max_string_length, which means that we will try to read as much data from the back-end as we can, and this may cause us to run out of memory (particularly on 64 bit machines), causing a possible denial of service.

You may want to set this to a smaller size to avoid this happening.

Sourceval verbose : int ref

Verbosity.

0 means don't print anything. 1 means print short error messages as returned from the back-end. 2 means print all messages as returned from the back-end.

Messages are printed on stderr. Default verbosity level is 1.

Sourceval set_private_data : 'a t -> 'a -> unit

Attach some private data to the database handle.

NB. The pa_pgsql camlp4 extension uses this for its own purposes, which means that in most programs you will not be able to attach private data to the database handle.

Sourceval private_data : 'a t -> 'a

Retrieve some private data previously attached to the database handle. If no data has been attached, raises Not_found.

NB. The pa_pgsql camlp4 extension uses this for its own purposes, which means that in most programs you will not be able to attach private data to the database handle.

Sourceval uuid : 'a t -> string

Retrieve the unique identifier for this connection.

Sourcetype pa_pg_data = (string, bool) Hashtbl.t

When using pa_pgsql, database handles have type PGOCaml.pa_pg_data PGOCaml.t

Low level query interface - DO NOT USE DIRECTLY
Sourcetype oid = int32
Sourcetype param = string option
Sourcetype result = string option
Sourcetype row = result list
Sourceval prepare : 'a t -> query:string -> ?name:string -> ?types:oid list -> unit -> unit monad

prepare conn ~query ?name ?types () prepares the statement query and optionally names it name and sets the parameter types to types.

If no name is given, then the "unnamed" statement is overwritten. If no types are given, then the PostgreSQL engine infers types. Synchronously checks for errors.

Sourceval execute_rev : 'a t -> ?name:string -> ?portal:string -> params:param list -> unit -> row list monad
Sourceval execute : 'a t -> ?name:string -> ?portal:string -> params:param list -> unit -> row list monad

execute conn ?name ~params () executes the named or unnamed statement name, with the given parameters params, returning the result rows (if any).

There are several steps involved at the protocol layer:

(1) a "portal" is created from the statement, binding the parameters in the statement (Bind).

(2) the portal is executed (Execute).

(3) we synchronise the connection (Sync).

The optional ?portal parameter may be used to name the portal created in step (1) above (otherwise the unnamed portal is used). This is only important if you want to call describe_portal to find out the result types.

Sourceval cursor : 'a t -> ?name:string -> ?portal:string -> params:param list -> (row -> unit monad) -> unit monad
Sourceval close_statement : 'a t -> ?name:string -> unit -> unit monad

close_statement conn ?name () closes a prepared statement and frees up any resources.

Sourceval close_portal : 'a t -> ?portal:string -> unit -> unit monad

close_portal conn ?portal () closes a portal and frees up any resources.

Sourceval inject : 'a t -> ?name:string -> string -> row list monad

inject conn ?name query executes the statement query and optionally names it name and gives the result.

Sourceval alter : 'a t -> ?name:string -> string -> unit monad

alter conn ?name query executes the statement query and optionally names it name. Same as inject but ignoring the result.

Sourcetype result_description = {
  1. name : string;
    (*

    Field name.

    *)
  2. table : oid option;
    (*

    OID of table.

    *)
  3. column : int option;
    (*

    Column number of field in table.

    *)
  4. field_type : oid;
    (*

    The type of the field.

    *)
  5. length : int;
    (*

    Length of the field.

    *)
  6. modifier : int32;
    (*

    Type modifier.

    *)
}
Sourceval show_result_description : result_description -> Ppx_deriving_runtime.string
Sourcetype row_description = result_description list
Sourcetype params_description = param_description list
Sourceand param_description = {
  1. param_type : oid;
    (*

    The type of the parameter.

    *)
}
Sourceval describe_statement : 'a t -> ?name:string -> unit -> (params_description * row_description option) monad

describe_statement conn ?name () describes the named or unnamed statement's parameter types and result types.

Sourceval describe_portal : 'a t -> ?portal:string -> unit -> row_description option monad

describe_portal conn ?portal () describes the named or unnamed portal's result types.

Low level type conversion functions - DO NOT USE DIRECTLY
Sourceval name_of_type : oid -> string

Returns the OCaml equivalent type name to the PostgreSQL type oid.

For instance, name_of_type (Int32.of_int 23) returns "int32" because the OID for PostgreSQL's internal int4 type is 23.

As another example, name_of_type (Int32.of_int 25) returns "string".

Sourcetype inet = Unix.inet_addr * int
Sourcetype int16 = int
Sourcetype bytea = string
Sourcetype point = float * float
Sourcetype hstore = (string * string option) list
Sourcetype numeric = string
Sourcetype uuid = string
Sourcetype jsonb = string
Sourcetype bool_array = bool option list
Sourcetype int16_array = int16 option list
Sourcetype int32_array = int32 option list
Sourcetype int64_array = int64 option list
Sourcetype string_array = string option list
Sourcetype float_array = float option list
Sourcetype timestamp_array = CalendarLib.Calendar.t option list
Sourcetype uuid_array = string option list

The following conversion functions are used by pa_pgsql to convert values in and out of the database.

Sourceval string_of_oid : oid -> string
Sourceval string_of_bool : bool -> string
Sourceval string_of_int : int -> string
Sourceval string_of_int16 : int16 -> string
Sourceval string_of_int32 : int32 -> string
Sourceval string_of_int64 : int64 -> string
Sourceval string_of_float : float -> string
Sourceval string_of_point : point -> string
Sourceval string_of_hstore : hstore -> string
Sourceval string_of_numeric : numeric -> string
Sourceval string_of_uuid : uuid -> string
Sourceval string_of_jsonb : jsonb -> string
Sourceval string_of_inet : inet -> string
Sourceval string_of_timestamp : CalendarLib.Calendar.t -> string
Sourceval string_of_timestamptz : timestamptz -> string
Sourceval string_of_date : CalendarLib.Date.t -> string
Sourceval string_of_time : CalendarLib.Time.t -> string
Sourceval string_of_interval : CalendarLib.Calendar.Period.t -> string
Sourceval string_of_bytea : bytea -> string
Sourceval string_of_string : string -> string
Sourceval string_of_unit : unit -> string
Sourceval string_of_bool_array : bool_array -> string
Sourceval string_of_int16_array : int16_array -> string
Sourceval string_of_int32_array : int32_array -> string
Sourceval string_of_int64_array : int64_array -> string
Sourceval string_of_string_array : string_array -> string
Sourceval string_of_bytea_array : string_array -> string
Sourceval string_of_float_array : float_array -> string
Sourceval string_of_timestamp_array : timestamp_array -> string
Sourceval string_of_arbitrary_array : ('a -> string) -> 'a option list -> string
Sourceval string_of_uuid_array : uuid_array -> string
Sourceval comment_src_loc : unit -> bool
Sourceval find_custom_typconvs : ?typnam:string -> ?lookin:string -> ?colnam:string -> ?argnam:string -> unit -> ((string * string) option, string) Rresult.result
Sourceval oid_of_string : string -> oid
Sourceval bool_of_string : string -> bool
Sourceval int_of_string : string -> int
Sourceval int16_of_string : string -> int16
Sourceval int32_of_string : string -> int32
Sourceval int64_of_string : string -> int64
Sourceval float_of_string : string -> float
Sourceval point_of_string : string -> point
Sourceval hstore_of_string : string -> hstore
Sourceval numeric_of_string : string -> numeric
Sourceval uuid_of_string : string -> uuid
Sourceval jsonb_of_string : string -> jsonb
Sourceval inet_of_string : string -> inet
Sourceval timestamp_of_string : string -> CalendarLib.Calendar.t
Sourceval timestamptz_of_string : string -> timestamptz
Sourceval date_of_string : string -> CalendarLib.Date.t
Sourceval time_of_string : string -> CalendarLib.Time.t
Sourceval interval_of_string : string -> CalendarLib.Calendar.Period.t
Sourceval bytea_of_string : string -> bytea
Sourceval unit_of_string : string -> unit
Sourceval bool_array_of_string : string -> bool_array
Sourceval int16_array_of_string : string -> int16_array
Sourceval int32_array_of_string : string -> int32_array
Sourceval int64_array_of_string : string -> int64_array
Sourceval string_array_of_string : string -> string_array
Sourceval float_array_of_string : string -> float_array
Sourceval timestamp_array_of_string : string -> timestamp_array
Sourceval arbitrary_array_of_string : (string -> 'a) -> string -> 'a option list
Sourceval bind : 'a monad -> ('a -> 'b monad) -> 'b monad
Sourceval return : 'a -> 'a monad
OCaml

Innovation. Community. Security.