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

Reply via email to