Date: Thursday, January 12, 2006 @ 18:22:06
  Author: zsolt
    Path: /cvsroot/carob/libmysequoia

Modified: include/Utils.hpp (1.13 -> 1.14) src/Utils.cpp (1.15 -> 1.16)

Modified convertion functions to return true if an error occured. Also modified 
to set in the MYSQL_BIND structure the error only if a valid pointer is present


-------------------+
 include/Utils.hpp |   22 ++++++-----
 src/Utils.cpp     |   97 +++++++++++++++++++++++++++++++++++++++++++---------
 2 files changed, 93 insertions(+), 26 deletions(-)


Index: libmysequoia/include/Utils.hpp
diff -u libmysequoia/include/Utils.hpp:1.13 libmysequoia/include/Utils.hpp:1.14
--- libmysequoia/include/Utils.hpp:1.13 Thu Jan 12 16:21:22 2006
+++ libmysequoia/include/Utils.hpp      Thu Jan 12 18:22:06 2006
@@ -35,6 +35,8 @@
 
 extern const char *error_messages[];
 
+typedef char *PCHAR;
+
 #define FREE_AND_NULL(p) {delete (p); (p)=0;}
 #define FREE_AND_NULL_ARRAY(p) {delete[] (p); (p)=0;}
 
@@ -110,15 +112,15 @@
 /**
  * Data conversion functions between different MySQL data types
  */
-void getFromTiny(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data);
-void getFromShort(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data);
-void getFromLong(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data);
-void getFromLonglong(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data);
-void getFromFloat(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data);
-void getFromDouble(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data);
-void getFromString(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data);
-void getFromTime(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data);
-void getFromDate(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data);
-void getFromDateTime(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data);
+bool getFromTiny(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data);
+bool getFromShort(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data);
+bool getFromLong(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data);
+bool getFromLonglong(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data);
+bool getFromFloat(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data);
+bool getFromDouble(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data);
+bool getFromString(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data);
+bool getFromTime(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data);
+bool getFromDate(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data);
+bool getFromDateTime(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data);
 
 #endif /* _UTILS_HPP */
Index: libmysequoia/src/Utils.cpp
diff -u libmysequoia/src/Utils.cpp:1.15 libmysequoia/src/Utils.cpp:1.16
--- libmysequoia/src/Utils.cpp:1.15     Thu Jan 12 17:21:58 2006
+++ libmysequoia/src/Utils.cpp  Thu Jan 12 18:22:06 2006
@@ -239,15 +239,16 @@
   return (p != 0) && (p->mem_root.block_size == MYSEQUOIA_MAGIC);
 }
 
-void getFromTiny(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
+bool getFromTiny(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
 {
   bool is_unsigned = (field->flags & UNSIGNED_FLAG) == UNSIGNED_FLAG;
+  bool error = false;
     
   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:
@@ -285,11 +286,17 @@
     default:
       break;
   }
+  
+  if (bind->error)
+    *bind->error = error;
+    
+  return error;
 }
 
-void getFromShort(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
+bool getFromShort(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
 {
   bool is_unsigned = (field->flags & UNSIGNED_FLAG) == UNSIGNED_FLAG;
+  bool error = false;
 
   switch (bind->buffer_type)
   {
@@ -298,7 +305,7 @@
       
     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:
@@ -332,11 +339,17 @@
     default:
       break;
   }    
+  
+  if (bind->error)
+    *bind->error = error;
+    
+  return error;
 }
 
-void getFromLong(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
+bool getFromLong(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
 {
   bool is_unsigned = (field->flags & UNSIGNED_FLAG) == UNSIGNED_FLAG;
+  bool error = false;
 
   switch (bind->buffer_type)
   {
@@ -348,7 +361,7 @@
 
     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:
@@ -377,12 +390,18 @@
 
     default:
       break;
-  }    
+  }
+  
+  if (bind->error)
+    *bind->error = error;
+    
+  return error;
 }
 
-void getFromLonglong(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
+bool getFromLonglong(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
 {
   bool is_unsigned = (field->flags & UNSIGNED_FLAG) == UNSIGNED_FLAG;
+  bool error = false;
 
   switch (bind->buffer_type)
   {
@@ -397,7 +416,7 @@
 
     case MYSQL_TYPE_LONGLONG:
       *(unsigned long long int *)bind->buffer = is_unsigned ? *(unsigned long 
long int *)data : *(long long int *)data;
-      *bind->error = bind->is_unsigned != is_unsigned && *(unsigned long long 
int *)data > LONG_MAX;
+      error = bind->is_unsigned != is_unsigned && *(unsigned long long int 
*)data > LONG_MAX;
       break;
 
     case MYSQL_TYPE_FLOAT:
@@ -423,10 +442,17 @@
     default:
       break;
   }      
+  
+  if (bind->error)
+    *bind->error = error;
+    
+  return error;
 }
 
-void getFromFloat(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
+bool getFromFloat(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
 {
+  bool error = false;
+
   switch (bind->buffer_type)
   {
     case MYSQL_TYPE_TINY:
@@ -464,10 +490,17 @@
     default:
       break;
   }
+  
+  if (bind->error)
+    *bind->error = error;
+    
+  return error;
 }
 
-void getFromDouble(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
+bool getFromDouble(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
 {
+  bool error = false;
+
   switch (bind->buffer_type)
   {
     case MYSQL_TYPE_TINY:
@@ -504,13 +537,19 @@
     default:
       break;
   }
+  
+  if (bind->error)
+    *bind->error = error;
+    
+  return error;
 }
 
-void getFromString(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
+bool getFromString(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
 {
   string *s = (string *)data;
   size_t s_length = s->length();
   size_t length = min(s_length, (size_t)bind->buffer_length);
+  bool error = false;
   
   switch (bind->buffer_type)
   {
@@ -537,7 +576,7 @@
         if (length < bind->buffer_length)
           ((char *)bind->buffer)[length] = '\0';
         *bind->length = s_length;
-        *bind->error = length < s_length;
+        error = length < s_length;
       break;
 
     case MYSQL_TYPE_TIME:
@@ -552,10 +591,17 @@
     default:
       break;
   }
+  
+  if (bind->error)
+    *bind->error = error;
+    
+  return error;
 }
 
-void getFromTime(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
+bool getFromTime(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
 {
+  bool error = false;
+
   switch (bind->buffer_type)
   {
     case MYSQL_TYPE_TINY:
@@ -592,10 +638,17 @@
     default:
       break;
   }
+  
+  if (bind->error)
+    *bind->error = error;
+    
+  return error;
 }
 
-void getFromDate(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
+bool getFromDate(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
 {
+  bool error = false;
+
   switch (bind->buffer_type)
   {
     case MYSQL_TYPE_TINY:
@@ -632,10 +685,17 @@
     default:
       break;
   }
+  
+  if (bind->error)
+    *bind->error = error;
+    
+  return error;
 }
 
-void getFromDateTime(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
+bool getFromDateTime(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
 {
+  bool error = false;
+
   switch (bind->buffer_type)
   {
     case MYSQL_TYPE_TINY:
@@ -672,6 +732,11 @@
     default:
       break;
   }
+  
+  if (bind->error)
+    *bind->error = error;
+    
+  return error;
 }
 
 /* 

_______________________________________________
Carob-commits mailing list
[email protected]
https://forge.continuent.org/mailman/listinfo/carob-commits

Reply via email to