;;;; Original code by Pierre R. Mai
;;;; Date Started: Feb 2002
;;;;
-;;;; $Id: postgresql-sql.cl,v 1.14 2002/04/23 18:28:02 kevin Exp $
+;;;; $Id: postgresql-sql.cl,v 1.18 2002/05/27 17:19:30 kevin Exp $
;;;;
;;;; This file, part of CLSQL, is Copyright (c) 2002 by Kevin M. Rosenberg
;;;; and Copyright (c) 1999-2001 by Pierre R. Mai
(in-package :cl-user)
(defpackage :clsql-postgresql
- (:use :common-lisp :clsql-sys :postgresql :clsql-uffi)
+ (:use :common-lisp :clsql-base-sys :postgresql :clsql-uffi)
(:export #:postgresql-database)
(:documentation "This is the CLSQL interface to PostgreSQL."))
((conn-ptr :accessor database-conn-ptr :initarg :conn-ptr
:type pgsql-conn-def)))
+(defmethod database-type ((database postgresql-database))
+ :postgresql)
+
(defmethod database-name-from-spec (connection-spec (database-type
(eql :postgresql)))
(check-connection-spec connection-spec database-type
(make-instance 'postgresql-database
:name (database-name-from-spec connection-spec
database-type)
+ :connection-spec connection-spec
:conn-ptr connection)))))
(lo-create (database-conn-ptr database)
(logior postgresql::+INV_WRITE+ postgresql::+INV_READ+)))
-;; (MB)the begin/commit/rollback stuff will be removed when with-transaction wil be implemented
-(defmethod database-write-large-object ( object-id (data string) (database postgresql-database))
+
+#+mb-original
+(defmethod database-write-large-object (object-id (data string) (database postgresql-database))
(let ((ptr (database-conn-ptr database))
(length (length data))
(result nil)
(fd nil))
+ (with-transaction (:database database)
+ (unwind-protect
+ (progn
+ (setf fd (lo-open ptr object-id postgresql::+INV_WRITE+))
+ (when (>= fd 0)
+ (when (= (lo-write ptr fd data length) length)
+ (setf result t))))
+ (progn
+ (when (and fd (>= fd 0))
+ (lo-close ptr fd))
+ )))
+ result))
+
+(defmethod database-write-large-object (object-id (data string) (database postgresql-database))
+ (let ((ptr (database-conn-ptr database))
+ (length (length data))
+ (result nil)
+ (fd nil))
+ (database-execute-command "begin" database)
(unwind-protect
- (progn
- (database-execute-command "begin" database)
- (setf fd (lo-open ptr object-id postgresql::+INV_WRITE+))
- (when (>= fd 0)
- (when (= (lo-write ptr fd data length) length)
- (setf result t))))
+ (progn
+ (setf fd (lo-open ptr object-id postgresql::+INV_WRITE+))
+ (when (>= fd 0)
+ (when (= (lo-write ptr fd data length) length)
+ (setf result t))))
(progn
(when (and fd (>= fd 0))
(lo-close ptr fd))
result))
;; (MB) the begin/commit/rollback stuff will be removed when with-transaction wil be implemented
+;; (KMR) Can't use with-transaction since that function is in high-level code
(defmethod database-read-large-object (object-id (database postgresql-database))
(let ((ptr (database-conn-ptr database))
(buffer nil)
(defmethod database-delete-large-object (object-id (database postgresql-database))
(lo-unlink (database-conn-ptr database) object-id))
+
+(when (clsql-base-sys:database-type-library-loaded :postgresql)
+ (clsql-base-sys:initialize-database-type :database-type :postgresql)
+ (pushnew :postgresql cl:*features*))