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