Date: Thursday, January 19, 2006 @ 11:34:47
Author: csaba
Path: /cvsroot/carob/libmysequoia/src
Modified: Utils.cpp (1.24 -> 1.25)
All planned data conversion is ready except converting from string to time,date
and datetime.
-----------+
Utils.cpp | 76 ++++++++++++++++++++++++++++++++++++++----------------------
1 files changed, 49 insertions(+), 27 deletions(-)
Index: libmysequoia/src/Utils.cpp
diff -u libmysequoia/src/Utils.cpp:1.24 libmysequoia/src/Utils.cpp:1.25
--- libmysequoia/src/Utils.cpp:1.24 Thu Jan 19 10:51:44 2006
+++ libmysequoia/src/Utils.cpp Thu Jan 19 11:34:47 2006
@@ -599,6 +599,7 @@
{
float f = *(float *)data;
float ff = f < 0 ? -floorf(-f) : floorf(f);
+ int datetime = (int64_t)ff;
*bind->error = 0;
@@ -646,15 +647,16 @@
break;
case MYSQL_TYPE_TIME:
- LOG4CXX_ERROR(logger, "Not implemented yet!");
+ convertDateTime(&datetime, (MYSQL_TIME *)bind->buffer,
MYSQL_TIMESTAMP_TIME, false);
+ *bind->error = true;
break;
case MYSQL_TYPE_DATE:
- LOG4CXX_ERROR(logger, "Not implemented yet!");
+ convertDateTime(&datetime, (MYSQL_TIME *)bind->buffer,
MYSQL_TIMESTAMP_DATE, false);
break;
case MYSQL_TYPE_DATETIME:
- LOG4CXX_ERROR(logger, "Not implemented yet!");
+ convertDateTime(&datetime, (MYSQL_TIME *)bind->buffer,
MYSQL_TIMESTAMP_DATETIME, false);
break;
default:
@@ -667,6 +669,7 @@
{
double d = *(double *)data;
double df = d < 0 ? -floor(-d) : floorf(d);
+ int datetime = (int64_t)df;
*bind->error = 0;
@@ -714,15 +717,16 @@
break;
case MYSQL_TYPE_TIME:
- LOG4CXX_ERROR(logger, "Not implemented yet!");
+ convertDateTime(&datetime, (MYSQL_TIME *)bind->buffer,
MYSQL_TIMESTAMP_TIME, false);
+ *bind->error = true;
break;
case MYSQL_TYPE_DATE:
- LOG4CXX_ERROR(logger, "Not implemented yet!");
+ convertDateTime(&datetime, (MYSQL_TIME *)bind->buffer,
MYSQL_TIMESTAMP_DATE, false);
break;
case MYSQL_TYPE_DATETIME:
- LOG4CXX_ERROR(logger, "Not implemented yet!");
+ convertDateTime(&datetime, (MYSQL_TIME *)bind->buffer,
MYSQL_TIMESTAMP_DATETIME, false);
break;
default:
@@ -834,6 +838,7 @@
void getFromTime(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
{
+ bool is_unsigned = (field->flags & UNSIGNED_FLAG) == UNSIGNED_FLAG;
MYSQL_TIME time;
*bind->error = 0;
@@ -841,29 +846,32 @@
switch (bind->buffer_type)
{
case MYSQL_TYPE_TINY:
- LOG4CXX_ERROR(logger, "Not implemented yet!");
+ *(unsigned char*)bind->buffer = is_unsigned ? *(unsigned int *)data :
*(int *)data;
+ *bind->error = isTruncated(*(int *)data, SCHAR_MIN, SCHAR_MAX,
UCHAR_MAX, is_unsigned);
break;
case MYSQL_TYPE_SHORT:
- LOG4CXX_ERROR(logger, "Not implemented yet!");
+ *(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);
break;
case MYSQL_TYPE_LONG:
- LOG4CXX_ERROR(logger, "Not implemented yet!");
+ *(unsigned int *)bind->buffer = is_unsigned ? *(unsigned int *)data :
*(int *)data;
+ *bind->error = bind->is_unsigned != is_unsigned && *(unsigned int *)data
> INT_MAX;
break;
case MYSQL_TYPE_LONGLONG:
- LOG4CXX_ERROR(logger, "Not implemented yet!");
+ *(uint64_t *)bind->buffer = is_unsigned ? *(unsigned int *)data : *(int
*)data;
break;
case MYSQL_TYPE_FLOAT:
- LOG4CXX_ERROR(logger, "Not implemented yet!");
+ *(float *)bind->buffer = is_unsigned ? *(unsigned int *)data : *(int
*)data;
break;
-
+
case MYSQL_TYPE_DOUBLE:
- LOG4CXX_ERROR(logger, "Not implemented yet!");
+ *(double *)bind->buffer = is_unsigned ? *(unsigned int *)data : *(int
*)data;
break;
-
+
case MYSQL_TYPE_DECIMAL:
case MYSQL_TYPE_NEWDECIMAL:
case MYSQL_TYPE_TINY_BLOB:
@@ -898,6 +906,7 @@
void getFromDate(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
{
+ bool is_unsigned = (field->flags & UNSIGNED_FLAG) == UNSIGNED_FLAG;
MYSQL_TIME date;
*bind->error = 0;
@@ -905,29 +914,35 @@
switch (bind->buffer_type)
{
case MYSQL_TYPE_TINY:
- LOG4CXX_ERROR(logger, "Not implemented yet!");
+ *(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);
break;
case MYSQL_TYPE_SHORT:
- LOG4CXX_ERROR(logger, "Not implemented yet!");
+ *(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);
break;
case MYSQL_TYPE_LONG:
- LOG4CXX_ERROR(logger, "Not implemented yet!");
+ *(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);
break;
case MYSQL_TYPE_LONGLONG:
- LOG4CXX_ERROR(logger, "Not implemented yet!");
+ *(uint64_t *)bind->buffer = is_unsigned ? *(uint64_t *)data : *(int64_t
*)data;
+ *bind->error = bind->is_unsigned != is_unsigned && *(uint64_t *)data >
LONG_MAX;
break;
case MYSQL_TYPE_FLOAT:
- LOG4CXX_ERROR(logger, "Not implemented yet!");
+ // TODO check overflow
+ *(float *)bind->buffer = is_unsigned ? *(uint64_t *)data : *(int64_t
*)data;
break;
case MYSQL_TYPE_DOUBLE:
- LOG4CXX_ERROR(logger, "Not implemented yet!");
+ // TODO check overflow
+ *(double *)bind->buffer = is_unsigned ? *(uint64_t *)data : *(int64_t
*)data;
break;
-
+
case MYSQL_TYPE_DECIMAL:
case MYSQL_TYPE_NEWDECIMAL:
case MYSQL_TYPE_TINY_BLOB:
@@ -962,6 +977,7 @@
void getFromDateTime(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
{
+ bool is_unsigned = (field->flags & UNSIGNED_FLAG) == UNSIGNED_FLAG;
MYSQL_TIME datetime;
*bind->error = 0;
@@ -969,27 +985,33 @@
switch (bind->buffer_type)
{
case MYSQL_TYPE_TINY:
- LOG4CXX_ERROR(logger, "Not implemented yet!");
+ *(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);
break;
case MYSQL_TYPE_SHORT:
- LOG4CXX_ERROR(logger, "Not implemented yet!");
+ *(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);
break;
case MYSQL_TYPE_LONG:
- LOG4CXX_ERROR(logger, "Not implemented yet!");
+ *(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);
break;
case MYSQL_TYPE_LONGLONG:
- LOG4CXX_ERROR(logger, "Not implemented yet!");
+ *(uint64_t *)bind->buffer = is_unsigned ? *(uint64_t *)data : *(int64_t
*)data;
+ *bind->error = bind->is_unsigned != is_unsigned && *(uint64_t *)data >
LONG_MAX;
break;
case MYSQL_TYPE_FLOAT:
- LOG4CXX_ERROR(logger, "Not implemented yet!");
+ // TODO check overflow
+ *(float *)bind->buffer = is_unsigned ? *(uint64_t *)data : *(int64_t
*)data;
break;
case MYSQL_TYPE_DOUBLE:
- LOG4CXX_ERROR(logger, "Not implemented yet!");
+ // TODO check overflow
+ *(double *)bind->buffer = is_unsigned ? *(uint64_t *)data : *(int64_t
*)data;
break;
case MYSQL_TYPE_DECIMAL:
_______________________________________________
Carob-commits mailing list
[email protected]
https://forge.continuent.org/mailman/listinfo/carob-commits