r9527: add function declarations for prepared statements
[clsql.git] / db-mysql / mysql-api.lisp
index cff8da4a98dd9a175d8c6eac7c6ab2689f30b027..96d904c70900954e1b04548100b501d5d1159ac5 100644 (file)
@@ -8,7 +8,7 @@
 ;;;;                Original code by Pierre R. Mai 
 ;;;; Date Started:  Feb 2002
 ;;;;
-;;;; $Id: mysql-api.lisp,v 1.6 2003/07/21 01:45:45 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
      (:var-string 253)
      (:string 254)))
 
-#-(or mysql-client-v3 mysql-client-v4)
-(eval-when (:compile-toplevel :load-toplevel :execute)
-  (pushnew :mysql-client-v3 cl:*features*))
-
 #+mysql-client-v3
 (uffi:def-struct mysql-field
     (name (* :char))
   (decimals :unsigned-int))
 
 ;; structure changed in mysql 4 client
-#+mysql-client-v4
+#+(and mysql-client-v4 (not mysql-client-v4.1))
 (uffi:def-struct mysql-field
     (name (* :char))
   (table (* :char))
   (org_table (* :char))
   (db (* :char))
   (def (* :char))
-  (length :unsigned-int)
-  (max-length :unsigned-int)
+  (length :unsigned-long)
+  (max-length :unsigned-long)
+  (flags :unsigned-int)
+  (decimals :unsigned-int)
+  (type mysql-field-types))
+
+#+mysql-client-v4.1
+(uffi:def-struct mysql-field
+    (name (* :char))
+  (org_table (* :char))
+  (table (* :char))
+  (org_table (* :char))
+  (db (* :char))
+  (catalog_db (* :char))
+  (def (* :char))
+  (length :unsigned-long)
+  (max-length :unsigned-long)
+  (name-length :unsigned-int)
+  (org-name-length :unsigned-int)
+  (table-length :unsigned-int)
+  (org-table-length :unsigned-int)
+  (db-length :unsigned-int)
+  (catalog-length :unsigned-int)
+  (def-length :unsigned-int)
   (flags :unsigned-int)
   (decimals :unsigned-int)
+  (charsetnr :unsigned-int)
   (type mysql-field-types))
 
 ;;; MYSQL-ROWS
   (handle (:struct-pointer mysql-mysql))
   (eof mysql-bool))
 
+#+mysql-client-v4.1
+(uffi:def-struct mysql-bind
+    (length (* :unsigned-long))
+  (is-null (* :short))
+  (buffer :pointer-void)
+  (buffer-type :int)
+  (buffer-length :unsigned-long)
+  ;; remainder of structure is for internal use
+  )
+
 ;;;; The Foreign C routines
 (declaim (inline mysql-init))
 (uffi:def-function "mysql_init"
   :module "mysql" 
   :returning (* mysql-mysql))
 
+#-mysql-client-v4
 (declaim (inline mysql-connect))
+#-mysql-client-v4
 (uffi:def-function "mysql_connect"
     ((mysql (* mysql-mysql))
      (host :cstring)
 
 ;; Need to comment this out for LW 4.2.6
 ;; ? bug in LW version
-;;(declaim (inline mysql-real-connect))
+#-lispworks (declaim (inline mysql-real-connect))
 (uffi:def-function "mysql_real_connect"
     ((mysql (* mysql-mysql))
      (host :cstring)
      (db :cstring)
      (port :unsigned-int)
      (unix-socket :cstring)
-     (clientflag :unsigned-int))
+     (clientflag :unsigned-long))
   :module "mysql"
   :returning (* mysql-mysql))
 
   :module "mysql"
   :returning :int)
 
+#-mysql-client-v4
 (declaim (inline mysql-create-db))
+#-mysql-client-v4
 (uffi:def-function "mysql_create_db"
   ((mysql (* mysql-mysql))
    (db :cstring))
   :module "mysql"
   :returning :int)
 
+#-mysql-client-v4
 (declaim (inline mysql-drop-db))
+#-mysql-client-v4
 (uffi:def-function "mysql_drop_db"
     ((mysql (* mysql-mysql))
      (db :cstring))
   :module "mysql"
   :returning :cstring)
 
-(declaim (inline mysql-get-client-info))
-(uffi:def-function "mysql_get_client_info"
-    ()
-  :module "mysql"
-  :returning :cstring)
-
 (declaim (inline mysql-get-host-info))
 (uffi:def-function "mysql_get_host_info"
     ((mysql (* mysql-mysql)))
   :module "clsql-mysql"
   :returning :unsigned-int)
 
+#+mysql-client-v4.1
+(uffi:def-foreign-type mysql-stmt-ptr :pointer-void)
+
+#+mysql-client-v4.1
+(uffi:def-function "mysql_stmt_init"
+    ((res (* mysql-mysql-res)))
+  :module "clsql-mysql"
+  :returning mysql-stmt-ptr)
+
+#+mysql-client-v4.1
+(uffi:def-function "mysql_stmt_bind_param"
+    ((stmt mysql-stmt-ptr)
+     (bind (* mysql-bind)))
+  :module "clsql-mysql"
+  :returning :short)
+
+#+mysql-client-v4.1
+(uffi:def-function "mysql_stmt_bind_result"
+    ((stmt mysql-stmt-ptr)
+     (bind (* mysql-bind)))
+  :module "clsql-mysql"
+  :returning :short)
+
+#+mysql-client-v4.1
+(uffi:def-function "mysql_stmt_execute"
+    ((stmt mysql-stmt-ptr))
+  :module "clsql-mysql"
+  :returning :int)
+
+#+mysql-client-v4.1
+(uffi:def-function "mysql_stmt_fetch"
+    ((stmt mysql-stmt-ptr))
+  :module "clsql-mysql"
+  :returning :int)
+
+#+mysql-client-v4.1
+(uffi:def-function "mysql_stmt_free_result"
+    ((stmt mysql-stmt-ptr))
+  :module "clsql-mysql"
+  :returning :short)
 
 ;;;; Equivalents of C Macro definitions for accessing various fields
 ;;;; in the internal MySQL Datastructures
   :module "clsql-mysql"
   :returning :void)
 
-
 (defun mysql-data-seek (res offset)
   (multiple-value-bind (high32 low32) (split-64-bit-integer offset)
     (clsql-mysql-data-seek res high32 low32)))