PostgreSQL binding for R7RS Scheme.
OTHER License
This is a PostgreSQL socket frontend interface library written in pure R7RS Scheme.
NOTE: it's still working state.
This library should work in R7RS implementations which support the following SRFIs:
(rnrs)
(postgresql)
The library provides high level APIs to communicate(postgresql-connection? obj)
Returns #t
if obj is an PostgreSQL connection object.
(make-postgresql-connection host port database username password)
database
can be #f
.
All arguments must be a string except database
. Creates a
PostgreSQL connection. At this moment, the connection to the server
is not established.
(postgresql-open-connection! conn)
Establishes a connection with specified conn object.
(postgresql-login! conn)
Logging in to the PostgreSQL server.
(postgresql-terminate! conn)
Terminates the session and disconnects from the server.
(postgresql-prepared-statement? obj)
Return #t
if obj is a PostgreSQL prepared statement.
(postgresql-prepared-statement conn sql)
Creates a prepared statement object.
(postgresql-close-prepared-statement! prepared-statement)
Closes the prepared statement prepared-statement.
(postgresql-bind-parameters! prepared-statement . params)
Binds parameter params to given prepared-statement.
(postgresql-execute! prepared-statement)
Executes the given prepared-statement and returns either PostgreSQL query object for SELECT statement or affected row count.
To retrieve the result, use the postgresql-fetch-query!
procedure.
(postgresql-query? obj)
Returns #t
if obj is a PostgreSQL query object.
(postgresql-execute-sql! conn sql)
Executes the given sql statement. If sql is a select statement
then the value returned is a PostgreSQL query object. Otherwise
#t
. This procedure retrieves all results in one go if sql is a
SELECT statement. So it may cause memory explosion if the result set
is too big.
(postgresql-fetch-query! query)
Fetch a row as a vector. If no more data are available, then returns
#f
.
(postgresql-start-transaction! conn mode)
Issue START TRANSACTION
statement to start a transaction. mode
specifies how the transation should be.
The argument mode must be either a PostgreSQL transaction mode
object or #f
.
(postgresql-transaction-mode alist)
Creates a PostgreSQL transaction mode object. The alist specifies how the transaction mode is created. It may have the following symbols as its key.
isolation-level
access-mode
deferrable
Each key must have one of the followings:
For isolation-level
:
postgresql-isolation-level-serializable
postgresql-isolation-level-repeatable-read
postgresql-isolation-level-read-committed
postgresql-isolation-level-read-uncommitted
For access-mode
:
postgresql-access-mode-read-write
postgresql-access-mode-read-only
For deferrable
:
postgresql-deferrable-on
postgresql-deferrable-off
(postgresql-commit! conn)
Issue COMMIT
statement.
(postgresql-rollback! conn)
Issue ROLLBACK
statement.
*postgresql-maximum-results*
Configuration parameter for how many result it should fetch. Default value is 50.
*postgresql-copy-data-handler*
Handler of COPY to stdout command. The value must be a procedure and takes 2 arguments, data type and data. The data type should be one of the the following symbols:
When the data type is header
then the given data is a list of data
information. It contains 3 elements, the format of overall COPY
command, 0 is textual, 1 is binary.
When the data type is data
then the given data is a bytevector
whose content is the result of COPY command.
When the data type is complete
then the given data is #f
. This
indicates the COPY command is done.
*postgresql-write-data-handler*
Handler of COPY from stdin command. The value must be a procedure and take 2 arguments, data type and data. The data type could be one of the following symbols;
When the data type is header
then the given data is a list of data
information. It contains 3 elements, the format of overall COPY
command, 0 is textual, 1 is binary.
When the data type is data
then the given data is a #f
. When
there is no more data to send, then the handler must return #f
otherwise it would go into inifinite loop.
When the data type is complete
then the given data is #t
. This
indicates the COPY command is done.
These handlers are currently a thin wrapper of the COPY command. Using them, users need to know about how the data is sent. For more detail, please refer the PostgreSQL manual.
*postgresql-unknown-type-handler*
Handler of unknown type, which is the library default couldn't
handle converting the value according to the type identifier. The
value must be aprocedure and take 2 arguments; type and
value. The type is an integer which represents PostgreSQL
internal type defined in catalog/pg_type.h
header file of
PostgreSQL source. The value is a raw value of SQL query,
bytevector.
TBD
Data conversion is done automatically by high level APIs. The following table describes how it's done.
PostgreSQL type | Scheme type |
---|---|
Integers | Number |
Float | Inexact number |
Characters | String |
Date | SRFI-19 date |
Time | SRFI-19 date |
Timestamp | SRFI-19 time |
UUID | String |
Note: If the implementation doesn't support SRFI-19, the scheme type will be string.
Copyright 2014-2015 Takashi Kato. Code released under the BSD-style license. See COPYING.