;;;;
;;;; Name: postgresql.cl
;;;; Purpose: Low-level PostgreSQL interface using UFFI
-;;;; Programmers: Kevin M. Rosenberg based on
-;;;; Original code by Pierre R. Mai
+;;;; Programmers: Kevin M. Rosenberg based on
+;;;; Original code by Pierre R. Mai
;;;; Date Started: Feb 2002
;;;;
-;;;; $Id$
-;;;;
;;;; This file, part of CLSQL, is Copyright (c) 2002 by Kevin M. Rosenberg
;;;; and Copyright (c) 1999-2001 by Pierre R. Mai
;;;;
;;;; (http://opensource.franz.com/preamble.html), also known as the LLGPL.
;;;; *************************************************************************
-(in-package #:postgresql)
+(in-package #:pgsql)
;;;; This file implements as little of the FFI bindings to the
(uffi:def-foreign-type pgsql-oid :unsigned-int)
-(uffi:def-enum pgsql-conn-status-type
+(uffi:def-enum pgsql-conn-status-type
(:connection-ok
:connection-bad))
(:int8 20)
(:float4 700)
(:float8 701)))
-
+
;;(declaim (inline PQsetdbLogin)) ;; causes compile error in LW 4.2.0
(uffi:def-function ("PQsetdbLogin" PQsetdbLogin)
((pghost :cstring)
:module "postgresql"
:returning pgsql-exec-status-type)
+; From postgres_ext.h
+
+; #define PG_DIAG_SEVERITY 'S'
+; #define PG_DIAG_SQLSTATE 'C'
+; #define PG_DIAG_MESSAGE_PRIMARY 'M'
+; #define PG_DIAG_MESSAGE_DETAIL 'D'
+; #define PG_DIAG_MESSAGE_HINT 'H'
+; #define PG_DIAG_STATEMENT_POSITION 'P'
+; #define PG_DIAG_INTERNAL_POSITION 'p'
+; #define PG_DIAG_INTERNAL_QUERY 'q'
+; #define PG_DIAG_CONTEXT 'W'
+; #define PG_DIAG_SOURCE_FILE 'F'
+; #define PG_DIAG_SOURCE_LINE 'L'
+; #define PG_DIAG_SOURCE_FUNCTION 'R'
+(defconstant +PG-DIAG-SEVERITY+ (char-code #\S))
+(defconstant +PG-DIAG-SQLSTATE+ (char-code #\C))
+(defconstant +PG-DIAG-MESSAGE-PRIMARY+ (char-code #\M))
+(defconstant +PG-DIAG-MESSAGE-DETAIL+ (char-code #\D))
+(defconstant +PG-DIAG-MESSAGE-HINT+ (char-code #\H))
+(defconstant +PG-DIAG-STATEMENT-POSITION+ (char-code #\P))
+(defconstant +PG-DIAG-INTERNAL-POSITION+ (char-code #\p))
+(defconstant +PG-DIAG-INTERNAL-QUERY+ (char-code #\q))
+(defconstant +PG-DIAG-CONTEXT+ (char-code #\W))
+(defconstant +PG-DIAG-SOURCE-FILE+ (char-code #\F))
+(defconstant +PG-DIAG-SOURCE-LINE+ (char-code #\L))
+(defconstant +PG-DIAG-SOURCE-FUNCTION+ (char-code #\R))
+
+; PQresultErrorField can return diagnostic information about an error
+(declaim (inline PQresultErrorField))
+(uffi:def-function ("PQresultErrorField" PQresultErrorField)
+ ((res pgsql-result)
+ (field-code :int))
+ :module "postgresql"
+ :returning :cstring)
+
(declaim (inline PQresultErrorMessage))
(uffi:def-function ("PQresultErrorMessage" PQresultErrorMessage)
((res pgsql-result))
:returning :cstring)
(declaim (inline PQntuples))
-(uffi:def-function ("PQntuples" PQntuples)
+(uffi:def-function ("PQntuples" PQntuples)
((res pgsql-result))
:module "postgresql"
:returning :int)