Date: Tuesday, January 10, 2006 @ 10:05:54
Author: csaba
Path: /cvsroot/carob/libmysequoia
Modified: include/CarobStmt.hpp (1.1 -> 1.2) src/CarobStmt.cpp (1.1 ->
1.2) src/MySQLAPI.cpp (1.21 -> 1.22)
Error handling in mysql_stmt_attr_get() and mysql_stmt_attr_set().
-----------------------+
include/CarobStmt.hpp | 5 +
src/CarobStmt.cpp | 1
src/MySQLAPI.cpp | 132 ++++++++++++++++++++++++++++--------------------
3 files changed, 83 insertions(+), 55 deletions(-)
Index: libmysequoia/include/CarobStmt.hpp
diff -u libmysequoia/include/CarobStmt.hpp:1.1
libmysequoia/include/CarobStmt.hpp:1.2
--- libmysequoia/include/CarobStmt.hpp:1.1 Tue Jan 10 08:56:10 2006
+++ libmysequoia/include/CarobStmt.hpp Tue Jan 10 10:05:54 2006
@@ -48,6 +48,7 @@
static bool free_result(MYSQL_STMT *stmt);
MYSQL_STMT *getMYSQL_STMT() {return m_stmt;}
+
private:
MYSQL_STMT *m_stmt;
CarobNS::ParameterStatement *c_stmt;
@@ -56,6 +57,8 @@
// logger
static log4cxx::LoggerPtr logger;
+ void clear();
+
/**
* Set the current mysql error to the specified one. The mysql error message
will be filled from the error list.
* @param errcode mysql error code
@@ -70,8 +73,6 @@
* @param sqlstate ansi sql specific error message
*/
void set_error (int errcode, const char *errmsg, const char *sqlstate);
-
- void clear();
};
#endif /*_CAROBSTMT_HPP*/
Index: libmysequoia/src/CarobStmt.cpp
diff -u libmysequoia/src/CarobStmt.cpp:1.1 libmysequoia/src/CarobStmt.cpp:1.2
--- libmysequoia/src/CarobStmt.cpp:1.1 Tue Jan 10 08:56:10 2006
+++ libmysequoia/src/CarobStmt.cpp Tue Jan 10 10:05:54 2006
@@ -100,6 +100,7 @@
CarobStmt::bind_param(const MYSQL_BIND *bind)
{
LOG4CXX_DEBUG(logger, "Entering bind_param.");
+
bool result = false;
if (!m_stmt->param_count)
Index: libmysequoia/src/MySQLAPI.cpp
diff -u libmysequoia/src/MySQLAPI.cpp:1.21 libmysequoia/src/MySQLAPI.cpp:1.22
--- libmysequoia/src/MySQLAPI.cpp:1.21 Tue Jan 10 09:40:27 2006
+++ libmysequoia/src/MySQLAPI.cpp Tue Jan 10 10:05:54 2006
@@ -1029,8 +1029,10 @@
mysql_stmt_close (MYSQL_STMT *stmt)
{
LOG4CXX_DEBUG(logger, "Entering mysql_stmt_close.");
+
if (isCarobObject(stmt))
delete getCarobStmt(stmt);
+
LOG4CXX_DEBUG(logger, "Leaving mysql_stmt_close.");
return 0;
}
@@ -1039,28 +1041,37 @@
mysql_stmt_attr_get (MYSQL_STMT * stmt, enum enum_stmt_attr_type option,
void *arg)
{
- my_bool result = false;
-
LOG4CXX_DEBUG(logger, "Entering mysql_stmt_attr_get.");
- switch (option)
- {
- case STMT_ATTR_UPDATE_MAX_LENGTH:
- *(my_bool *)arg = stmt->update_max_length;
- break;
-
- case STMT_ATTR_CURSOR_TYPE:
- *(ulong *)arg = stmt->flags;
- break;
-
- case STMT_ATTR_PREFETCH_ROWS:
- *(ulong *)arg = stmt->prefetch_rows;
- break;
+ my_bool result = false;
- default:
- result = true;
- }
+ if (isCarobObject(stmt))
+ {
+ switch (option)
+ {
+ case STMT_ATTR_UPDATE_MAX_LENGTH:
+ *(my_bool *)arg = stmt->update_max_length;
+ break;
+
+ case STMT_ATTR_CURSOR_TYPE:
+ *(ulong *)arg = stmt->flags;
+ break;
+
+ case STMT_ATTR_PREFETCH_ROWS:
+ *(ulong *)arg = stmt->prefetch_rows;
+ break;
+ default:
+ result = true;
+ }
+ }
+ else
+ {
+ LOG4CXX_ERROR(logger, "The given mysql stmt pointer was not initialized
with mysql_stmt_init.");
+ //Todo maybe better errorhandling?
+ result = true;
+ }
+
LOG4CXX_DEBUG(logger, "Leaving mysql_stmt_attr_get.");
return result;
}
@@ -1069,41 +1080,50 @@
mysql_stmt_attr_set (MYSQL_STMT * stmt, enum enum_stmt_attr_type option,
const void *arg)
{
- my_bool result = false;
-
LOG4CXX_DEBUG(logger, "Entering mysql_stmt_attr_set.");
+
+ my_bool result = false;
- switch (option)
+ if (isCarobObject(stmt))
{
- case STMT_ATTR_UPDATE_MAX_LENGTH:
- stmt->update_max_length = arg ? *(my_bool *)arg : false;
- break;
-
- case STMT_ATTR_CURSOR_TYPE:
- ulong flags;
- flags = arg ? *(ulong *)arg : (ulong) CURSOR_TYPE_NO_CURSOR;
- if (flags == CURSOR_TYPE_NO_CURSOR || flags == CURSOR_TYPE_READ_ONLY)
- stmt->flags = flags;
- else
- result = true;
- break;
-
- case STMT_ATTR_PREFETCH_ROWS:
- ulong prefetch_rows;
- prefetch_rows = arg ? *(ulong *)arg : (ulong) 1;
- if (prefetch_rows >= 1 && prefetch_rows <= ULONG_MAX)
- stmt->prefetch_rows = prefetch_rows;
- else
+ switch (option)
+ {
+ case STMT_ATTR_UPDATE_MAX_LENGTH:
+ stmt->update_max_length = arg ? *(my_bool *)arg : false;
+ break;
+
+ case STMT_ATTR_CURSOR_TYPE:
+ ulong flags;
+ flags = arg ? *(ulong *)arg : (ulong) CURSOR_TYPE_NO_CURSOR;
+ if (flags == CURSOR_TYPE_NO_CURSOR || flags == CURSOR_TYPE_READ_ONLY)
+ stmt->flags = flags;
+ else
+ result = true;
+ break;
+
+ case STMT_ATTR_PREFETCH_ROWS:
+ ulong prefetch_rows;
+ prefetch_rows = arg ? *(ulong *)arg : (ulong) 1;
+ if (prefetch_rows >= 1 && prefetch_rows <= ULONG_MAX)
+ stmt->prefetch_rows = prefetch_rows;
+ else
+ result = true;
+ break;
+
+ default:
result = true;
- break;
+ }
- default:
- result = true;
+// TODO check if we need this
+// if (result)
+// getCarobStmt(stmt)->set_error(CR_NOT_IMPLEMENTED, SQLT_UNKNOWN);
+ }
+ else
+ {
+ LOG4CXX_ERROR(logger, "The given mysql stmt pointer was not initialized
with mysql_stmt_init.");
+ //Todo maybe better errorhandling?
+ result = 1;
}
-
- if (result)
- /* TODO set error to CR_NOT_IMPLEMENTED */
- ;
LOG4CXX_DEBUG(logger, "Leaving mysql_stmt_attr_set.");
return result;
@@ -1113,10 +1133,10 @@
mysql_stmt_prepare (MYSQL_STMT * stmt, const char *query,
unsigned long length)
{
- int result = 0;
-
LOG4CXX_DEBUG(logger, "Entering mysql_stmt_prepare.");
+ int result = 0;
+
if (isCarobObject(stmt))
result = getCarobStmt(stmt)->prepare(query, length);
else
@@ -1133,10 +1153,10 @@
my_bool
mysql_stmt_bind_param (MYSQL_STMT * stmt, MYSQL_BIND * bind)
{
- my_bool result = false;
-
LOG4CXX_DEBUG(logger, "Entering mysql_stmt_bind_param.");
+ my_bool result = false;
+
if (isCarobObject(stmt))
result = getCarobStmt(stmt)->bind_param(bind);
else
@@ -1153,10 +1173,10 @@
int
mysql_stmt_execute (MYSQL_STMT * stmt)
{
- int result = 0;
-
LOG4CXX_DEBUG(logger, "Entering mysql_stmt_execute.");
+ int result = 0;
+
if (isCarobObject(stmt))
result = getCarobStmt(stmt)->execute();
else
@@ -1174,7 +1194,9 @@
mysql_stmt_errno (MYSQL_STMT * stmt)
{
LOG4CXX_DEBUG(logger, "Entering mysql_stmt_errno.");
+
unsigned int result = stmt ? stmt->last_errno : 0;
+
LOG4CXX_DEBUG(logger, "Leaving mysql_stmt_errno.");
return result;
}
@@ -1183,7 +1205,9 @@
mysql_stmt_error (MYSQL_STMT * stmt)
{
LOG4CXX_DEBUG(logger, "Entering mysql_stmt_error.");
+
const char *result = stmt ? stmt->last_error : 0;
+
LOG4CXX_DEBUG(logger, "Leaving mysql_stmt_error.");
return result;
}
@@ -1192,7 +1216,9 @@
mysql_stmt_sqlstate (MYSQL_STMT * stmt)
{
LOG4CXX_DEBUG(logger, "Entering mysql_stmt_sqlstate.");
+
const char *result = stmt ? stmt->sqlstate : 0;
+
LOG4CXX_DEBUG(logger, "Leaving mysql_stmt_sqlstate.");
return result;
}
_______________________________________________
Carob-commits mailing list
[email protected]
https://forge.continuent.org/mailman/listinfo/carob-commits