1 /****************************************************************************
5 * Purpose: Helper functions for mysql.cl to handle 64-bit parts of API
6 * Programmer: Kevin M. Rosenberg
7 * Date Started: Mar 2002
11 * This file, part of CLSQL, is Copyright (c) 2002 by Kevin M. Rosenberg
13 * CLSQL users are granted the rights to distribute and use this software
14 * as governed by the terms of the Lisp Lesser GNU Public License
15 * (http://opensource.franz.com/preamble.html), also known as the LLGPL.
16 ***************************************************************************/
21 BOOL WINAPI
DllEntryPoint(HINSTANCE hinstdll
, DWORD fdwReason
,
27 #define DLLEXPORT __declspec(dllexport)
36 /* Need to assemble a 64-bit integer to send to MySQL */
39 clsql_mysql_data_seek (MYSQL_RES
* res
, unsigned int offset_high32
,
40 unsigned int offset_low32
)
44 offset
= offset_high32
;
45 offset
= offset
<< 32;
46 offset
+= offset_low32
;
48 mysql_data_seek (res
, offset
);
51 /* The following functions are used to return 64-bit integers to Lisp.
52 They return the 32-bit low part and store in upper 32-bits in a
53 located sent via a pointer */
55 static const unsigned int bitmask_32bits
= 0xFFFFFFFF;
56 #define lower_32bits(int64) ((unsigned int) int64 & bitmask_32bits)
57 #define upper_32bits(int64) ((unsigned int) (int64 >> 32))
61 clsql_mysql_num_rows (MYSQL_RES
* res
, unsigned int* pHigh32
)
63 my_ulonglong nRows
= mysql_num_rows (res
);
64 *pHigh32
= upper_32bits(nRows
);
65 return lower_32bits(nRows
);
70 clsql_mysql_affected_rows (MYSQL
* res
, unsigned int* pHigh32
)
72 my_ulonglong nAffected
= mysql_affected_rows (res
);
73 *pHigh32
= upper_32bits(nAffected
);
74 return lower_32bits(nAffected
);
79 clsql_mysql_insert_id (MYSQL
* mysql
, unsigned int* pHigh32
)
81 my_ulonglong insert_id
= mysql_insert_id (mysql
);
82 *pHigh32
= upper_32bits(insert_id
);
83 return lower_32bits(insert_id
);
87 /* Accessor functions to hide the differences across MySQL versions */
91 clsql_mysql_field_type (MYSQL_FIELD
* field
)
98 clsql_mysql_field_name (MYSQL_FIELD
* field
)
105 clsql_mysql_field_length (MYSQL_FIELD
* field
)
107 return field
->length
;
112 clsql_mysql_field_max_length (MYSQL_FIELD
* field
)
114 return field
->max_length
;
118 #if MYSQL_VERSION_ID >= 40102
123 allocate_bind (unsigned int n
)
125 return (MYSQL_BIND
*) malloc (n
* sizeof(MYSQL_BIND
));
130 bind_param (MYSQL_BIND bind
[], unsigned int n
, unsigned long length
, unsigned short is_null
,
131 void* buffer
, unsigned short buffer_type
, unsigned long buffer_length
)
133 *bind
[n
].length
= length
;
134 *bind
[n
].is_null
= is_null
;
135 bind
[n
].buffer
= buffer
;
136 bind
[n
].buffer_type
= buffer_type
;
137 bind
[n
].buffer_length
= buffer_length
;
144 clsql_mysql_stmt_affected_rows (MYSQL_STMT
* stmt
, unsigned int* pHigh32
)
146 my_ulonglong nAffected
= mysql_stmt_affected_rows (stmt
);
147 *pHigh32
= upper_32bits(nAffected
);
148 return lower_32bits(nAffected
);