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