Date: Monday, April 10, 2006 @ 09:34:50
Author: csaba
Path: /cvsroot/carob/libmysequoia
Modified: include/Utils.hpp (1.21 -> 1.22) src/CarobStmt.cpp (1.32 ->
1.33) src/Utils.cpp (1.39 -> 1.40) test/TestMySQLAPI.cpp (1.35
-> 1.36) test/TestMySQLAPI.hpp (1.14 -> 1.15)
Fixes for setNull LMS-10
-----------------------+
include/Utils.hpp | 7 ++++++
src/CarobStmt.cpp | 3 +-
src/Utils.cpp | 52 ++++++++++++++++++++++++++++++++++++++++++--
test/TestMySQLAPI.cpp | 56 ++++++++++++++++++++++++++++++++++++++++++++++++
test/TestMySQLAPI.hpp | 2 +
5 files changed, 116 insertions(+), 4 deletions(-)
Index: libmysequoia/include/Utils.hpp
diff -u libmysequoia/include/Utils.hpp:1.21 libmysequoia/include/Utils.hpp:1.22
--- libmysequoia/include/Utils.hpp:1.21 Tue Apr 4 14:14:24 2006
+++ libmysequoia/include/Utils.hpp Mon Apr 10 09:34:50 2006
@@ -89,6 +89,13 @@
int convert_errcode(const int code);
/**
+ * Converts MySQL field type to sql type
+ * @param mysql_type code of the MySQL field
+ * @return mapped sql field type
+ */
+const int mysql_to_sql_type(enum enum_field_types mysql_type);
+
+/**
* Converts sql field type to mysql type
* @param sqltype code of the sql field
* @return mapped MySQL field type
Index: libmysequoia/src/CarobStmt.cpp
diff -u libmysequoia/src/CarobStmt.cpp:1.32 libmysequoia/src/CarobStmt.cpp:1.33
--- libmysequoia/src/CarobStmt.cpp:1.32 Tue Apr 4 14:14:24 2006
+++ libmysequoia/src/CarobStmt.cpp Mon Apr 10 09:34:50 2006
@@ -28,6 +28,7 @@
#include <CarobStmt.hpp>
#include <Common.hpp>
#include <StringCodecs.hpp>
+#include <TypeConstants.hpp>
//MySQL includes
#include <mysql_wrapper.h>
@@ -291,7 +292,7 @@
for (unsigned int no=1; no <= m_stmt->param_count; no++, p++)
{
if (*p->is_null)
- c_stmt->setNull(no);
+ c_stmt->setNull(no, mysql_to_sql_type(p->buffer_type));
else
switch (p->buffer_type)
{
Index: libmysequoia/src/Utils.cpp
diff -u libmysequoia/src/Utils.cpp:1.39 libmysequoia/src/Utils.cpp:1.40
--- libmysequoia/src/Utils.cpp:1.39 Tue Apr 4 14:14:24 2006
+++ libmysequoia/src/Utils.cpp Mon Apr 10 09:34:50 2006
@@ -168,6 +168,55 @@
return CR_MIN_ERROR;
}
+const int mysql_to_sql_type(enum enum_field_types mysql_type)
+{
+ switch (mysql_type)
+ {
+#ifdef MYSQL5
+ case MYSQL_TYPE_BIT:
+ return SQLT_BIT;
+ break;
+#endif
+ case MYSQL_TYPE_TINY:
+ return SQLT_TINYINT;
+ case MYSQL_TYPE_SHORT:
+ return SQLT_SMALLINT;
+ case MYSQL_TYPE_INT24:
+ case MYSQL_TYPE_LONG:
+ return SQLT_INTEGER;
+ case MYSQL_TYPE_LONGLONG:
+ return SQLT_BIGINT;
+ case MYSQL_TYPE_FLOAT:
+ return SQLT_FLOAT;
+ case MYSQL_TYPE_DOUBLE:
+ return SQLT_DOUBLE;
+ case MYSQL_TYPE_DECIMAL:
+ case MYSQL_TYPE_NEWDECIMAL:
+ return SQLT_DECIMAL;
+ case MYSQL_TYPE_STRING:
+ return SQLT_CHAR;
+ case MYSQL_TYPE_VARCHAR:
+ case MYSQL_TYPE_VAR_STRING:
+ return SQLT_VARCHAR;
+ case MYSQL_TYPE_BLOB:
+ case MYSQL_TYPE_TINY_BLOB:
+ case MYSQL_TYPE_MEDIUM_BLOB:
+ case MYSQL_TYPE_LONG_BLOB:
+ return SQLT_LONGVARCHAR;
+ case MYSQL_TYPE_YEAR:
+ case MYSQL_TYPE_NEWDATE:
+ case MYSQL_TYPE_DATE:
+ return SQLT_DATE;
+ case MYSQL_TYPE_DATETIME:
+ case MYSQL_TYPE_TIME:
+ return SQLT_TIME;
+ case MYSQL_TYPE_TIMESTAMP:
+ return SQLT_TIMESTAMP;
+ default:
+ return SQLT_OTHER;
+ }
+}
+
enum enum_field_types sql_to_mysql_type(const int sqltype)
{
switch (sqltype)
@@ -226,9 +275,6 @@
case SQLT_LONGVARBINARY:
return MYSQL_TYPE_BLOB;
break;
-// case SQLT_NULL:
-// return MYSQL_TYPE_NULL;
-// break;
default:
//TODO what to return ?? raise an error ??
return MYSQL_TYPE_NULL;
Index: libmysequoia/test/TestMySQLAPI.cpp
diff -u libmysequoia/test/TestMySQLAPI.cpp:1.35
libmysequoia/test/TestMySQLAPI.cpp:1.36
--- libmysequoia/test/TestMySQLAPI.cpp:1.35 Wed Apr 5 09:28:27 2006
+++ libmysequoia/test/TestMySQLAPI.cpp Mon Apr 10 09:34:50 2006
@@ -896,3 +896,59 @@
getcharset = mysql_character_set_name(mysql);
CPPUNIT_ASSERT(strcmp(getcharset, setcharset) == 0);
}
+
+void TestMySQLAPI::bug_lms_10_test(void)
+{
+ MYSQL_STMT *stmt;
+ MYSQL_BIND bind[7];
+ int i1, i2, i3, i4, i5, i6, i7;
+ my_bool is_null = 1;
+ char *query = "insert into t1 values (?,?,?,?,?,?,?)";
+
+ CPPUNIT_ASSERT(mysql_real_connect(mysql, HOST, USER1, PASSWD1, DB1, 0, 0, 0)
!= 0);
+
+ mysql_query(mysql, "drop table t1");
+ CPPUNIT_ASSERT(mysql_query(mysql, "create table t1 (c1 int unsigned, c2 int
unsigned, c3 int, c4 int, c5 int, c6 int unsigned, c7 int)") == 0);
+
+ CPPUNIT_ASSERT((stmt = mysql_stmt_init(mysql)) != 0);
+ CPPUNIT_ASSERT(mysql_stmt_prepare(stmt, query, strlen(query)) == 0);
+ CPPUNIT_ASSERT(mysql_stmt_param_count(stmt) == 7);
+
+ memset(bind, 0, sizeof(bind));
+ bind[0].buffer_type = MYSQL_TYPE_LONG;
+ bind[0].buffer = (char *)&i1;
+
+ bind[1].buffer_type = MYSQL_TYPE_LONG;
+ bind[1].buffer = (char *)&i2;
+
+ bind[2].buffer_type = MYSQL_TYPE_LONG;
+ bind[2].buffer = (char *)&i3;
+ bind[3].is_null = &is_null;
+
+ bind[3].buffer_type = MYSQL_TYPE_LONG;
+ bind[3].buffer = (char *)&i4;
+
+ bind[4].buffer_type = MYSQL_TYPE_LONG;
+ bind[4].buffer = (char *)&i5;
+
+ bind[5].buffer_type = MYSQL_TYPE_LONG;
+ bind[5].buffer = (char *)&i6;
+
+ bind[6].buffer_type = MYSQL_TYPE_LONG;
+ bind[6].buffer = (char *)&i7;
+
+ CPPUNIT_ASSERT(mysql_stmt_bind_param(stmt, bind) == 0);
+
+ i1 = -23;
+ i2 = 35999;
+// i3 = NULL;
+ i4 = -500;
+ i5 = -9999999;
+ i6 = -0;
+ i7 = 0;
+
+ CPPUNIT_ASSERT(mysql_stmt_execute(stmt) == 0);
+ CPPUNIT_ASSERT(mysql_stmt_affected_rows(stmt) == 1);
+
+ CPPUNIT_ASSERT(mysql_stmt_close(stmt) == 0);
+}
Index: libmysequoia/test/TestMySQLAPI.hpp
diff -u libmysequoia/test/TestMySQLAPI.hpp:1.14
libmysequoia/test/TestMySQLAPI.hpp:1.15
--- libmysequoia/test/TestMySQLAPI.hpp:1.14 Wed Apr 5 09:28:27 2006
+++ libmysequoia/test/TestMySQLAPI.hpp Mon Apr 10 09:34:50 2006
@@ -61,6 +61,7 @@
CPPUNIT_TEST (mysql_blob_test);
CPPUNIT_TEST (bug_lms_6_test);
CPPUNIT_TEST (bug_lms_9_test);
+ CPPUNIT_TEST (bug_lms_10_test);
CPPUNIT_TEST_SUITE_END ();
public:
@@ -99,6 +100,7 @@
void mysql_blob_test(void);
void bug_lms_6_test(void);
void bug_lms_9_test(void);
+ void bug_lms_10_test(void);
private:
MYSQL *mysql;
};
_______________________________________________
Carob-commits mailing list
[email protected]
https://forge.continuent.org/mailman/listinfo/carob-commits