X-Git-Url: http://git.kpe.io/?p=clsql.git;a=blobdiff_plain;f=db-mysql%2Fmysql-api.lisp;h=96d904c70900954e1b04548100b501d5d1159ac5;hp=d49a0894d943f292722219f124b57f00aa8a38c0;hb=fa8bab0b07d9aa9f1c546920971f41252434e285;hpb=bada52b7a8fd2cc484dee33cccd64ca09a52ec3d diff --git a/db-mysql/mysql-api.lisp b/db-mysql/mysql-api.lisp index d49a089..96d904c 100644 --- a/db-mysql/mysql-api.lisp +++ b/db-mysql/mysql-api.lisp @@ -106,10 +106,6 @@ (: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)) @@ -122,17 +118,40 @@ (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 @@ -244,6 +263,16 @@ (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" @@ -251,7 +280,9 @@ :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) @@ -262,7 +293,7 @@ ;; 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) @@ -271,7 +302,7 @@ (db :cstring) (port :unsigned-int) (unix-socket :cstring) - (clientflag :unsigned-int)) + (clientflag :unsigned-long)) :module "mysql" :returning (* mysql-mysql)) @@ -306,14 +337,18 @@ :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)) @@ -364,12 +399,6 @@ :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))) @@ -502,6 +531,46 @@ :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 @@ -597,7 +666,6 @@ :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)))