Date: Friday, March 3, 2006 @ 10:43:13
Author: zsolt
Path: /cvsroot/carob/libmysequoia/src
Modified: CarobCommon.cpp (1.5 -> 1.6) CarobMySQL.cpp (1.56 -> 1.57)
CarobStmt.cpp (1.26 -> 1.27)
- modified to use ByteArray for binary fields
- introduced flag BINARY_FLAG in MYSQL_FIELD when the data is binary
-----------------+
CarobCommon.cpp | 19 ++++++++++++++++++-
CarobMySQL.cpp | 9 ++++++++-
CarobStmt.cpp | 36 ++++++++++++++++++++++--------------
3 files changed, 48 insertions(+), 16 deletions(-)
Index: libmysequoia/src/CarobCommon.cpp
diff -u libmysequoia/src/CarobCommon.cpp:1.5
libmysequoia/src/CarobCommon.cpp:1.6
--- libmysequoia/src/CarobCommon.cpp:1.5 Tue Jan 31 16:31:52 2006
+++ libmysequoia/src/CarobCommon.cpp Fri Mar 3 10:43:13 2006
@@ -22,6 +22,8 @@
#include <CarobCommon.hpp>
#include <Utils.hpp>
+#include <TypeConstants.hpp>
+
using namespace CarobNS;
using namespace log4cxx;
@@ -53,7 +55,8 @@
colPtr->decimals = rsmPtr->getScale(colNo);
//TODO more compatible flags...
- colPtr->type = sql_to_mysql_type(rsmPtr->getColumnType(colNo));
+ int colType = rsmPtr->getColumnType(colNo);
+ colPtr->type = sql_to_mysql_type(colType);
colPtr->flags = (rsmPtr->isNullable(colNo) ? 0 : NOT_NULL_FLAG) |
(rsmPtr->isAutoIncrement(colNo) ? AUTO_INCREMENT_FLAG : 0)
|
@@ -66,6 +69,20 @@
| NO_DEFAULT_VALUE_FLAG
#endif
;
+
+ switch (colType)
+ {
+#ifdef MYSQL5
+ case SQLT_BIT:
+#endif
+ case SQLT_BINARY:
+ case SQLT_VARBINARY:
+ case SQLT_BLOB:
+ case SQLT_CLOB:
+ case SQLT_LONGVARBINARY:
+ colPtr->flags |= BINARY_FLAG;
+ break;
+ }
}
LOG4CXX_DEBUG(logger, "Leaving get_query_fields: result=" << colNum);
Index: libmysequoia/src/CarobMySQL.cpp
diff -u libmysequoia/src/CarobMySQL.cpp:1.56
libmysequoia/src/CarobMySQL.cpp:1.57
--- libmysequoia/src/CarobMySQL.cpp:1.56 Tue Feb 28 15:19:37 2006
+++ libmysequoia/src/CarobMySQL.cpp Fri Mar 3 10:43:13 2006
@@ -904,7 +904,14 @@
field_len = *b.length;
break;
default:
- tmp = toString(drsPtr->getAsString(i+1));
+ if (fPtr->flags & BINARY_FLAG)
+ {
+ LargeData &d = drsPtr->getByteArray(i+1);
+ tmp = string((char *)d.data, d.length);
+ }
+ else
+ tmp = toString(drsPtr->getAsString(i+1));
+
field_len = tmp.length();
result += tmp;
}
Index: libmysequoia/src/CarobStmt.cpp
diff -u libmysequoia/src/CarobStmt.cpp:1.26 libmysequoia/src/CarobStmt.cpp:1.27
--- libmysequoia/src/CarobStmt.cpp:1.26 Wed Feb 22 16:55:29 2006
+++ libmysequoia/src/CarobStmt.cpp Fri Mar 3 10:43:13 2006
@@ -302,24 +302,27 @@
case MYSQL_TYPE_DOUBLE:
c_stmt->setDouble(no, *(double *)p->buffer);
break;
- case MYSQL_TYPE_DECIMAL:
case MYSQL_TYPE_TINY_BLOB:
case MYSQL_TYPE_MEDIUM_BLOB:
case MYSQL_TYPE_LONG_BLOB:
case MYSQL_TYPE_BLOB:
+ if (p->long_data_used && LONGDATAFIELD(p))
+ {
+ string *s = (string *)LONGDATAFIELD(p);
+ c_stmt->setBlob(no, s->data(), s->size());
+ }
+ else
+ c_stmt->setBlob(no, p->buffer, p->buffer_length);
+ break;
+ case MYSQL_TYPE_DECIMAL:
#ifdef MYSQL5
case MYSQL_TYPE_NEWDECIMAL:
case MYSQL_TYPE_VARCHAR:
#endif
case MYSQL_TYPE_VAR_STRING:
case MYSQL_TYPE_STRING:
-#ifdef MYSQL5
- if (p->long_data_used && p->row_ptr)
- c_stmt->setString(no, fromString(*(string *)(p->row_ptr)));
-#else
- if (p->long_data_used && p->inter_buffer)
- c_stmt->setString(no, fromString(*(string
*)(p->inter_buffer)));
-#endif
+ if (p->long_data_used && LONGDATAFIELD(p))
+ c_stmt->setString(no, fromString(*(string
*)LONGDATAFIELD(p)));
else
c_stmt->setString(no, fromString(string((char *)p->buffer,
p->buffer_length)));
break;
@@ -335,7 +338,7 @@
break;
default:
LOG4CXX_FATAL(logger, "This should never happen!!");
-/* TODO support other types */
+ /* TODO support other types */
}
}
if (!c_stmt->execute())
@@ -796,7 +799,13 @@
case MYSQL_TYPE_VARCHAR:
case MYSQL_TYPE_NEWDECIMAL:
#endif
- result = new string(toString(liveResultSet->getAsString(colNo)));
+ if (fPtr->flags & BINARY_FLAG)
+ {
+ LargeData &d = liveResultSet->getByteArray(colNo);
+ result = new string((char *)d.data, d.length);
+ }
+ else
+ result = new string(toString(liveResultSet->getAsString(colNo)));
break;
case MYSQL_TYPE_TIME:
result = new int(liveResultSet->getAsInt(colNo));
@@ -829,7 +838,7 @@
void
CarobStmt::delete_fetch_field(MYSQL_FIELD *fPtr, void *buffer)
{
- LOG4CXX_DEBUG(logger, "Entering delete_fetch_field.");
+ LOG4CXX_DEBUG(logger, "Entering delete_fetch_field fPtr="<< fPtr << " type="
<< fPtr->type << " buffer=" << buffer);
switch (fPtr->type)
{
@@ -970,11 +979,10 @@
liveResultSet = 0;
- delete_query_fields(m_stmt->fields, m_stmt->field_count);
-
free_catched_result(m_stmt);
free_long_data(m_stmt);
-
+ delete_query_fields(m_stmt->fields, m_stmt->field_count);
+
FREE_AND_NULL_ARRAY(m_stmt->params);
FREE_AND_NULL_ARRAY(m_stmt->bind);
_______________________________________________
Carob-commits mailing list
[email protected]
https://forge.continuent.org/mailman/listinfo/carob-commits