[pg-cvs] CVS update: pg/large-object.lisp pg/v2-protocol.lisp pg/v3-protocol.lisp pg/lowlevel.lisp pg/pg.lisp
Eric Marsden
emarsden at common-lisp.net
Sun Jul 17 15:48:08 UTC 2005
Update of /project/pg/cvsroot/pg
In directory common-lisp.net:/tmp/cvs-serv9011
Modified Files:
large-object.lisp v2-protocol.lisp v3-protocol.lisp
lowlevel.lisp pg.lisp
Log Message:
Make PGLO-READ a generic function, with specializations on the v2 and
v3 protocols. The difference is necessary because the v2 protocol
reads large-object data in text, whereas the v3 protocol changed to
use a binary format.
Date: Sun Jul 17 17:48:06 2005
Author: emarsden
Index: pg/large-object.lisp
diff -u pg/large-object.lisp:1.2 pg/large-object.lisp:1.3
--- pg/large-object.lisp:1.2 Fri Aug 13 18:50:37 2004
+++ pg/large-object.lisp Sun Jul 17 17:48:06 2005
@@ -1,6 +1,6 @@
;;; large-object.lisp -- support for BLOBs
;;;
-;;; Author: Eric Marsden <emarsden at laas.fr>
+;;; Author: Eric Marsden <eric.marsden at free.fr>
;;
;;
;; Sir Humphrey: Who is Large and to what does he object?
@@ -81,10 +81,10 @@
(defun pglo-close (connection fd)
(fn connection "lo_close" t fd))
-;; note that the 3rd argument means that we are reading data in binary
-;; format, not text
-(defun pglo-read (connection fd bytes)
- (fn connection "loread" t fd bytes))
+;; pglo-read has moved to v2-protocol.lisp and v3-protocol.lisp
+;;
+;; the difference between the v3 and v2 protocols is that in the former case
+;; data is read in binary format, whereas in the latter data is read as text.
(defun pglo-write (connection fd buf)
(fn connection "lowrite" t fd buf))
Index: pg/v2-protocol.lisp
diff -u pg/v2-protocol.lisp:1.4 pg/v2-protocol.lisp:1.5
--- pg/v2-protocol.lisp:1.4 Thu Apr 1 20:35:19 2004
+++ pg/v2-protocol.lisp Sun Jul 17 17:48:06 2005
@@ -1,6 +1,6 @@
;;; v2-protocol.lisp -- frontend/backend protocol prior to PostgreSQL 7.4
;;;
-;;; Author: Eric Marsden <emarsden at laas.fr>
+;;; Author: Eric Marsden <eric.marsden at free.fr>
(in-package :postgresql)
@@ -197,6 +197,9 @@
((stringp arg)
(send-int connection (length arg) 4)
(send-string connection arg))
+ ((vectorp arg)
+ (send-int connection (length arg) 4)
+ (send-octets connection arg))
(t (error 'protocol-error
:reason (format nil "Unknown fastpath type ~s" arg)))))
(%flush connection)
@@ -293,6 +296,12 @@
(defun handle-notice (connection)
(push (%read-cstring (pgcon-stream connection) +MAX_MESSAGE_LEN+)
(pgcon-notices connection)))
+
+
+;; split out from large-object.lisp
+(defmethod pglo-read ((connection pgcon-v2) fd bytes)
+ (let ((octets (fn connection "loread" nil fd bytes)))
+ (map '(vector (unsigned-byte 8)) #'char-code octets)))
;; EOF
Index: pg/v3-protocol.lisp
diff -u pg/v3-protocol.lisp:1.16 pg/v3-protocol.lisp:1.17
--- pg/v3-protocol.lisp:1.16 Sun Jul 17 15:46:50 2005
+++ pg/v3-protocol.lisp Sun Jul 17 17:48:06 2005
@@ -965,4 +965,11 @@
(defmethod pg-close-portal ((connection pgcon-v3) (portal string))
(pg-close connection portal #\P))
+
+;; split out from large-object.lisp
+(defmethod pglo-read ((connection pgcon-v3) fd bytes)
+ (fn connection "loread" t fd bytes))
+
+
+
;; EOF
Index: pg/lowlevel.lisp
diff -u pg/lowlevel.lisp:1.3 pg/lowlevel.lisp:1.4
--- pg/lowlevel.lisp:1.3 Mon Mar 8 19:12:45 2004
+++ pg/lowlevel.lisp Sun Jul 17 17:48:06 2005
@@ -1,7 +1,7 @@
;;; lowlevel.lisp -- lowlevel network
;;;
;;; Author: Eric Marsden <emarsden>
-;;; Time-stamp: <2004-03-08 emarsden>
+;;; Time-stamp: <2005-07-17 emarsden>
(in-package :postgresql)
@@ -117,6 +117,10 @@
:initial-element 0
:element-type '(unsigned-byte 8))
stream))))
+
+(defun send-octets (connection buffer)
+ (declare (type (vector (unsigned-byte 8) *) buffer))
+ (write-sequence buffer (pgcon-stream connection)))
;; highest order bits first
(defun send-int (connection int bytes)
Index: pg/pg.lisp
diff -u pg/pg.lisp:1.4 pg/pg.lisp:1.5
--- pg/pg.lisp:1.4 Mon Mar 8 16:01:53 2004
+++ pg/pg.lisp Sun Jul 17 17:48:06 2005
@@ -1,10 +1,10 @@
;;; pg.lisp -- socket level interface to the PostgreSQL RDBMS for Common Lisp
;;
-;; Author: Eric Marsden <emarsden at laas.fr>
-;; Time-stamp: <2004-03-08 emarsden>
-;; Version: 0.21
+;; Author: Eric Marsden <eric.marsden at free.fr>
+;; Time-stamp: <2005-07-17 emarsden>
+;; Version: 0.22
;;
-;; Copyright (C) 1999,2000,2001,2002,2003 Eric Marsden
+;; Copyright (C) 1999,2000,2001,2002,2003,2004,2005 Eric Marsden
;;
;; This library is free software; you can redistribute it and/or
;; modify it under the terms of the GNU Library General Public
@@ -20,10 +20,7 @@
;; License along with this library; if not, write to the Free
;; Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
;;
-;; Please send suggestions and bug reports to <emarsden at laas.fr>
-;; The latest version of this package should be available from
-;;
-;; <URL:http://purl.org/net/emarsden/home/downloads/>
+;; Please send suggestions and bug reports to <eric.marsden at free.fr>
;;; Overview =========================================================
@@ -42,27 +39,13 @@
;;
;; See the README for API documentation.
-;; This code has been tested or reported to work with
-;;
-;; * CMUCL 18d and 18e on Solaris/SPARC and Linux/x86
-;; * SBCL 0.8 on Linux/x86 and Linux/PowerPC
-;; * CLISP 2.31 on Linux/PowerPC, Solaris and Linux/x86
-;; * OpenMCL 0.13.6 on Linux/PowerPC and MacOS 10.2
-;; * Armed Bear Lisp version 0.20
-;; * Lispworks 4.3 personal edition for MacOS X and win32
-;; * Allegro CL 6.1 trial Linux/x86
-;; * ECL as of 2003-10-10
-;; * PostgreSQL 6.5, 7.0, 7.1.2, 7.2, 7.3 (and equivalent "Red Hat
-;; Database" versions)
-;;
-;;
;; Please note that your postmaster has to be started with the `-i'
;; option in order for it to accept TCP/IP connections (typically this
;; is not the default setting). See the PostgreSQL documentation at
;; <URL:http://www.PostgreSQL.org/> for more information.
;;
;; Thanks to Marc Battyani for the LW port and for bugfixes, to
-;; Johannes Grødem <johs at copyleft.no> for a fix to parsing of DATE
+;; Johannes Grødem <johs at copyleft.no> for a fix to parsing of DATE
;; types, to Doug McNaught and Howard Ding for bugfixes, to Ernst
;; Jeschek for pointing out a bug in float parsing, to Brian Lui for
;; providing fixes for ACL6, to James Anderson for providing a fix for
@@ -222,6 +205,11 @@
(defgeneric pg-close-portal (connection portal)
(:documentation
"Closes a prepared statement"))
+
+(defgeneric pglo-read (connection fd bytes)
+ (:documentation
+ "Read from a large object on file descriptor FD."))
+
;; first attempt to connect to connect using the v3 protocol; if this
;; results in an ErrorResponse we close the connection and retry using
More information about the Pg-cvs
mailing list