r10561: 07 Jun 2005 Kevin Rosenberg <kevin@rosenberg.net>
authorKevin M. Rosenberg <kevin@rosenberg.net>
Tue, 7 Jun 2005 18:47:01 +0000 (18:47 +0000)
committerKevin M. Rosenberg <kevin@rosenberg.net>
Tue, 7 Jun 2005 18:47:01 +0000 (18:47 +0000)
        * db-mysql/mysql-api.lisp: Commit patch from Espen Wiborn
        to support UTF-8 on sbcl unicode.

ChangeLog
db-mysql/mysql-sql.lisp

index e59cd8ee445774969b050e662d2617af1bc0f488..b4fa8ffa747e0a76e0153f3c665e81d009f4f99d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+07 Jun 2005 Kevin Rosenberg <kevin@rosenberg.net>
+       * db-mysql/mysql-api.lisp: Commit patch from Espen Wiborn
+       to support UTF-8 on sbcl unicode.
+       
 18 May 2005 Kevin Rosenberg <kevin@rosenberg.net>
        * Version 3.1.15
        * sql/time.lisp: Fix bug in roll that caused failure in test suite
index 5468ac5075c914ca53ec45c7ec639eb7ea288363..ce81abe7e9ae0049643ac6f2e9b6c69d4157e01c 100644 (file)
 
 (in-package #:clsql-mysql)
 
+;; if we have :sb-unicode, UFFI will treat :cstring as a UTF-8 string
+(defun expression-length (query-expression)
+  (length #+sb-unicode (sb-ext:string-to-octets query-expression
+                                               :external-format :utf8)
+         #-sb-unicode query-expression))
+
 ;;; Field conversion functions
 
 (defun result-field-names (num-fields res-ptr)
   (let ((mysql-ptr (database-mysql-ptr database)))
     (uffi:with-cstring (query-native query-expression)
       (if (zerop (mysql-real-query mysql-ptr query-native 
-                                   (length query-expression)))
+                                   (expression-length query-expression)))
          (let ((res-ptr (mysql-use-result mysql-ptr)))
            (if res-ptr
                (unwind-protect
     (let ((mysql-ptr (database-mysql-ptr database)))
       (declare (type mysql-mysql-ptr-def mysql-ptr))
       (if (zerop (mysql-real-query mysql-ptr sql-native 
-                                   (length sql-expression)))
+                                   (expression-length sql-expression)))
          t
        (error 'sql-database-data-error
               :database database
     (let ((mysql-ptr (database-mysql-ptr database)))
      (declare (type mysql-mysql-ptr-def mysql-ptr))
       (if (zerop (mysql-real-query mysql-ptr query-native
-                                   (length query-expression)))
+                                   (expression-length query-expression)))
          (let ((res-ptr (if full-set
                             (mysql-store-result mysql-ptr)
                           (mysql-use-result mysql-ptr))))
             :message (mysql-error-string mysql-ptr)))
 
     (uffi:with-cstring (native-query sql-stmt)
-      (unless (zerop (mysql-stmt-prepare stmt native-query (length sql-stmt)))
+      (unless (zerop (mysql-stmt-prepare stmt native-query (expression-length sql-stmt)))
        (mysql-stmt-close stmt)
        (error 'sql-database-error
               :error-id (mysql-errno mysql-ptr)