Date: Wednesday, March 29, 2006 @ 13:00:43
  Author: zsolt
    Path: /cvsroot/carob/libmysequoia/src

Modified: CarobMySQL.cpp (1.67 -> 1.68) Utils.cpp (1.36 -> 1.37)

- float / double formating at the prepared statements
- modified alloc_row_data() to use prepared statements float/double conversion 
(see bug LMS-3)


----------------+
 CarobMySQL.cpp |   20 ++++++++++++++++++--
 Utils.cpp      |   31 ++++++++++++++++++++++++++++---
 2 files changed, 46 insertions(+), 5 deletions(-)


Index: libmysequoia/src/CarobMySQL.cpp
diff -u libmysequoia/src/CarobMySQL.cpp:1.67 
libmysequoia/src/CarobMySQL.cpp:1.68
--- libmysequoia/src/CarobMySQL.cpp:1.67        Tue Mar 28 14:25:11 2006
+++ libmysequoia/src/CarobMySQL.cpp     Wed Mar 29 13:00:43 2006
@@ -904,8 +904,8 @@
 
   /* TODO maybe we can change it, after carob implemented
    * date/time conversion functions correctly */
-  //Set up a conversion buffer for time, date, datetime conversion
-  char buffer[20];
+  //Set up a conversion buffer for time, date, datetime, float, double 
conversion
+  char buffer[400];
   MYSQL_BIND b;
 
   memset(&b, 0, sizeof(b));
@@ -950,6 +950,22 @@
             field_len = *b.length;
             break;
           }
+        case MYSQL_TYPE_FLOAT:
+          {
+            float f = drsPtr->getFloat(i+1);
+            getFromFloat(&b,fPtr,&f);
+            result += buffer;
+            field_len = strlen(buffer);
+            break;
+          }
+        case MYSQL_TYPE_DOUBLE:
+          {
+            double d = drsPtr->getDouble(i+1);
+            getFromDouble(&b,fPtr,&d);
+            result += buffer;
+            field_len = strlen(buffer);
+            break;
+          }
         default:
           if (fPtr->flags & BINARY_FLAG)
           {
Index: libmysequoia/src/Utils.cpp
diff -u libmysequoia/src/Utils.cpp:1.36 libmysequoia/src/Utils.cpp:1.37
--- libmysequoia/src/Utils.cpp:1.36     Fri Mar 24 10:02:40 2006
+++ libmysequoia/src/Utils.cpp  Wed Mar 29 13:00:43 2006
@@ -37,6 +37,7 @@
 #include <ctime>
 #include <sstream>
 #include <ctype.h>
+#include <cfloat>
 
 using namespace CarobNS;
 using namespace std;
@@ -643,8 +644,20 @@
     case MYSQL_TYPE_VAR_STRING:
     case MYSQL_TYPE_STRING:
     {
-      // TODO precision
-      int len = snprintf((char *)bind->buffer, bind->buffer_length, "%.*f", 
(int)field->decimals, f);
+      int len;
+      if (field->decimals >= 31)
+      {
+        len = sprintf((char *)bind->buffer, "%-*.*g", 
(int)bind->buffer_length, (int)min(14, FLT_DIG), f);
+        if (len > 0 && (unsigned)len < bind->buffer_length)
+        {
+          char *c = strchr((char *)bind->buffer, ' ');
+          *c = 0;
+          len = c - (char *)bind->buffer;
+        }
+      }
+      else
+        len = snprintf((char *)bind->buffer, bind->buffer_length, "%.*f", 
(int)field->decimals, f);
+        
       error = (len < 0) || ((unsigned int)len >= bind->buffer_length);
       break;
     }
@@ -722,7 +735,19 @@
     case MYSQL_TYPE_VAR_STRING:
     case MYSQL_TYPE_STRING:
     {
-      int len = snprintf((char *)bind->buffer, bind->buffer_length, "%.*f", 
(int)field->decimals, d);
+      int len;
+      if (field->decimals >= 31)
+      {
+        len = snprintf((char *)bind->buffer, bind->buffer_length, "%-*.*g", 
(int)bind->buffer_length, (int)min(14, DBL_DIG), d);
+        if (len > 0 && (unsigned)len <= bind->buffer_length)
+        {
+          char *c = strchr((char *)bind->buffer, ' ');
+          *c = 0;
+          len = c - (char *)bind->buffer;
+        }
+      }
+      else
+        len = snprintf((char *)bind->buffer, bind->buffer_length, "%.*f", 
(int)field->decimals, d);
       error = (len < 0) || ((unsigned int)len >= bind->buffer_length);
       break;
     }

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

Reply via email to