;;;; *************************************************************************
;;;; FILE IDENTIFICATION
;;;;
-;;;; Name: mysql.cl
+;;;; Name: mysql-api.lisp
;;;; Purpose: Low-level MySQL interface using UFFI
;;;; Programmers: Kevin M. Rosenberg based on
;;;; Original code by Pierre R. Mai
;;;; Date Started: Feb 2002
;;;;
-;;;; $Id: mysql-api.lisp,v 1.5 2003/07/08 20:15:13 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)))