;;;; *************************************************************************
;;;; FILE IDENTIFICATION
;;;;
-;;;; Name: mysql-sql.cl
+;;;; Name: mysql-sql.lisp
;;;; Purpose: High-level MySQL interface using UFFI
;;;; Programmers: Kevin M. Rosenberg based on
;;;; Original code by Pierre R. Mai
;;;; Date Started: Feb 2002
;;;;
-;;;; $Id: mysql-sql.lisp,v 1.7 2003/06/24 01:12:57 kevin Exp $
+;;;; $Id$
;;;;
;;;; This file, part of CLSQL, is Copyright (c) 2002 by Kevin M. Rosenberg
;;;; and Copyright (c) 1999-2001 by Pierre R. Mai
(declare (optimize (speed 3) (safety 0) (debug 0) (space 0)))
(let ((mysql-ptr (database-mysql-ptr database)))
(uffi:with-cstring (query-native query-expression)
- (if (zerop (mysql-query mysql-ptr query-native))
+ (if (zerop (mysql-real-query mysql-ptr query-native
+ (length query-expression)))
(let ((res-ptr (mysql-use-result mysql-ptr)))
(if res-ptr
(unwind-protect
types num-fields
res-ptr))
(loop for row = (mysql-fetch-row res-ptr)
+ for lengths = (mysql-fetch-lengths res-ptr)
until (uffi:null-pointer-p row)
collect
(do* ((rlist (make-list num-fields))
(uffi:deref-array row '(:array
(* :unsigned-char))
i)
- types i)))))
+ types i
+ (uffi:deref-array lengths '(:array :unsigned-long)
+ i))))))
(mysql-free-result res-ptr))
(error 'clsql-sql-error
:database database
(uffi:with-cstring (sql-native sql-expression)
(let ((mysql-ptr (database-mysql-ptr database)))
(declare (type mysql-mysql-ptr-def mysql-ptr))
- (if (zerop (mysql-query mysql-ptr sql-native))
+ (if (zerop (mysql-real-query mysql-ptr sql-native
+ (length sql-expression)))
t
(error 'clsql-sql-error
:database database
(uffi:with-cstring (query-native query-expression)
(let ((mysql-ptr (database-mysql-ptr database)))
(declare (type mysql-mysql-ptr-def mysql-ptr))
- (if (zerop (mysql-query mysql-ptr query-native))
+ (if (zerop (mysql-real-query mysql-ptr query-native
+ (length query-expression)))
(let ((res-ptr (if full-set
(mysql-store-result mysql-ptr)
(mysql-use-result mysql-ptr))))
(defmethod database-store-next-row (result-set (database mysql-database) list)
(let* ((res-ptr (mysql-result-set-res-ptr result-set))
(row (mysql-fetch-row res-ptr))
+ (lengths (mysql-fetch-lengths res-ptr))
(types (mysql-result-set-types result-set)))
(declare (type mysql-mysql-res-ptr-def res-ptr)
(type mysql-row-def row))
(convert-raw-field
(uffi:deref-array row '(:array (* :unsigned-char)) i)
types
- i)))
+ i
+ (uffi:deref-array lengths :unsigned-long i))))
list)))
(when (clsql-base-sys:database-type-library-loaded :mysql)
- (clsql-base-sys:initialize-database-type :database-type :mysql)
- (pushnew :mysql cl:*features*))
+ (clsql-base-sys:initialize-database-type :database-type :mysql))