Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Page
Library
Module
Module type
Parameter
Class
Class type
Source
PGOCaml
Sourceinclude PGOCaml_generic.PGOCAML_GENERIC with type 'a monad = 'a
Database handle.
For library errors.
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
type connection_desc = {
user : string;
port : int;
password : string;
host : [ `Hostname of string | `Unix_domain_socket_dir of string ];
database : string;
}
val 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.
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.
val 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.
Close the database handle.
You must call this after you have finished with the handle, or else you will get leaked file descriptors.
Ping the database.
If the database is not available, some sort of exception will be thrown.
This function is a wrapper of ping
that returns a boolean instead of raising an exception.
val begin_work :
?isolation:isolation ->
?access:access ->
?deferrable:bool ->
'a t ->
unit monad
Start a transaction.
val 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.
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.
As serial
but assumes that the column is a SERIAL or SERIAL4 type.
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.
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.
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.
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.
When using pa_pgsql, database handles have type PGOCaml.pa_pg_data PGOCaml.t
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.
val 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.
close_statement conn ?name ()
closes a prepared statement and frees up any resources.
close_portal conn ?portal ()
closes a portal and frees up any resources.
inject conn ?name query
executes the statement query
and optionally names it name
and gives the result.
alter conn ?name query
executes the statement query
and optionally names it name
. Same as inject but ignoring the result.
val pp_result_description :
Ppx_deriving_runtime.Format.formatter ->
result_description ->
Ppx_deriving_runtime.unit
val pp_row_description :
Ppx_deriving_runtime.Format.formatter ->
row_description ->
Ppx_deriving_runtime.unit
val 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.
describe_portal conn ?portal ()
describes the named or unnamed portal's result types.
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"
.
The following conversion functions are used by pa_pgsql to convert values in and out of the database.
val find_custom_typconvs :
?typnam:string ->
?lookin:string ->
?colnam:string ->
?argnam:string ->
unit ->
((string * string) option, string) Rresult.result