;;;; Programmer: Kevin M. Rosenberg
;;;; Date Started: Mar 2002
;;;;
-;;;; $Id: utils.cl,v 1.6 2002/09/17 17:16:43 kevin Exp $
+;;;; $Id: utils.cl,v 1.7 2002/09/30 01:57:32 kevin Exp $
;;;;
;;;; This file, part of CLSQL, is Copyright (c) 2002 by Kevin M. Rosenberg
;;;;
(defun float-to-sql-string (num)
"Convert exponent character for SQL"
- (substitute #\e #\f (substitute #\e #\d (write-to-string num :readably t))))
+ (let ((str (write-to-string num :readably t)))
+ (cond
+ ((find #\f str)
+ (substitute #\e #\f str))
+ ((find #\d str)
+ (substitute #\e #\d str))
+ ((find #\F str)
+ (substitute #\e #\F str))
+ ((find #\D str)
+ (substitute #\e #\D str))
+ ((find #\S str)
+ (substitute #\e #\S str))
+ (t
+ str))))
-(defun sql-escape (identifier)
+ (defun sql-escape (identifier)
"Change hyphens to underscores, ensure string"
(let* ((unescaped (etypecase identifier
(symbol (symbol-name identifier))
;;;; Original code by Pierre R. Mai
;;;; Date Started: Feb 2002
;;;;
-;;;; $Id: mysql-api.cl,v 1.1 2002/09/18 07:43:40 kevin Exp $
+;;;; $Id: mysql-api.cl,v 1.2 2002/09/30 01:57:32 kevin Exp $
;;;;
;;;; This file, part of CLSQL, is Copyright (c) 2002 by Kevin M. Rosenberg
;;;; and Copyright (c) 1999-2001 by Pierre R. Mai
(size :unsigned-int))
(uffi:def-struct mysql-mem-root
- (free (* mysql-used-mem))
- (used (* mysql-used-mem))
- (pre-alloc (* mysql-used-mem))
+ (free (:struct-pointer mysql-used-mem))
+ (used (:struct-pointer mysql-used-mem))
+ (pre-alloc (:struct-pointer mysql-used-mem))
(min-alloc :unsigned-int)
(block-size :unsigned-int)
(error-handler :pointer-void))
;;; MYSQL-ROWS
(uffi:def-array-pointer mysql-row (* :unsigned-char))
+
(uffi:def-array-pointer mysql-field-vector (* mysql-field))
(uffi:def-foreign-type mysql-field-offset :unsigned-int)
(next :pointer-self)
(data mysql-row))
-(uffi:def-foreign-type mysql-row-offset (* mysql-rows))
+(uffi:def-foreign-type mysql-row-offset (:struct-pointer mysql-rows)))
(uffi:def-struct mysql-data
(rows-high32 :unsigned-long)
(rows-low32 :unsigned-long)
(fields :unsigned-int)
- (data (* mysql-rows))
- (alloc mysql-mem-root))
+ (data (:struct-pointer mysql-rows))
+ (alloc (:struct mysql-mem-root)))
;;; MYSQL
(uffi:def-struct mysql-options
:use-result))
(uffi:def-struct mysql-mysql
- (net mysql-net)
+ (net (:struct mysql-net))
(connected-fd (* :char))
(host (* :char))
(user (* :char))
(extra-info-low32 :unsigned-long)
(packet-length :unsigned-long)
(status mysql-status)
- (fields (* mysql-field))
- (field-alloc mysql-mem-root)
+ (fields (:struct-pointer mysql-field))
+ (field-alloc (:struct mysql-mem-root))
(free-me mysql-bool)
(reconnect mysql-bool)
- (options mysql-options)
+ (options (:struct mysql-options))
(scramble-buff (:array :char 9))
(charset :pointer-void)
(server-language :unsigned-int))
(row-count-low32 :unsigned-long)
(field-count :unsigned-int)
(current-field :unsigned-int)
- (fields (* mysql-field))
- (data (* mysql-data))
- (data-cursor (* mysql-rows))
- (field-alloc mysql-mem-root)
+ (fields (:struct-pointer mysql-field))
+ (data (:struct-pointer mysql-data))
+ (data-cursor (:struct-pointer mysql-rows))
+ (field-alloc (:struct mysql-mem-root))
(row mysql-row)
(current-row mysql-row)
(lengths (* :unsigned-long))
- (handle (* mysql-mysql))
+ (handle (:struct-pointer mysql-mysql))
(eof mysql-bool))
;;;; The Foreign C routines
(uffi:def-function "mysql_fetch_row"
((res (* mysql-mysql-res)))
:module "mysql"
- :returning mysql-row)
+ :returning (* :unsigned-char))
(declaim (inline mysql-fetch-lengths))
(uffi:def-function "mysql_fetch_lengths"
(uffi:def-function "mysql_fetch_fields"
((res (* mysql-mysql-res)))
:module "mysql"
- :returning mysql-field-vector)
+ :returning (* mysql-field))
(declaim (inline mysql-fetch-field-direct))
(uffi:def-function "mysql_fetch_field_direct"
;;;; Original code by Pierre R. Mai
;;;; Date Started: Feb 2002
;;;;
-;;;; $Id: mysql-sql.cl,v 1.1 2002/09/18 07:43:40 kevin Exp $
+;;;; $Id: mysql-sql.cl,v 1.2 2002/09/30 01:57:32 kevin Exp $
;;;;
;;;; This file, part of CLSQL, is Copyright (c) 2002 by Kevin M. Rosenberg
;;;; and Copyright (c) 1999-2001 by Pierre R. Mai
(dotimes (i num-fields)
(declare (fixnum i))
(let* ( (field (mysql-fetch-field-direct res-ptr i))
- #+ignore (field (uffi:deref-array field-vec 'mysql-field-vector i))
+ #+ignore (field (uffi:deref-array field-vec '(* mysql-field) i))
(type (uffi:get-slot-value field 'mysql-field 'type)))
(push
(case type
types num-fields
res-ptr))
(unwind-protect
- (loop for row = (mysql-fetch-row res-ptr)
+ (loop for row = (mysql-fetch-row res-ptr)
until (uffi:null-pointer-p row)
collect
(loop for i from 0 below num-fields
collect
(convert-raw-field
- (uffi:deref-array row 'mysql-row i)
+ (uffi:deref-array row '(* (* :unsigned-char)) i)
types i)))
(mysql-free-result res-ptr)))
(error 'clsql-sql-error
do
(setf (car rest)
(convert-raw-field
- (uffi:deref-array row 'mysql-row i)
+ (uffi:deref-array row '(* (* :unsigned-char)) i)
types
i)))
list)))