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

Reply via email to