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 ;
 |