Date: Monday, January 30, 2006 @ 13:45:57
Author: zsolt
Path: /cvsroot/carob/libmysequoia
Modified: include/CarobMySQL.hpp (1.22 -> 1.23) include/mysql_wrapper.h
(1.1 -> 1.2) src/CarobCommon.cpp (1.3 -> 1.4) src/CarobMySQL.cpp
(1.38 -> 1.39) src/CarobStmt.cpp (1.17 -> 1.18) src/MySQLAPI.cpp
(1.34 -> 1.35) src/Utils.cpp (1.30 -> 1.31)
Backport to mysql 4.1.16. Now the library can be compiled with mysql 4.1
-------------------------+
include/CarobMySQL.hpp | 4
include/mysql_wrapper.h | 8 +
src/CarobCommon.cpp | 7 -
src/CarobMySQL.cpp | 19 ++-
src/CarobStmt.cpp | 77 +++++++++++++--
src/MySQLAPI.cpp | 24 +++-
src/Utils.cpp | 234 +++++++++++++++++++++++++++++-----------------
7 files changed, 260 insertions(+), 113 deletions(-)
Index: libmysequoia/include/CarobMySQL.hpp
diff -u libmysequoia/include/CarobMySQL.hpp:1.22
libmysequoia/include/CarobMySQL.hpp:1.23
--- libmysequoia/include/CarobMySQL.hpp:1.22 Wed Jan 25 09:46:24 2006
+++ libmysequoia/include/CarobMySQL.hpp Mon Jan 30 13:45:56 2006
@@ -38,10 +38,6 @@
const unsigned long MYSEQUOIA_MAGIC = 0xC00CA10B;
-#define CAROB_MYSQL_CLIENT_INFO "5.0.15";
-#define CAROB_MYSQL_CLIENT_VERSION 50015;
-#define PROTOCOL_VERSION 10
-
#define LOGGER_CONFIG_FILE "logger.cfg"
class CarobMYSQL : public CarobCommon
Index: libmysequoia/include/mysql_wrapper.h
diff -u libmysequoia/include/mysql_wrapper.h:1.1
libmysequoia/include/mysql_wrapper.h:1.2
--- libmysequoia/include/mysql_wrapper.h:1.1 Tue Jan 10 12:22:44 2006
+++ libmysequoia/include/mysql_wrapper.h Mon Jan 30 13:45:56 2006
@@ -4,4 +4,12 @@
#define USE_OLD_FUNCTIONS
#include <mysql.h>
+#if MYSQL_VERSION_ID >= 50000
+#define MYSQL5
+#else
+#define ER_ERROR_FIRST 1000
+#define ER_ERROR_LAST 1302
+#define MYSQL_TYPE_NEWDECIMAL MYSQL_TYPE_DECIMAL
+#endif
+
#endif /*_MYSQL_WRAPPER_H*/
Index: libmysequoia/src/CarobCommon.cpp
diff -u libmysequoia/src/CarobCommon.cpp:1.3
libmysequoia/src/CarobCommon.cpp:1.4
--- libmysequoia/src/CarobCommon.cpp:1.3 Thu Jan 26 16:42:35 2006
+++ libmysequoia/src/CarobCommon.cpp Mon Jan 30 13:45:56 2006
@@ -61,8 +61,11 @@
(colPtr->type == MYSQL_TYPE_BLOB ? BLOB_FLAG : 0) |
(IS_NUM(colPtr->type) && colPtr->type !=
MYSQL_TYPE_TIMESTAMP &&
colPtr->type != MYSQL_TYPE_NULL ? NUM_FLAG : 0) |
- (colPtr->type == MYSQL_TYPE_TIMESTAMP ? TIMESTAMP_FLAG :
0) |
- NO_DEFAULT_VALUE_FLAG;
+ (colPtr->type == MYSQL_TYPE_TIMESTAMP ? TIMESTAMP_FLAG :
0)
+#ifdef MYSQL5
+ | NO_DEFAULT_VALUE_FLAG
+#endif
+ ;
}
LOG4CXX_DEBUG(logger, "Leaving get_query_fields.");
Index: libmysequoia/src/CarobMySQL.cpp
diff -u libmysequoia/src/CarobMySQL.cpp:1.38
libmysequoia/src/CarobMySQL.cpp:1.39
--- libmysequoia/src/CarobMySQL.cpp:1.38 Fri Jan 27 14:37:33 2006
+++ libmysequoia/src/CarobMySQL.cpp Mon Jan 30 13:45:56 2006
@@ -41,6 +41,7 @@
connectionPtr(0), stmtPtr(0), drsPtr(0), liveResultPtr(0)
{
LOG4CXX_DEBUG(logger, "Entering constructor.");
+ static char version[6];
/* initialize the mysql structure */
memset(mysql, 0, sizeof(MYSQL));
@@ -48,7 +49,8 @@
mysql->field_alloc.block_size = MYSEQUOIA_MAGIC;
mysql->free_me = free_me;
//TODO maybe a real server version string ???
- mysql->server_version = "50018";
+ snprintf(version, sizeof(version), "%ud", MYSQL_VERSION_ID);
+ mysql->server_version = version;
mysql->protocol_version = PROTOCOL_VERSION;
// TODO fill in other required mysql fields
@@ -112,7 +114,7 @@
if (unix_socket)
{
- set_error(CR_NOT_IMPLEMENTED, SQLT_UNKNOWN);
+ set_error(CR_SOCKET_CREATE_ERROR, SQLT_UNKNOWN);
LOG4CXX_DEBUG(logger, "Leaving connect.");
return false;
}
@@ -360,8 +362,10 @@
mysqlPtr->affected_rows = result->row_count;
mysqlPtr->fields = result->fields;
}
+#ifdef MYSQL5
else
set_error(CR_NO_RESULT_SET, SQLT_UNKNOWN);
+#endif
LOG4CXX_DEBUG(logger, "Leaving get_results.");
return result;
@@ -753,9 +757,14 @@
memset(&b, 0, sizeof(b));
b.buffer = &buffer;
b.buffer_length = sizeof(buffer);
+#ifdef MYSQL5
b.is_null = &b.is_null_value;
b.error = &b.error_value;
b.length = &b.length_value;
+#else
+ b.is_null = &b.internal_is_null;
+ b.length = &b.internal_length;
+#endif
b.buffer_type = MYSQL_TYPE_STRING;
for (unsigned i=0; i<field_count; i++, fPtr++)
@@ -770,13 +779,13 @@
lData = drsPtr->getAsInt(i+1);
getFromTime(&b,fPtr,&lData);
result += buffer;
- field_len = b.length_value;
+ field_len = *b.length;
break;
case MYSQL_TYPE_DATE:
lData = drsPtr->getAsInt64(i+1);
getFromDate(&b,fPtr,&lData);
result += buffer;
- field_len = b.length_value;
+ field_len = *b.length;
break;
case MYSQL_TYPE_DATETIME:
//TODO when Carob implements Timestamp, change this
@@ -784,7 +793,7 @@
lData = 0;
getFromTime(&b,fPtr,&lData);
result += buffer;
- field_len = b.length_value;
+ field_len = *b.length;
break;
default:
tmp = toString(drsPtr->getAsString(i+1));
Index: libmysequoia/src/CarobStmt.cpp
diff -u libmysequoia/src/CarobStmt.cpp:1.17 libmysequoia/src/CarobStmt.cpp:1.18
--- libmysequoia/src/CarobStmt.cpp:1.17 Fri Jan 27 14:37:33 2006
+++ libmysequoia/src/CarobStmt.cpp Mon Jan 30 13:45:56 2006
@@ -51,7 +51,9 @@
m_stmt->mem_root.used = (USED_MEM *) this;
m_stmt->mem_root.block_size = MYSEQUOIA_MAGIC;
m_stmt->mysql = mysql;
+#ifdef MYSQL5
m_stmt->prefetch_rows = 1;
+#endif
m_stmt->state = MYSQL_STMT_INIT_DONE;
cmysql = (CarobMYSQL *)mysql->field_alloc.used;
@@ -133,12 +135,20 @@
{
if (!p->is_null)
{
- p->is_null= &p->is_null_value;
- p->is_null_value = false;
+#ifdef MYSQL5
+ p->is_null = &p->is_null_value;
+#else
+ p->is_null = &p->internal_is_null;
+#endif
+ *p->is_null = false;
}
p->long_data_used = 0;
+#ifdef MYSQL5
p->row_ptr = 0;
+#else
+ p->inter_buffer = 0;
+#endif
p->param_number = no-1;
switch (p->buffer_type)
@@ -153,7 +163,6 @@
case MYSQL_TYPE_MEDIUM_BLOB:
case MYSQL_TYPE_LONG_BLOB:
case MYSQL_TYPE_BLOB:
- case MYSQL_TYPE_VARCHAR:
case MYSQL_TYPE_VAR_STRING:
case MYSQL_TYPE_STRING:
case MYSQL_TYPE_TIME:
@@ -161,7 +170,10 @@
case MYSQL_TYPE_DATETIME:
case MYSQL_TYPE_TIMESTAMP:
case MYSQL_TYPE_DECIMAL:
+#ifdef MYSQL5
+ case MYSQL_TYPE_VARCHAR:
case MYSQL_TYPE_NEWDECIMAL:
+#endif
case MYSQL_TYPE_NULL:
break;
default:
@@ -200,9 +212,17 @@
if (!bind->long_data_used)
{
bind->long_data_used = 1;
+#ifdef MYSQL5
bind->row_ptr = (unsigned char *)new string;
+#else
+ bind->inter_buffer = (unsigned char *)new string;
+#endif
}
+#ifdef MYSQL5
((string *)(bind->row_ptr))->append(data, length);
+#else
+ ((string *)(bind->inter_buffer))->append(data, length);
+#endif
}
else
set_error(CR_INVALID_BUFFER_USE, SQLT_UNKNOWN);
@@ -224,7 +244,11 @@
set_error(CR_PARAMS_NOT_BOUND, SQLT_UNKNOWN);
else
{
+#ifdef MYSQL5
set_fetch_size(m_stmt->prefetch_rows);
+#else
+ set_fetch_size(1);
+#endif
try
{
@@ -255,16 +279,23 @@
c_stmt->setDouble(no, *(double *)p->buffer);
break;
case MYSQL_TYPE_DECIMAL:
- case MYSQL_TYPE_NEWDECIMAL:
case MYSQL_TYPE_TINY_BLOB:
case MYSQL_TYPE_MEDIUM_BLOB:
case MYSQL_TYPE_LONG_BLOB:
case MYSQL_TYPE_BLOB:
+#ifdef MYSQL5
+ case MYSQL_TYPE_NEWDECIMAL:
case MYSQL_TYPE_VARCHAR:
+#endif
case MYSQL_TYPE_VAR_STRING:
case MYSQL_TYPE_STRING:
+#ifdef MYSQL5
if (p->long_data_used && p->row_ptr)
c_stmt->setString(no, fromString(*(string *)(p->row_ptr)));
+#else
+ if (p->long_data_used && p->inter_buffer)
+ c_stmt->setString(no, fromString(*(string
*)(p->inter_buffer)));
+#endif
else
c_stmt->setString(no, fromString(string((char *)p->buffer,
p->buffer_length)));
break;
@@ -351,11 +382,13 @@
case MYSQL_TYPE_MEDIUM_BLOB:
case MYSQL_TYPE_LONG_BLOB:
case MYSQL_TYPE_BLOB:
- case MYSQL_TYPE_VARCHAR:
case MYSQL_TYPE_VAR_STRING:
case MYSQL_TYPE_STRING:
case MYSQL_TYPE_DECIMAL:
+#ifdef MYSQL5
+ case MYSQL_TYPE_VARCHAR:
case MYSQL_TYPE_NEWDECIMAL:
+#endif
case MYSQL_TYPE_TIME:
case MYSQL_TYPE_DATE:
case MYSQL_TYPE_DATETIME:
@@ -370,9 +403,11 @@
}
if (!result)
+#ifdef MYSQL5
if (m_stmt->mysql->options.report_data_truncation)
m_stmt->bind_result_done = DATA_TRUNCATED;
else
+#endif
m_stmt->bind_result_done = DATA_NORMAL;
}
@@ -385,7 +420,9 @@
{
LOG4CXX_DEBUG(logger, "Entering fetch.");
int result = 0;
+#ifdef MYSQL5
bool truncation = false;
+#endif
if (!m_stmt->bind_result_done || (m_stmt->state < MYSQL_STMT_EXECUTE_DONE))
{
@@ -403,7 +440,9 @@
{
fetch_field(fPtr, bPtr, colNo);
+#ifdef MYSQL5
truncation |= *bPtr->error;
+#endif
}
if (m_stmt->result.data)
@@ -414,8 +453,10 @@
m_stmt->affected_rows = m_stmt->result.rows;
}
+#ifdef MYSQL5
if (truncation && (m_stmt->bind_result_done == DATA_TRUNCATED))
result = MYSQL_DATA_TRUNCATED;
+#endif
m_stmt->state = MYSQL_STMT_FETCH_DONE;
}
@@ -559,14 +600,24 @@
void
CarobStmt::link_bind(MYSQL_BIND *bind)
{
+#ifdef MYSQL5
if (!bind->error)
bind->error = &bind->error_value;
+#endif
if (!bind->is_null)
+#ifdef MYSQL5
bind->is_null = &bind->is_null_value;
+#else
+ bind->is_null = &bind->internal_is_null;
+#endif
if (!bind->length)
+#ifdef MYSQL5
bind->length = &bind->length_value;
+#else
+ bind->length = &bind->internal_length;
+#endif
}
void
@@ -611,11 +662,13 @@
case MYSQL_TYPE_MEDIUM_BLOB:
case MYSQL_TYPE_LONG_BLOB:
case MYSQL_TYPE_BLOB:
- case MYSQL_TYPE_VARCHAR:
case MYSQL_TYPE_VAR_STRING:
case MYSQL_TYPE_STRING:
case MYSQL_TYPE_DECIMAL:
+#ifdef MYSQL5
+ case MYSQL_TYPE_VARCHAR:
case MYSQL_TYPE_NEWDECIMAL:
+#endif
if ((m_stmt->update_max_length) && (((string *)buffer)->length() >
fPtr->max_length))
fPtr->max_length = ((string *)buffer)->length();
getFromString(bPtr, fPtr, buffer);
@@ -674,11 +727,13 @@
case MYSQL_TYPE_MEDIUM_BLOB:
case MYSQL_TYPE_LONG_BLOB:
case MYSQL_TYPE_BLOB:
- case MYSQL_TYPE_VARCHAR:
case MYSQL_TYPE_VAR_STRING:
case MYSQL_TYPE_STRING:
case MYSQL_TYPE_DECIMAL:
+#ifdef MYSQL5
+ case MYSQL_TYPE_VARCHAR:
case MYSQL_TYPE_NEWDECIMAL:
+#endif
result = new string(toString(liveResultSet->getAsString(colNo)));
break;
case MYSQL_TYPE_TIME:
@@ -736,11 +791,13 @@
case MYSQL_TYPE_MEDIUM_BLOB:
case MYSQL_TYPE_LONG_BLOB:
case MYSQL_TYPE_BLOB:
- case MYSQL_TYPE_VARCHAR:
case MYSQL_TYPE_VAR_STRING:
case MYSQL_TYPE_STRING:
case MYSQL_TYPE_DECIMAL:
+#ifdef MYSQL5
+ case MYSQL_TYPE_VARCHAR:
case MYSQL_TYPE_NEWDECIMAL:
+#endif
delete (string *)buffer;
break;
case MYSQL_TYPE_DATETIME:
@@ -784,7 +841,11 @@
if (params->long_data_used)
{
params->long_data_used = 0;
+#ifdef MYSQL5
delete (string *)(params->row_ptr);
+#else
+ delete (string *)(params->inter_buffer);
+#endif
}
}
}
Index: libmysequoia/src/MySQLAPI.cpp
diff -u libmysequoia/src/MySQLAPI.cpp:1.34 libmysequoia/src/MySQLAPI.cpp:1.35
--- libmysequoia/src/MySQLAPI.cpp:1.34 Thu Jan 26 11:56:28 2006
+++ libmysequoia/src/MySQLAPI.cpp Mon Jan 30 13:45:56 2006
@@ -278,8 +278,10 @@
//Because sequoia has only one timeout we set this two together
mysql->options.read_timeout = mysql->options.write_timeout = *(unsigned
int *) arg;
break;
+#ifdef MYSQL5
case MYSQL_REPORT_DATA_TRUNCATION:
mysql->options.report_data_truncation = *(my_bool *) arg;
+#endif
//Unsupported options ... they are set, but not used in any way
case MYSQL_OPT_CONNECT_TIMEOUT:
mysql->options.connect_timeout = *(unsigned int *) arg;
@@ -296,9 +298,11 @@
else
mysql->options.client_flag &= ~CLIENT_LOCAL_FILES;
break;
+#ifdef MYSQL5
case MYSQL_OPT_RECONNECT:
mysql->reconnect = *(my_bool *) arg;
break;
+#endif
//Options that are never will be supported
case MYSQL_OPT_NAMED_PIPE:
case MYSQL_SET_CHARSET_DIR:
@@ -964,8 +968,8 @@
mysql_get_client_info (void)
{
LOG4CXX_DEBUG(logger, "Entering mysql_get_client_info.");
- LOG4CXX_DEBUG(logger, "Leaving mysql_get_client_info.");
- return CAROB_MYSQL_CLIENT_INFO;
+ LOG4CXX_DEBUG(logger, "Leaving mysql_get_client_info: result = " <<
MYSQL_SERVER_VERSION);
+ return MYSQL_SERVER_VERSION;
}
/* Returns client version information as an integer. */
@@ -973,8 +977,8 @@
mysql_get_client_version (void)
{
LOG4CXX_DEBUG(logger, "Entering mysql_get_client_version.");
- LOG4CXX_DEBUG(logger, "Leaving mysql_get_client_version.");
- return CAROB_MYSQL_CLIENT_VERSION;
+ LOG4CXX_DEBUG(logger, "Leaving mysql_get_client_version: result = " <<
MYSQL_VERSION_ID);
+ return MYSQL_VERSION_ID;
}
/* Returns a string describing the connection. */
@@ -995,7 +999,7 @@
{
LOG4CXX_DEBUG(logger, "Entering mysql_get_server_info: mysql=" << mysql);
- const char *result = mysql ? mysql->server_version : 0;
+ const char *result = mysql ? MYSQL_SERVER_VERSION : 0;
LOG4CXX_DEBUG(logger, "Leaving mysql_get_server_info: result=" << result);
return result;
@@ -1198,7 +1202,8 @@
case STMT_ATTR_UPDATE_MAX_LENGTH:
*(my_bool *)arg = stmt->update_max_length;
break;
-
+
+#ifdef MYSQL5
case STMT_ATTR_CURSOR_TYPE:
*(ulong *)arg = stmt->flags;
break;
@@ -1206,7 +1211,8 @@
case STMT_ATTR_PREFETCH_ROWS:
*(ulong *)arg = stmt->prefetch_rows;
break;
-
+#endif
+
default:
result = true;
}
@@ -1239,6 +1245,7 @@
stmt->update_max_length = arg ? *(my_bool *)arg : false;
break;
+#ifdef MYSQL5
case STMT_ATTR_CURSOR_TYPE:
ulong flags;
flags = arg ? *(ulong *)arg : (ulong) CURSOR_TYPE_NO_CURSOR;
@@ -1259,7 +1266,8 @@
else
result = true;
break;
-
+#endif
+
default:
result = true;
}
Index: libmysequoia/src/Utils.cpp
diff -u libmysequoia/src/Utils.cpp:1.30 libmysequoia/src/Utils.cpp:1.31
--- libmysequoia/src/Utils.cpp:1.30 Fri Jan 27 14:37:33 2006
+++ libmysequoia/src/Utils.cpp Mon Jan 30 13:45:56 2006
@@ -176,9 +176,11 @@
{
switch (sqltype)
{
+#ifdef MYSQL5
case SQLT_BIT:
return MYSQL_TYPE_BIT;
break;
+#endif
case SQLT_BOOLEAN:
case SQLT_TINYINT:
return MYSQL_TYPE_TINY;
@@ -303,14 +305,14 @@
{
bool is_unsigned = (field->flags & UNSIGNED_FLAG) == UNSIGNED_FLAG;
int64_t time = *(char *)data;
-
- *bind->error = 0;
+ bool error = 0;
+
switch (bind->buffer_type)
{
case MYSQL_TYPE_TINY:
*(unsigned char *)bind->buffer = is_unsigned ? *(unsigned char *)data :
*(char *)data;
- *bind->error = bind->is_unsigned != is_unsigned && *(unsigned char
*)data > SCHAR_MAX;
+ error = bind->is_unsigned != is_unsigned && *(unsigned char *)data >
SCHAR_MAX;
break;
case MYSQL_TYPE_SHORT:
@@ -333,8 +335,10 @@
*(double *)bind->buffer = is_unsigned ? *(unsigned char *)data : *(char
*)data;
break;
- case MYSQL_TYPE_DECIMAL:
+#ifdef MYSQL5
case MYSQL_TYPE_NEWDECIMAL:
+#endif
+ case MYSQL_TYPE_DECIMAL:
case MYSQL_TYPE_TINY_BLOB:
case MYSQL_TYPE_MEDIUM_BLOB:
case MYSQL_TYPE_LONG_BLOB:
@@ -342,7 +346,7 @@
case MYSQL_TYPE_VAR_STRING:
case MYSQL_TYPE_STRING:
int len = snprintf((char *)bind->buffer, bind->buffer_length, "%hhd",
is_unsigned ? *(unsigned char *)data : *(char *)data);
- *bind->error = (len < 0) || ((unsigned int)len >= bind->buffer_length);
+ error = (len < 0) || ((unsigned int)len >= bind->buffer_length);
break;
case MYSQL_TYPE_TIME:
@@ -351,7 +355,7 @@
case MYSQL_TYPE_DATE:
convertDateTime(&time, (MYSQL_TIME *)bind->buffer, MYSQL_TIMESTAMP_DATE,
false);
- *bind->error = true;
+ error = true;
break;
case MYSQL_TYPE_DATETIME:
@@ -362,6 +366,10 @@
LOG4CXX_ERROR(logger, "Not implemented yet!");
break;
}
+
+#ifdef MYSQL5
+ *bind->error = error;
+#endif
}
void getFromShort(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
@@ -369,18 +377,18 @@
bool is_unsigned = (field->flags & UNSIGNED_FLAG) == UNSIGNED_FLAG;
int64_t time = *(short int *)data;
- *bind->error = 0;
+ bool error = 0;
switch (bind->buffer_type)
{
case MYSQL_TYPE_TINY:
*(unsigned char*)bind->buffer = is_unsigned ? *(unsigned short int
*)data : *(short int *)data;
- *bind->error = isTruncated(*(short int *)data, SCHAR_MIN, SCHAR_MAX,
UCHAR_MAX, is_unsigned);
+ error = isTruncated(*(short int *)data, SCHAR_MIN, SCHAR_MAX, UCHAR_MAX,
is_unsigned);
break;
case MYSQL_TYPE_SHORT:
*(unsigned short int *)bind->buffer = is_unsigned ? *(unsigned short int
*)data : *(short int *)data;
- *bind->error = bind->is_unsigned != is_unsigned && *(unsigned short int
*)data > SHRT_MAX;
+ error = bind->is_unsigned != is_unsigned && *(unsigned short int *)data
> SHRT_MAX;
break;
case MYSQL_TYPE_LONG:
@@ -399,8 +407,10 @@
*(double *)bind->buffer = is_unsigned ? *(unsigned short int *)data :
*(short int *)data;
break;
- case MYSQL_TYPE_DECIMAL:
+#ifdef MYSQL5
case MYSQL_TYPE_NEWDECIMAL:
+#endif
+ case MYSQL_TYPE_DECIMAL:
case MYSQL_TYPE_TINY_BLOB:
case MYSQL_TYPE_MEDIUM_BLOB:
case MYSQL_TYPE_LONG_BLOB:
@@ -408,7 +418,7 @@
case MYSQL_TYPE_VAR_STRING:
case MYSQL_TYPE_STRING:
int len = snprintf((char *)bind->buffer, bind->buffer_length, "%hd",
is_unsigned ? *(unsigned short int *)data : *(short int *)data);
- *bind->error = (len < 0) || ((unsigned int)len >= bind->buffer_length);
+ error = (len < 0) || ((unsigned int)len >= bind->buffer_length);
break;
case MYSQL_TYPE_TIME:
@@ -427,6 +437,10 @@
LOG4CXX_ERROR(logger, "Not implemented yet!");
break;
}
+
+#ifdef MYSQL5
+ *bind->error = error;
+#endif
}
void getFromLong(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
@@ -434,23 +448,23 @@
bool is_unsigned = (field->flags & UNSIGNED_FLAG) == UNSIGNED_FLAG;
int64_t time = *(int *)data;
- *bind->error = 0;
+ bool error = 0;
switch (bind->buffer_type)
{
case MYSQL_TYPE_TINY:
*(unsigned char*)bind->buffer = is_unsigned ? *(unsigned int *)data :
*(int *)data;
- *bind->error = isTruncated(*(int *)data, SCHAR_MIN, SCHAR_MAX,
UCHAR_MAX, is_unsigned);
+ error = isTruncated(*(int *)data, SCHAR_MIN, SCHAR_MAX, UCHAR_MAX,
is_unsigned);
break;
case MYSQL_TYPE_SHORT:
*(unsigned short int*)bind->buffer = is_unsigned ? *(unsigned int *)data
: *(int *)data;
- *bind->error = isTruncated(*(int *)data, SHRT_MIN, SHRT_MAX, USHRT_MAX,
is_unsigned);
+ error = isTruncated(*(int *)data, SHRT_MIN, SHRT_MAX, USHRT_MAX,
is_unsigned);
break;
case MYSQL_TYPE_LONG:
*(unsigned int *)bind->buffer = is_unsigned ? *(unsigned int *)data :
*(int *)data;
- *bind->error = bind->is_unsigned != is_unsigned && *(unsigned int *)data
> INT_MAX;
+ error = bind->is_unsigned != is_unsigned && *(unsigned int *)data >
INT_MAX;
break;
case MYSQL_TYPE_LONGLONG:
@@ -465,8 +479,10 @@
*(double *)bind->buffer = is_unsigned ? *(unsigned int *)data : *(int
*)data;
break;
- case MYSQL_TYPE_DECIMAL:
+#ifdef MYSQL5
case MYSQL_TYPE_NEWDECIMAL:
+#endif
+ case MYSQL_TYPE_DECIMAL:
case MYSQL_TYPE_TINY_BLOB:
case MYSQL_TYPE_MEDIUM_BLOB:
case MYSQL_TYPE_LONG_BLOB:
@@ -474,7 +490,7 @@
case MYSQL_TYPE_VAR_STRING:
case MYSQL_TYPE_STRING:
int len = snprintf((char *)bind->buffer, bind->buffer_length, "%d",
is_unsigned ? *(unsigned int *)data : *(int *)data);
- *bind->error = (len < 0) || ((unsigned int)len >= bind->buffer_length);
+ error = (len < 0) || ((unsigned int)len >= bind->buffer_length);
break;
case MYSQL_TYPE_TIME:
@@ -483,7 +499,7 @@
case MYSQL_TYPE_DATE:
convertDateTime(&time, (MYSQL_TIME *)bind->buffer, MYSQL_TIMESTAMP_DATE,
false);
- *bind->error = true;
+ error = true;
break;
case MYSQL_TYPE_DATETIME:
@@ -494,34 +510,38 @@
LOG4CXX_ERROR(logger, "Not implemented yet!");
break;
}
+
+#ifdef MYSQL5
+ *bind->error = error;
+#endif
}
void getFromLonglong(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
{
bool is_unsigned = (field->flags & UNSIGNED_FLAG) == UNSIGNED_FLAG;
- *bind->error = 0;
+ bool error = 0;
switch (bind->buffer_type)
{
case MYSQL_TYPE_TINY:
*(unsigned char*)bind->buffer = is_unsigned ? *(uint64_t *)data :
*(int64_t *)data;
- *bind->error = isTruncated(*(int64_t *)data, SCHAR_MIN, SCHAR_MAX,
UCHAR_MAX, is_unsigned);
+ error = isTruncated(*(int64_t *)data, SCHAR_MIN, SCHAR_MAX, UCHAR_MAX,
is_unsigned);
break;
case MYSQL_TYPE_SHORT:
*(unsigned short int*)bind->buffer = is_unsigned ? *(uint64_t *)data :
*(int64_t *)data;
- *bind->error = isTruncated(*(int64_t *)data, SHRT_MIN, SHRT_MAX,
USHRT_MAX, is_unsigned);
+ error = isTruncated(*(int64_t *)data, SHRT_MIN, SHRT_MAX, USHRT_MAX,
is_unsigned);
break;
case MYSQL_TYPE_LONG:
*(unsigned int*)bind->buffer = is_unsigned ? *(uint64_t *)data :
*(int64_t *)data;
- *bind->error = isTruncated(*(int64_t *)data, INT_MIN, INT_MAX, UINT_MAX,
is_unsigned);
+ error = isTruncated(*(int64_t *)data, INT_MIN, INT_MAX, UINT_MAX,
is_unsigned);
break;
case MYSQL_TYPE_LONGLONG:
*(uint64_t *)bind->buffer = is_unsigned ? *(uint64_t *)data : *(int64_t
*)data;
- *bind->error = bind->is_unsigned != is_unsigned && *(uint64_t *)data >
LONG_MAX;
+ error = bind->is_unsigned != is_unsigned && *(uint64_t *)data > LONG_MAX;
break;
case MYSQL_TYPE_FLOAT:
@@ -534,8 +554,10 @@
*(double *)bind->buffer = is_unsigned ? *(uint64_t *)data : *(int64_t
*)data;
break;
- case MYSQL_TYPE_DECIMAL:
+#ifdef MYSQL5
case MYSQL_TYPE_NEWDECIMAL:
+#endif
+ case MYSQL_TYPE_DECIMAL:
case MYSQL_TYPE_TINY_BLOB:
case MYSQL_TYPE_MEDIUM_BLOB:
case MYSQL_TYPE_LONG_BLOB:
@@ -543,12 +565,12 @@
case MYSQL_TYPE_VAR_STRING:
case MYSQL_TYPE_STRING:
int len = snprintf((char *)bind->buffer, bind->buffer_length, "%lld",
is_unsigned ? *(uint64_t *)data : *(int64_t *)data);
- *bind->error = (len < 0) || ((unsigned int)len >= bind->buffer_length);
+ error = (len < 0) || ((unsigned int)len >= bind->buffer_length);
break;
case MYSQL_TYPE_TIME:
convertDateTime(data, (MYSQL_TIME *)bind->buffer, MYSQL_TIMESTAMP_TIME,
false);
- *bind->error = true;
+ error = true;
break;
case MYSQL_TYPE_DATE:
@@ -563,6 +585,10 @@
LOG4CXX_ERROR(logger, "Not implemented yet!");
break;
}
+
+#ifdef MYSQL5
+ *bind->error = error;
+#endif
}
void getFromFloat(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
@@ -571,28 +597,28 @@
float ff = f < 0 ? -floorf(-f) : floorf(f);
int64_t datetime = (int64_t)ff;
- *bind->error = 0;
+ bool error = 0;
switch (bind->buffer_type)
{
case MYSQL_TYPE_TINY:
*(unsigned char*)bind->buffer = bind->is_unsigned ? (unsigned char)f :
(char)f;
- *bind->error = ff != (bind->is_unsigned ? (float) ((unsigned char)f) :
(float) ((char)f));
+ error = ff != (bind->is_unsigned ? (float) ((unsigned char)f) : (float)
((char)f));
break;
case MYSQL_TYPE_SHORT:
*(unsigned short int*)bind->buffer = bind->is_unsigned ? (unsigned short
int)f : (short int)f;
- *bind->error = ff != (bind->is_unsigned ? (float) ((unsigned short
int)f) : (float) ((short int)f));
+ error = ff != (bind->is_unsigned ? (float) ((unsigned short int)f) :
(float) ((short int)f));
break;
case MYSQL_TYPE_LONG:
*(unsigned int*)bind->buffer = bind->is_unsigned ? (unsigned int)f :
(int)f;
- *bind->error = ff != (bind->is_unsigned ? (float) ((unsigned int)f) :
(float) ((int)f));
+ error = ff != (bind->is_unsigned ? (float) ((unsigned int)f) : (float)
((int)f));
break;
case MYSQL_TYPE_LONGLONG:
*(uint64_t*)bind->buffer = bind->is_unsigned ? (uint64_t)f : (int64_t)f;
- *bind->error = ff != (bind->is_unsigned ? (float) ((uint64_t)f) :
(float) ((int64_t)f));
+ error = ff != (bind->is_unsigned ? (float) ((uint64_t)f) : (float)
((int64_t)f));
break;
case MYSQL_TYPE_FLOAT:
@@ -603,8 +629,10 @@
*(double *)bind->buffer = *(float *)data;
break;
- case MYSQL_TYPE_DECIMAL:
+#ifdef MYSQL5
case MYSQL_TYPE_NEWDECIMAL:
+#endif
+ case MYSQL_TYPE_DECIMAL:
case MYSQL_TYPE_TINY_BLOB:
case MYSQL_TYPE_MEDIUM_BLOB:
case MYSQL_TYPE_LONG_BLOB:
@@ -613,12 +641,12 @@
case MYSQL_TYPE_STRING:
// TODO precision
int len = snprintf((char *)bind->buffer, bind->buffer_length, "%.*f",
(int)field->decimals, f);
- *bind->error = (len < 0) || ((unsigned int)len >= bind->buffer_length);
+ error = (len < 0) || ((unsigned int)len >= bind->buffer_length);
break;
case MYSQL_TYPE_TIME:
convertDateTime(&datetime, (MYSQL_TIME *)bind->buffer,
MYSQL_TIMESTAMP_TIME, false);
- *bind->error = true;
+ error = true;
break;
case MYSQL_TYPE_DATE:
@@ -633,6 +661,10 @@
LOG4CXX_ERROR(logger, "Not implemented yet!");
break;
}
+
+#ifdef MYSQL5
+ *bind->error = error;
+#endif
}
void getFromDouble(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
@@ -641,41 +673,43 @@
double df = d < 0 ? -floor(-d) : floorf(d);
int64_t datetime = (int64_t)df;
- *bind->error = 0;
+ bool error = 0;
switch (bind->buffer_type)
{
case MYSQL_TYPE_TINY:
*(unsigned char*)bind->buffer = bind->is_unsigned ? (unsigned char)d :
(char)d;
- *bind->error = df != (bind->is_unsigned ? (double) ((unsigned char)d) :
(double) ((char)d));
+ error = df != (bind->is_unsigned ? (double) ((unsigned char)d) :
(double) ((char)d));
break;
case MYSQL_TYPE_SHORT:
*(unsigned short int*)bind->buffer = bind->is_unsigned ? (unsigned short
int)d : (short int)d;
- *bind->error = df != (bind->is_unsigned ? (double) ((unsigned short
int)d) : (double) ((short int)d));
+ error = df != (bind->is_unsigned ? (double) ((unsigned short int)d) :
(double) ((short int)d));
break;
case MYSQL_TYPE_LONG:
*(unsigned int*)bind->buffer = bind->is_unsigned ? (unsigned int)d :
(int)d;
- *bind->error = df != (bind->is_unsigned ? (double) ((unsigned int)d) :
(double) ((int)d));
+ error = df != (bind->is_unsigned ? (double) ((unsigned int)d) : (double)
((int)d));
break;
case MYSQL_TYPE_LONGLONG:
*(uint64_t*)bind->buffer = bind->is_unsigned ? (uint64_t)d : (int64_t)d;
- *bind->error = df != (bind->is_unsigned ? (double) ((uint64_t)d) :
(double) ((int64_t)d));
+ error = df != (bind->is_unsigned ? (double) ((uint64_t)d) : (double)
((int64_t)d));
break;
case MYSQL_TYPE_FLOAT:
*(float *)bind->buffer = (float)d;
- *bind->error = d != (double) (*(float *)bind->buffer);
+ error = d != (double) (*(float *)bind->buffer);
break;
case MYSQL_TYPE_DOUBLE:
*(double *)bind->buffer = d;
break;
- case MYSQL_TYPE_DECIMAL:
+#ifdef MYSQL5
case MYSQL_TYPE_NEWDECIMAL:
+#endif
+ case MYSQL_TYPE_DECIMAL:
case MYSQL_TYPE_TINY_BLOB:
case MYSQL_TYPE_MEDIUM_BLOB:
case MYSQL_TYPE_LONG_BLOB:
@@ -683,12 +717,12 @@
case MYSQL_TYPE_VAR_STRING:
case MYSQL_TYPE_STRING:
int len = snprintf((char *)bind->buffer, bind->buffer_length, "%.*f",
(int)field->decimals, d);
- *bind->error = (len < 0) || ((unsigned int)len >= bind->buffer_length);
+ error = (len < 0) || ((unsigned int)len >= bind->buffer_length);
break;
case MYSQL_TYPE_TIME:
convertDateTime(&datetime, (MYSQL_TIME *)bind->buffer,
MYSQL_TIMESTAMP_TIME, false);
- *bind->error = true;
+ error = true;
break;
case MYSQL_TYPE_DATE:
@@ -703,6 +737,10 @@
LOG4CXX_ERROR(logger, "Not implemented yet!");
break;
}
+
+#ifdef MYSQL5
+ *bind->error = error;
+#endif
}
void getFromString(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
@@ -713,7 +751,7 @@
float f;
double d;
- *bind->error = 0;
+ bool error = 0;
switch (bind->buffer_type)
{
@@ -721,58 +759,60 @@
if (convert<int64_t, string>(v, *s))
{
*(unsigned char *)bind->buffer = (char)v;
- *bind->error = isTruncated(v, SCHAR_MIN, SCHAR_MAX, UCHAR_MAX,
bind->is_unsigned);
+ error = isTruncated(v, SCHAR_MIN, SCHAR_MAX, UCHAR_MAX,
bind->is_unsigned);
}
else
- *bind->error = true;
+ error = true;
break;
case MYSQL_TYPE_SHORT:
if (convert<int64_t, string>(v, *s))
{
*(unsigned short int *)bind->buffer = (short int)v;
- *bind->error = isTruncated(v, SHRT_MIN, SHRT_MAX, USHRT_MAX,
bind->is_unsigned);
+ error = isTruncated(v, SHRT_MIN, SHRT_MAX, USHRT_MAX,
bind->is_unsigned);
}
else
- *bind->error = true;
+ error = true;
break;
case MYSQL_TYPE_LONG:
if (convert<int64_t, string>(v, *s))
{
*(unsigned int *)bind->buffer = (int)v;
- *bind->error = isTruncated(v, INT_MIN, INT_MAX, UINT_MAX,
bind->is_unsigned);
+ error = isTruncated(v, INT_MIN, INT_MAX, UINT_MAX, bind->is_unsigned);
}
else
- *bind->error = true;
+ error = true;
break;
case MYSQL_TYPE_LONGLONG:
if (convert<int64_t, string>(v, *s))
{
*(uint64_t *)bind->buffer = (int64_t)v;
- *bind->error = bind->is_unsigned && v < 0;
+ error = bind->is_unsigned && v < 0;
}
else
- *bind->error = true;
+ error = true;
break;
case MYSQL_TYPE_FLOAT:
if (convert<float, string>(f, *s))
*(float *)bind->buffer = f;
else
- *bind->error = true;
+ error = true;
break;
case MYSQL_TYPE_DOUBLE:
if (convert<double, string>(d, *s))
*(double *)bind->buffer = d;
else
- *bind->error = true;
+ error = true;
break;
- case MYSQL_TYPE_DECIMAL:
+#ifdef MYSQL5
case MYSQL_TYPE_NEWDECIMAL:
+#endif
+ case MYSQL_TYPE_DECIMAL:
case MYSQL_TYPE_TINY_BLOB:
case MYSQL_TYPE_MEDIUM_BLOB:
case MYSQL_TYPE_LONG_BLOB:
@@ -785,39 +825,39 @@
if (length < bind->buffer_length)
((char *)bind->buffer)[length] = '\0';
*bind->length = s_length;
- *bind->error = s_length - bind->offset > bind->buffer_length;
+ error = s_length - bind->offset > bind->buffer_length;
break;
case MYSQL_TYPE_TIME:
if (str_to_MYSQL_TIME(s->data(), (MYSQL_TIME *)bind->buffer))
{
- *bind->error = ((MYSQL_TIME *)bind->buffer)->time_type !=
MYSQL_TIMESTAMP_TIME;
+ error = ((MYSQL_TIME *)bind->buffer)->time_type !=
MYSQL_TIMESTAMP_TIME;
}
else
{
- *bind->error = true;
+ error = true;
}
break;
case MYSQL_TYPE_DATE:
if (str_to_MYSQL_TIME(s->data(), (MYSQL_TIME *)bind->buffer))
{
- *bind->error = ((MYSQL_TIME *)bind->buffer)->time_type !=
MYSQL_TIMESTAMP_DATE;
+ error = ((MYSQL_TIME *)bind->buffer)->time_type !=
MYSQL_TIMESTAMP_DATE;
}
else
{
- *bind->error = true;
+ error = true;
}
break;
case MYSQL_TYPE_DATETIME:
if (str_to_MYSQL_TIME(s->data(), (MYSQL_TIME *)bind->buffer))
{
- *bind->error = ((MYSQL_TIME *)bind->buffer)->time_type !=
MYSQL_TIMESTAMP_DATETIME;
+ error = ((MYSQL_TIME *)bind->buffer)->time_type !=
MYSQL_TIMESTAMP_DATETIME;
}
else
{
- *bind->error = true;
+ error = true;
}
break;
@@ -825,6 +865,10 @@
LOG4CXX_ERROR(logger, "Not implemented yet!");
break;
}
+
+#ifdef MYSQL5
+ *bind->error = error;
+#endif
}
void getFromTime(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
@@ -833,23 +877,23 @@
MYSQL_TIME time;
int64_t date = *(int *)data;
- *bind->error = 0;
+ bool error = 0;
switch (bind->buffer_type)
{
case MYSQL_TYPE_TINY:
*(unsigned char*)bind->buffer = is_unsigned ? *(unsigned int *)data :
*(int *)data;
- *bind->error = isTruncated(*(int *)data, SCHAR_MIN, SCHAR_MAX,
UCHAR_MAX, is_unsigned);
+ error = isTruncated(*(int *)data, SCHAR_MIN, SCHAR_MAX, UCHAR_MAX,
is_unsigned);
break;
case MYSQL_TYPE_SHORT:
*(unsigned short int*)bind->buffer = is_unsigned ? *(unsigned int *)data
: *(int *)data;
- *bind->error = isTruncated(*(int *)data, SHRT_MIN, SHRT_MAX, USHRT_MAX,
is_unsigned);
+ error = isTruncated(*(int *)data, SHRT_MIN, SHRT_MAX, USHRT_MAX,
is_unsigned);
break;
case MYSQL_TYPE_LONG:
*(unsigned int *)bind->buffer = is_unsigned ? *(unsigned int *)data :
*(int *)data;
- *bind->error = bind->is_unsigned != is_unsigned && *(unsigned int *)data
> INT_MAX;
+ error = bind->is_unsigned != is_unsigned && *(unsigned int *)data >
INT_MAX;
break;
case MYSQL_TYPE_LONGLONG:
@@ -864,8 +908,10 @@
*(double *)bind->buffer = is_unsigned ? *(unsigned int *)data : *(int
*)data;
break;
- case MYSQL_TYPE_DECIMAL:
+#ifdef MYSQL5
case MYSQL_TYPE_NEWDECIMAL:
+#endif
+ case MYSQL_TYPE_DECIMAL:
case MYSQL_TYPE_TINY_BLOB:
case MYSQL_TYPE_MEDIUM_BLOB:
case MYSQL_TYPE_LONG_BLOB:
@@ -873,7 +919,7 @@
case MYSQL_TYPE_VAR_STRING:
case MYSQL_TYPE_STRING:
convertDateTime(&date, &time, MYSQL_TIMESTAMP_TIME, false);
- *bind->error = MYSQL_TIME_to_str(&time, (char *)bind->buffer,
bind->buffer_length);
+ error = MYSQL_TIME_to_str(&time, (char *)bind->buffer,
bind->buffer_length);
*bind->length = strlen((char *)bind->buffer);
break;
@@ -883,7 +929,7 @@
case MYSQL_TYPE_DATE:
convertDateTime(&date, (MYSQL_TIME *)bind->buffer, MYSQL_TIMESTAMP_DATE,
false);
- *bind->error = true;
+ error = true;
break;
case MYSQL_TYPE_DATETIME:
@@ -894,6 +940,10 @@
LOG4CXX_ERROR(logger, "Not implemented yet!");
break;
}
+
+#ifdef MYSQL5
+ *bind->error = error;
+#endif
}
void getFromDate(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
@@ -901,28 +951,28 @@
bool is_unsigned = (field->flags & UNSIGNED_FLAG) == UNSIGNED_FLAG;
MYSQL_TIME date;
- *bind->error = 0;
+ bool error = 0;
switch (bind->buffer_type)
{
case MYSQL_TYPE_TINY:
*(unsigned char*)bind->buffer = is_unsigned ? *(uint64_t *)data :
*(int64_t *)data;
- *bind->error = isTruncated(*(int64_t *)data, SCHAR_MIN, SCHAR_MAX,
UCHAR_MAX, is_unsigned);
+ error = isTruncated(*(int64_t *)data, SCHAR_MIN, SCHAR_MAX, UCHAR_MAX,
is_unsigned);
break;
case MYSQL_TYPE_SHORT:
*(unsigned short int*)bind->buffer = is_unsigned ? *(uint64_t *)data :
*(int64_t *)data;
- *bind->error = isTruncated(*(int64_t *)data, SHRT_MIN, SHRT_MAX,
USHRT_MAX, is_unsigned);
+ error = isTruncated(*(int64_t *)data, SHRT_MIN, SHRT_MAX, USHRT_MAX,
is_unsigned);
break;
case MYSQL_TYPE_LONG:
*(unsigned int*)bind->buffer = is_unsigned ? *(uint64_t *)data :
*(int64_t *)data;
- *bind->error = isTruncated(*(int64_t *)data, INT_MIN, INT_MAX, UINT_MAX,
is_unsigned);
+ error = isTruncated(*(int64_t *)data, INT_MIN, INT_MAX, UINT_MAX,
is_unsigned);
break;
case MYSQL_TYPE_LONGLONG:
*(uint64_t *)bind->buffer = is_unsigned ? *(uint64_t *)data : *(int64_t
*)data;
- *bind->error = bind->is_unsigned != is_unsigned && *(uint64_t *)data >
LONG_MAX;
+ error = bind->is_unsigned != is_unsigned && *(uint64_t *)data > LONG_MAX;
break;
case MYSQL_TYPE_FLOAT:
@@ -935,8 +985,10 @@
*(double *)bind->buffer = is_unsigned ? *(uint64_t *)data : *(int64_t
*)data;
break;
- case MYSQL_TYPE_DECIMAL:
+#ifdef MYSQL5
case MYSQL_TYPE_NEWDECIMAL:
+#endif
+ case MYSQL_TYPE_DECIMAL:
case MYSQL_TYPE_TINY_BLOB:
case MYSQL_TYPE_MEDIUM_BLOB:
case MYSQL_TYPE_LONG_BLOB:
@@ -944,13 +996,13 @@
case MYSQL_TYPE_VAR_STRING:
case MYSQL_TYPE_STRING:
convertDateTime(data, &date, MYSQL_TIMESTAMP_DATE, false);
- *bind->error = MYSQL_TIME_to_str(&date, (char *)bind->buffer,
bind->buffer_length);
+ error = MYSQL_TIME_to_str(&date, (char *)bind->buffer,
bind->buffer_length);
*bind->length = strlen((char *)bind->buffer);
break;
case MYSQL_TYPE_TIME:
convertDateTime(data, (MYSQL_TIME *)bind->buffer, MYSQL_TIMESTAMP_TIME,
false);
- *bind->error = true;
+ error = true;
break;
case MYSQL_TYPE_DATE:
@@ -965,6 +1017,10 @@
LOG4CXX_ERROR(logger, "Not implemented yet!");
break;
}
+
+#ifdef MYSQL5
+ *bind->error = error;
+#endif
}
void getFromDateTime(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
@@ -972,28 +1028,28 @@
bool is_unsigned = (field->flags & UNSIGNED_FLAG) == UNSIGNED_FLAG;
MYSQL_TIME datetime;
- *bind->error = 0;
+ bool error = 0;
switch (bind->buffer_type)
{
case MYSQL_TYPE_TINY:
*(unsigned char*)bind->buffer = is_unsigned ? *(uint64_t *)data :
*(int64_t *)data;
- *bind->error = isTruncated(*(int64_t *)data, SCHAR_MIN, SCHAR_MAX,
UCHAR_MAX, is_unsigned);
+ error = isTruncated(*(int64_t *)data, SCHAR_MIN, SCHAR_MAX, UCHAR_MAX,
is_unsigned);
break;
case MYSQL_TYPE_SHORT:
*(unsigned short int*)bind->buffer = is_unsigned ? *(uint64_t *)data :
*(int64_t *)data;
- *bind->error = isTruncated(*(int64_t *)data, SHRT_MIN, SHRT_MAX,
USHRT_MAX, is_unsigned);
+ error = isTruncated(*(int64_t *)data, SHRT_MIN, SHRT_MAX, USHRT_MAX,
is_unsigned);
break;
case MYSQL_TYPE_LONG:
*(unsigned int*)bind->buffer = is_unsigned ? *(uint64_t *)data :
*(int64_t *)data;
- *bind->error = isTruncated(*(int64_t *)data, INT_MIN, INT_MAX, UINT_MAX,
is_unsigned);
+ error = isTruncated(*(int64_t *)data, INT_MIN, INT_MAX, UINT_MAX,
is_unsigned);
break;
case MYSQL_TYPE_LONGLONG:
*(uint64_t *)bind->buffer = is_unsigned ? *(uint64_t *)data : *(int64_t
*)data;
- *bind->error = bind->is_unsigned != is_unsigned && *(uint64_t *)data >
LONG_MAX;
+ error = bind->is_unsigned != is_unsigned && *(uint64_t *)data > LONG_MAX;
break;
case MYSQL_TYPE_FLOAT:
@@ -1006,8 +1062,10 @@
*(double *)bind->buffer = is_unsigned ? *(uint64_t *)data : *(int64_t
*)data;
break;
- case MYSQL_TYPE_DECIMAL:
+#ifdef MYSQL5
case MYSQL_TYPE_NEWDECIMAL:
+#endif
+ case MYSQL_TYPE_DECIMAL:
case MYSQL_TYPE_TINY_BLOB:
case MYSQL_TYPE_MEDIUM_BLOB:
case MYSQL_TYPE_LONG_BLOB:
@@ -1015,18 +1073,18 @@
case MYSQL_TYPE_VAR_STRING:
case MYSQL_TYPE_STRING:
convertDateTime(data, &datetime, MYSQL_TIMESTAMP_DATETIME, true);
- *bind->error = MYSQL_TIME_to_str(&datetime, (char *)bind->buffer,
bind->buffer_length);
+ error = MYSQL_TIME_to_str(&datetime, (char *)bind->buffer,
bind->buffer_length);
*bind->length = strlen((char *)bind->buffer);
break;
case MYSQL_TYPE_TIME:
convertDateTime(data, (MYSQL_TIME *)bind->buffer, MYSQL_TIMESTAMP_TIME,
true);
- *bind->error = true;
+ error = true;
break;
case MYSQL_TYPE_DATE:
convertDateTime(data, (MYSQL_TIME *)bind->buffer, MYSQL_TIMESTAMP_DATE,
true);
- *bind->error = true;
+ error = true;
break;
case MYSQL_TYPE_DATETIME:
@@ -1037,6 +1095,10 @@
LOG4CXX_ERROR(logger, "Not implemented yet!");
break;
}
+
+#ifdef MYSQL5
+ *bind->error = error;
+#endif
}
bool MYSQL_TIME_to_str(MYSQL_TIME *t, char *s, int maxlen)
_______________________________________________
Carob-commits mailing list
[email protected]
https://forge.continuent.org/mailman/listinfo/carob-commits