47 lines
1.5 KiB
Factor
47 lines
1.5 KiB
Factor
! Copyright (C) 2008 Doug Coleman.
|
|
! See http://factorcode.org/license.txt for BSD license.
|
|
USING: arrays continuations db io kernel math namespaces
|
|
quotations sequences db.postgresql.ffi alien alien.c-types
|
|
db.types ;
|
|
IN: db.postgresql.lib
|
|
|
|
: postgresql-result-error-message ( res -- str/f )
|
|
dup zero? [
|
|
drop f
|
|
] [
|
|
PQresultErrorMessage [ CHAR: \n = ] right-trim
|
|
] if ;
|
|
|
|
: postgres-result-error ( res -- )
|
|
postgresql-result-error-message [ throw ] when* ;
|
|
|
|
: postgresql-error-message ( -- str )
|
|
db get db-handle PQerrorMessage [ CHAR: \n = ] right-trim ;
|
|
|
|
: postgresql-error ( res -- res )
|
|
dup [ postgresql-error-message throw ] unless ;
|
|
|
|
: postgresql-result-ok? ( n -- ? )
|
|
PQresultStatus
|
|
PGRES_COMMAND_OK PGRES_TUPLES_OK 2array member? ;
|
|
|
|
: connect-postgres ( host port pgopts pgtty db user pass -- conn )
|
|
PQsetdbLogin
|
|
dup PQstatus zero? [ postgresql-error-message throw ] unless ;
|
|
|
|
: do-postgresql-statement ( statement -- res )
|
|
db get db-handle swap statement-sql PQexec dup postgresql-result-ok? [
|
|
dup postgresql-result-error-message swap PQclear throw
|
|
] unless ;
|
|
|
|
: do-postgresql-bound-statement ( statement -- res )
|
|
>r db get db-handle r>
|
|
[ statement-sql ] keep
|
|
[ statement-params length f ] keep
|
|
statement-params
|
|
[ first number>string* malloc-char-string ] map >c-void*-array
|
|
f f 0 PQexecParams
|
|
dup postgresql-result-ok? [
|
|
dup postgresql-result-error-message swap PQclear throw
|
|
] unless ;
|