From 7cc407732ccb8437d1b38f2d8cce2c648f98dd45 Mon Sep 17 00:00:00 2001 From: "Kevin M. Rosenberg" Date: Tue, 25 May 2004 03:25:07 +0000 Subject: [PATCH] r9464: * db-oracle/oracle-sql.lisp: Don't trim trailing spaces --- ChangeLog | 1 + db-oracle/oracle-sql.lisp | 25 +++++-------------------- 2 files changed, 6 insertions(+), 20 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2e835f2..37edf69 100644 --- a/ChangeLog +++ b/ChangeLog @@ -4,6 +4,7 @@ * CONTRIBUTORS: Add note about Marcus' excellent work * sql/oodml.lisp: Removed old stub function * clsql.asd: Use module names in current package rather than keyword package + * db-oracle/oracle-sql.lisp: Don't trim trailing spaces 24 May 2004: Marcus Pearce (m.t.pearce@city.ac.uk) * db-postgresql-socket/postgresql-socket-sql.lisp: replace diff --git a/db-oracle/oracle-sql.lisp b/db-oracle/oracle-sql.lisp index dfc3a15..9a7db75 100644 --- a/db-oracle/oracle-sql.lisp +++ b/db-oracle/oracle-sql.lisp @@ -196,36 +196,21 @@ the length of that format.") (setf debug::*debug-print-length* nil)) -;;;; the OCI library, part V: converting from OCI representations to Lisp -;;;; representations - ;; Return the INDEXth string of the OCI array, represented as Lisp ;; SIMPLE-STRING. SIZE is the size of the fixed-width fields used by ;; Oracle to store strings within the array. -;; In the wild world of databases, trailing spaces aren't generally -;; significant, since e.g. "LARRY " and "LARRY " are the same string -;; stored in different fixed-width fields. OCI drops trailing spaces -;; for us in some cases but apparently not for fields of fixed -;; character width, e.g. -;; -;; (dbi:sql "create table employees (name char(15), job char(15), city -;; char(15), rate float)" :db orcl :types :auto) -;; In order to map the "same string" property above onto Lisp equality, -;; we drop trailing spaces in all cases: - (uffi:def-type string-pointer (* :unsigned-char)) (defun deref-oci-string (arrayptr string-index size) (declare (type string-pointer arrayptr)) (declare (type (mod #.+n-buf-rows+) string-index)) (declare (type (and unsigned-byte fixnum) size)) - (let* ((raw (uffi:convert-from-foreign-string - (uffi:make-pointer - (+ (uffi:pointer-address arrayptr) (* string-index size)) - :unsigned-char))) - (trimmed (string-trim " " raw))) - (if (equal trimmed "NULL") nil trimmed))) + (let ((str (uffi:convert-from-foreign-string + (uffi:make-pointer + (+ (uffi:pointer-address arrayptr) (* string-index size)) + :unsigned-char)))) + (if (string-equal str "NULL") nil str))) ;; the OCI library, part Z: no-longer used logic to convert from ;; Oracle's binary date representation to Common Lisp's native date -- 2.34.1