Date: Friday, January 13, 2006 @ 10:01:08
  Author: csaba
    Path: /cvsroot/carob/libmysequoia

Modified: include/Utils.hpp (1.14 -> 1.15) src/CarobStmt.cpp (1.8 -> 1.9)
          src/Utils.cpp (1.16 -> 1.17)

Set the error pointer if not set in prepare_result() function, so no need to 
check every time in the data conversion functions.


-------------------+
 include/Utils.hpp |   20 +++++-----
 src/CarobStmt.cpp |   33 +++++++++++-------
 src/Utils.cpp     |   95 ++++++++--------------------------------------------
 3 files changed, 46 insertions(+), 102 deletions(-)


Index: libmysequoia/include/Utils.hpp
diff -u libmysequoia/include/Utils.hpp:1.14 libmysequoia/include/Utils.hpp:1.15
--- libmysequoia/include/Utils.hpp:1.14 Thu Jan 12 18:22:06 2006
+++ libmysequoia/include/Utils.hpp      Fri Jan 13 10:01:08 2006
@@ -112,15 +112,15 @@
 /**
  * Data conversion functions between different MySQL data types
  */
-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);
+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);
 
 #endif /* _UTILS_HPP */
Index: libmysequoia/src/CarobStmt.cpp
diff -u libmysequoia/src/CarobStmt.cpp:1.8 libmysequoia/src/CarobStmt.cpp:1.9
--- libmysequoia/src/CarobStmt.cpp:1.8  Thu Jan 12 18:30:46 2006
+++ libmysequoia/src/CarobStmt.cpp      Fri Jan 13 10:01:08 2006
@@ -262,6 +262,16 @@
     MYSQL_BIND *p = m_stmt->bind;
     for (unsigned int no=1; no <= m_stmt->field_count && !result; no++, p++)
     {
+      /* set up the pointers if are not set up */
+      if (!p->is_null)
+        p->is_null= &p->is_null_value;
+
+      if (!p->length)
+        p->length= &p->length_value;
+
+      if (!p->error)
+        p->error= &p->error_value;
+      
       switch (p->buffer_type)
       {
         case MYSQL_TYPE_TINY:
@@ -332,26 +342,25 @@
         }
         else
         {
-          bool error = false;
           switch (fPtr->type)
           {
             case MYSQL_TYPE_TINY:
-              error = getFromTiny(bPtr, fPtr, buffer);
+              getFromTiny(bPtr, fPtr, buffer);
               break;
             case MYSQL_TYPE_SHORT:
-              error = getFromShort(bPtr, fPtr, buffer);
+              getFromShort(bPtr, fPtr, buffer);
               break;
             case MYSQL_TYPE_LONG:
-              error = getFromLong(bPtr, fPtr, buffer);
+              getFromLong(bPtr, fPtr, buffer);
               break;
             case MYSQL_TYPE_LONGLONG:
-              error = getFromLonglong(bPtr, fPtr, buffer);
+              getFromLonglong(bPtr, fPtr, buffer);
               break;
             case MYSQL_TYPE_FLOAT:
-              error = getFromFloat(bPtr, fPtr, buffer);
+              getFromFloat(bPtr, fPtr, buffer);
               break;
             case MYSQL_TYPE_DOUBLE:
-              error = getFromDouble(bPtr, fPtr, buffer);
+              getFromDouble(bPtr, fPtr, buffer);
               break;
             case MYSQL_TYPE_TINY_BLOB:
             case MYSQL_TYPE_MEDIUM_BLOB:
@@ -362,17 +371,17 @@
             case MYSQL_TYPE_STRING:
             case MYSQL_TYPE_DECIMAL:
             case MYSQL_TYPE_NEWDECIMAL:
-              error = getFromString(bPtr, fPtr, buffer);
+              getFromString(bPtr, fPtr, buffer);
               break;
             case MYSQL_TYPE_TIME:
-              error = getFromTime(bPtr, fPtr, buffer);
+              getFromTime(bPtr, fPtr, buffer);
               break;
             case MYSQL_TYPE_DATE:
-              error = getFromDate(bPtr, fPtr, buffer);
+              getFromDate(bPtr, fPtr, buffer);
               break;
             case MYSQL_TYPE_DATETIME:
             case MYSQL_TYPE_TIMESTAMP:
-              error = getFromDateTime(bPtr, fPtr, buffer);
+              getFromDateTime(bPtr, fPtr, buffer);
               break;
             case MYSQL_TYPE_NULL:
               break;
@@ -383,7 +392,7 @@
           if (!m_stmt->result.data)
             delete_fetch_field(fPtr, buffer);
 
-          if (error)
+          if (*m_stmt->bind->error)
             result = MYSQL_DATA_TRUNCATED;
         }
       }
Index: libmysequoia/src/Utils.cpp
diff -u libmysequoia/src/Utils.cpp:1.16 libmysequoia/src/Utils.cpp:1.17
--- libmysequoia/src/Utils.cpp:1.16     Thu Jan 12 18:22:06 2006
+++ libmysequoia/src/Utils.cpp  Fri Jan 13 10:01:08 2006
@@ -239,16 +239,15 @@
   return (p != 0) && (p->mem_root.block_size == MYSEQUOIA_MAGIC);
 }
 
-bool getFromTiny(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
+void 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;
-      error = bind->is_unsigned != is_unsigned && *(unsigned char *)data > 
SCHAR_MAX;
+      *bind->error = bind->is_unsigned != is_unsigned && *(unsigned char 
*)data > SCHAR_MAX;
       break;
 
     case MYSQL_TYPE_SHORT:
@@ -286,17 +285,11 @@
     default:
       break;
   }
-  
-  if (bind->error)
-    *bind->error = error;
-    
-  return error;
 }
 
-bool getFromShort(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
+void 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)
   {
@@ -305,7 +298,7 @@
       
     case MYSQL_TYPE_SHORT:
       *(unsigned short int *)bind->buffer = is_unsigned ? *(unsigned short int 
*)data : *(short int *)data;
-      error = bind->is_unsigned != is_unsigned && *(unsigned short int *)data 
> SHRT_MAX;
+      *bind->error = bind->is_unsigned != is_unsigned && *(unsigned short int 
*)data > SHRT_MAX;
       break;
 
     case MYSQL_TYPE_LONG:
@@ -339,17 +332,11 @@
     default:
       break;
   }    
-  
-  if (bind->error)
-    *bind->error = error;
-    
-  return error;
 }
 
-bool getFromLong(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
+void 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)
   {
@@ -361,7 +348,7 @@
 
     case MYSQL_TYPE_LONG:
       *(unsigned int *)bind->buffer = is_unsigned ? *(unsigned int *)data : 
*(int *)data;
-      error = bind->is_unsigned != is_unsigned && *(unsigned int *)data > 
INT_MAX;
+      *bind->error = bind->is_unsigned != is_unsigned && *(unsigned int *)data 
> INT_MAX;
       break;
 
     case MYSQL_TYPE_LONGLONG:
@@ -391,17 +378,11 @@
     default:
       break;
   }
-  
-  if (bind->error)
-    *bind->error = error;
-    
-  return error;
 }
 
-bool getFromLonglong(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
+void 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)
   {
@@ -416,7 +397,7 @@
 
     case MYSQL_TYPE_LONGLONG:
       *(unsigned long long int *)bind->buffer = is_unsigned ? *(unsigned long 
long int *)data : *(long long int *)data;
-      error = bind->is_unsigned != is_unsigned && *(unsigned long long int 
*)data > LONG_MAX;
+      *bind->error = bind->is_unsigned != is_unsigned && *(unsigned long long 
int *)data > LONG_MAX;
       break;
 
     case MYSQL_TYPE_FLOAT:
@@ -442,17 +423,10 @@
     default:
       break;
   }      
-  
-  if (bind->error)
-    *bind->error = error;
-    
-  return error;
 }
 
-bool getFromFloat(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
+void getFromFloat(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
 {
-  bool error = false;
-
   switch (bind->buffer_type)
   {
     case MYSQL_TYPE_TINY:
@@ -490,17 +464,10 @@
     default:
       break;
   }
-  
-  if (bind->error)
-    *bind->error = error;
-    
-  return error;
 }
 
-bool getFromDouble(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
+void getFromDouble(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
 {
-  bool error = false;
-
   switch (bind->buffer_type)
   {
     case MYSQL_TYPE_TINY:
@@ -537,19 +504,13 @@
     default:
       break;
   }
-  
-  if (bind->error)
-    *bind->error = error;
-    
-  return error;
 }
 
-bool getFromString(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
+void 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)
   {
@@ -576,7 +537,7 @@
         if (length < bind->buffer_length)
           ((char *)bind->buffer)[length] = '\0';
         *bind->length = s_length;
-        error = length < s_length;
+        *bind->error = length < s_length;
       break;
 
     case MYSQL_TYPE_TIME:
@@ -591,17 +552,10 @@
     default:
       break;
   }
-  
-  if (bind->error)
-    *bind->error = error;
-    
-  return error;
 }
 
-bool getFromTime(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
+void getFromTime(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
 {
-  bool error = false;
-
   switch (bind->buffer_type)
   {
     case MYSQL_TYPE_TINY:
@@ -638,17 +592,10 @@
     default:
       break;
   }
-  
-  if (bind->error)
-    *bind->error = error;
-    
-  return error;
 }
 
-bool getFromDate(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
+void getFromDate(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
 {
-  bool error = false;
-
   switch (bind->buffer_type)
   {
     case MYSQL_TYPE_TINY:
@@ -685,17 +632,10 @@
     default:
       break;
   }
-  
-  if (bind->error)
-    *bind->error = error;
-    
-  return error;
 }
 
-bool getFromDateTime(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
+void getFromDateTime(MYSQL_BIND *bind, MYSQL_FIELD *field, void *data)
 {
-  bool error = false;
-
   switch (bind->buffer_type)
   {
     case MYSQL_TYPE_TINY:
@@ -732,11 +672,6 @@
     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