;;;;
;;;; Name: mysql-api.lisp
;;;; Purpose: Low-level MySQL interface using UFFI
-;;;; Programmers: Kevin M. Rosenberg based on
-;;;; Original code by Pierre R. Mai
+;;;; Programmers: Kevin M. Rosenberg based on
+;;;; Original code by Pierre R. Mai
;;;; Date Started: Feb 2002
;;;;
;;;; $Id$
;;;; that are used in a few routines.
;;;; - Removed all references to interiors of C-structions, this will
;;;; increase robustness when MySQL's internal structures change.
-
+
;;;; Type definitions
;;; Basic Types
(decimals :unsigned-int)
(type mysql-field-types))
-#+mysql-client-v4.1
+#+(or mysql-client-v4.1 mysql-client-v5)
(uffi:def-struct mysql-field
(name (* :char))
- (org_table (* :char))
+ (org_name (* :char))
(table (* :char))
(org_table (* :char))
(db (* :char))
(charsetnr :unsigned-int)
(type mysql-field-types))
+
(uffi:def-struct mysql-time
(year :unsigned-int)
(month :unsigned-int)
:read-default-group))
(uffi:def-enum mysql-status
- (:ready
+ (:ready
:get-result
:use-result))
(handle (:struct-pointer mysql-mysql))
(eof mysql-bool))
-#+mysql-client-4.1
+#+(or mysql-client-v4.1 mysql-client-v5)
(uffi:def-enum mysql-field-types
- (:ready
+ (:ready
:get-result
:use-result))
-#+mysql-client-v4.1
+#+(or mysql-client-v4.1 mysql-client-v5)
(uffi:def-struct mysql-bind
(length (* :unsigned-long))
(is-null (* mysql-bool))
(declaim (inline mysql-init))
(uffi:def-function "mysql_init"
((mysql (* mysql-mysql)))
- :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)
- (user :cstring)
- (passwd :cstring))
: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 :int)
-
(declaim (inline mysql-shutdown))
(uffi:def-function "mysql_shutdown"
((mysql (* mysql-mysql)))
(declaim (inline mysql-escape-string))
(uffi:def-function "mysql_escape_string"
- ((to :cstring)
- (from :cstring)
+ ((to (* :unsigned-char))
+ (from (* :unsigned-char))
(length :unsigned-int))
:module "mysql"
:returning :unsigned-int)
:module "clsql-mysql"
:returning :unsigned-int)
-#+mysql-client-v4.1
+#+(or mysql-client-v4.1 mysql-client-v5)
(uffi:def-foreign-type mysql-stmt-ptr :pointer-void)
-#+mysql-client-v4.1
+#+(or mysql-client-v4.1 mysql-client-v5)
(uffi:def-function "mysql_stmt_init"
((res (* mysql-mysql-res)))
:module "clsql-mysql"
:returning mysql-stmt-ptr)
-#+mysql-client-v4.1
+#+(or mysql-client-v4.1 mysql-client-v5)
(uffi:def-function "mysql_stmt_prepare"
((stmt mysql-stmt-ptr)
(query :cstring)
:module "clsql-mysql"
:returning :int)
-#+mysql-client-v4.1
+#+(or mysql-client-v4.1 mysql-client-v5)
(uffi:def-function "mysql_stmt_param_count"
((stmt mysql-stmt-ptr))
:module "clsql-mysql"
:returning :unsigned-int)
-#+mysql-client-v4.1
+#+(or mysql-client-v4.1 mysql-client-v5)
(uffi:def-function "mysql_stmt_bind_param"
((stmt mysql-stmt-ptr)
(bind (* mysql-bind)))
:module "clsql-mysql"
:returning :short)
-#+mysql-client-v4.1
+#+(or mysql-client-v4.1 mysql-client-v5)
(uffi:def-function "mysql_stmt_bind_result"
((stmt mysql-stmt-ptr)
(bind (* mysql-bind)))
:module "clsql-mysql"
:returning :short)
-#+mysql-client-v4.1
+#+(or mysql-client-v4.1 mysql-client-v5)
(uffi:def-function "mysql_stmt_result_metadata"
((stmt mysql-stmt-ptr))
:module "clsql-mysql"
:returning (* mysql-mysql-res))
-#+mysql-client-v4.1
+#+(or mysql-client-v4.1 mysql-client-v5)
(uffi:def-function "mysql_stmt_execute"
((stmt mysql-stmt-ptr))
:module "clsql-mysql"
:returning :int)
-#+mysql-client-v4.1
+#+(or mysql-client-v4.1 mysql-client-v5)
(uffi:def-function "mysql_stmt_store_result"
((stmt mysql-stmt-ptr))
:module "clsql-mysql"
:returning :int)
-#+mysql-client-v4.1
+#+(or mysql-client-v4.1 mysql-client-v5)
(uffi:def-function "mysql_stmt_fetch"
((stmt mysql-stmt-ptr))
:module "clsql-mysql"
:returning :int)
-#+mysql-client-v4.1
+#+(or mysql-client-v4.1 mysql-client-v5)
(uffi:def-function "mysql_stmt_free_result"
((stmt mysql-stmt-ptr))
:module "clsql-mysql"
:returning :short)
-#+mysql-client-v4.1
+#+(or mysql-client-v4.1 mysql-client-v5)
(uffi:def-function "mysql_stmt_close"
((stmt mysql-stmt-ptr))
:module "clsql-mysql"
:returning :short)
-#+mysql-client-v4.1
+#+(or mysql-client-v4.1 mysql-client-v5)
(uffi:def-function "mysql_stmt_errno"
((stmt mysql-stmt-ptr))
:module "clsql-mysql"
:returning :unsigned-int)
-#+mysql-client-v4.1
+#+(or mysql-client-v4.1 mysql-client-v5)
(uffi:def-function "mysql_stmt_error"
((stmt mysql-stmt-ptr))
:module "clsql-mysql"
(defun mysql-num-rows (res)
(uffi:with-foreign-object (p-high32 :unsigned-int)
(let ((low32 (clsql-mysql-num-rows res p-high32))
- (high32 (uffi:deref-pointer p-high32 :unsigned-int)))
+ (high32 (uffi:deref-pointer p-high32 :unsigned-int)))
(if (zerop high32)
- low32
- (make-64-bit-integer high32 low32)))))
+ low32
+ (make-64-bit-integer high32 low32)))))
(uffi:def-function "clsql_mysql_affected_rows"
((mysql (* mysql-mysql))
(defun mysql-affected-rows (mysql)
(uffi:with-foreign-object (p-high32 :unsigned-int)
(let ((low32 (clsql-mysql-affected-rows mysql p-high32))
- (high32 (uffi:deref-pointer p-high32 :unsigned-int)))
+ (high32 (uffi:deref-pointer p-high32 :unsigned-int)))
(if (zerop high32)
- low32
- (make-64-bit-integer high32 low32)))))
+ low32
+ (make-64-bit-integer high32 low32)))))
(uffi:def-function "clsql_mysql_insert_id"
((res (* mysql-mysql))
(defun mysql-insert-id (mysql)
(uffi:with-foreign-object (p-high32 :unsigned-int)
(let ((low32 (clsql-mysql-insert-id mysql p-high32))
- (high32 (uffi:deref-pointer p-high32 :unsigned-int)))
+ (high32 (uffi:deref-pointer p-high32 :unsigned-int)))
(if (zerop high32)
- low32
+ low32
(make-64-bit-integer high32 low32)))))
(declaim (inline mysql-num-fields))
-(uffi:def-function "mysql_num_fields"
+(uffi:def-function "mysql_num_fields"
((res (* mysql-mysql-res)))
:returning :unsigned-int
:module "mysql")
-
+
(declaim (inline clsql-mysql-eof))
(uffi:def-function ("mysql_eof" clsql-mysql-eof)
((res (* mysql-mysql-res)))