Date: Wednesday, February 1, 2006 @ 13:45:52
  Author: zsolt
    Path: /cvsroot/carob/libmysequoia

Modified: src/CarobMySQL.cpp (1.45 -> 1.46) src/CarobStmt.cpp (1.20 ->
          1.21) test/TestMySQLAPI.cpp (1.28 -> 1.29)

- implemented TimeStamp, DateTime support
- unit test for DateTime


-----------------------+
 src/CarobMySQL.cpp    |    7 ++---
 src/CarobStmt.cpp     |    4 +--
 test/TestMySQLAPI.cpp |   60 ++++++++++++++++++++++++++++++------------------
 3 files changed, 43 insertions(+), 28 deletions(-)


Index: libmysequoia/src/CarobMySQL.cpp
diff -u libmysequoia/src/CarobMySQL.cpp:1.45 
libmysequoia/src/CarobMySQL.cpp:1.46
--- libmysequoia/src/CarobMySQL.cpp:1.45        Wed Feb  1 10:25:56 2006
+++ libmysequoia/src/CarobMySQL.cpp     Wed Feb  1 13:45:52 2006
@@ -837,11 +837,10 @@
           result += buffer;
           field_len = *b.length;
           break;
+        case MYSQL_TYPE_TIMESTAMP:
         case MYSQL_TYPE_DATETIME:
-          //TODO when Carob implements Timestamp, change this
-          //lData = drsPtr->getAsInt64(i+1);
-          lData = 0;
-          getFromTime(&b,fPtr,&lData);
+          SQLTimeStamp ts = drsPtr->getTimeStamp(i+1);
+          getFromDateTime(&b,fPtr,&ts);
           result += buffer;
           field_len = *b.length;
           break;
Index: libmysequoia/src/CarobStmt.cpp
diff -u libmysequoia/src/CarobStmt.cpp:1.20 libmysequoia/src/CarobStmt.cpp:1.21
--- libmysequoia/src/CarobStmt.cpp:1.20 Tue Jan 31 16:31:52 2006
+++ libmysequoia/src/CarobStmt.cpp      Wed Feb  1 13:45:52 2006
@@ -762,8 +762,7 @@
         break;
       case MYSQL_TYPE_DATETIME:
       case MYSQL_TYPE_TIMESTAMP:
-        //TODO implement it, but first wait for the implementation in Carob
-//        result = new int64_t(liveResultSet->getAsInt64(colNo));
+        result = new SQLTimeStamp(liveResultSet->getTimeStamp(colNo));
         break;
       case MYSQL_TYPE_NULL:
         break;
@@ -821,6 +820,7 @@
       break;
     case MYSQL_TYPE_DATETIME:
     case MYSQL_TYPE_TIMESTAMP:
+      delete (SQLTimeStamp *)buffer;
       break;
     case MYSQL_TYPE_NULL:
       break;
Index: libmysequoia/test/TestMySQLAPI.cpp
diff -u libmysequoia/test/TestMySQLAPI.cpp:1.28 
libmysequoia/test/TestMySQLAPI.cpp:1.29
--- libmysequoia/test/TestMySQLAPI.cpp:1.28     Fri Jan 20 10:33:21 2006
+++ libmysequoia/test/TestMySQLAPI.cpp  Wed Feb  1 13:45:52 2006
@@ -211,8 +211,10 @@
 
 void TestMySQLAPI::mysql_real_query_2_test(void)
 {
-  char *query = "insert into t1 (b,c,d,e,g,h) values (1,'a1','2006-01-01', 
'1:2:3', 1.1, 1.1),"
-                "(2,'a2','2006-01-02','4:5:6', 2.2, 
2.2),(3,'a3','2006-01-03','7:8:9', 3.3, 3.3)";
+  char *query = "insert into t1 (b,c,d,e,f,g,h) values "
+                "(1,'a1','2006-01-01','1:2:3', '2006-01-01 1:2:3', 1.1, 1.1),"
+                "(2,'a2','2006-01-02','4:5:6', '2006-01-02 4:5:6', 2.2, 2.2),"
+                "(3,'a3','2006-01-03','7:8:9', '2006-01-03 7:8:9', 3.3, 3.3)";
 
   // connect to the database
   CPPUNIT_ASSERT(mysql_real_connect(mysql, HOST, USER1, PASSWD1, DB1, 0, 0, 0) 
!= 0);
@@ -341,17 +343,17 @@
 void TestMySQLAPI::mysql_stmt_prepare_bind_exec_test(void)
 {
   MYSQL_STMT *stmt;
-  MYSQL_BIND bind[5];
+  MYSQL_BIND bind[6];
   int int_data;
-  MYSQL_TIME date_data, time_data;
+  MYSQL_TIME date_data, time_data, ts_data;
   float float_data;
   double double_data;
-  char *query = "insert into t1 (b,d,e,g,h) values (?,?,?,?,?)";
+  char *query = "insert into t1 (b,d,e,f,g,h) values (?,?,?,?,?,?)";
 
   CPPUNIT_ASSERT(mysql_real_connect(mysql, HOST, USER1, PASSWD1, DB1, 0, 0, 0) 
!= 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) == 5);
+  CPPUNIT_ASSERT(mysql_stmt_param_count(stmt) == 6);
   
   memset(bind, 0, sizeof(bind));
   bind[0].buffer_type = MYSQL_TYPE_LONG;
@@ -365,25 +367,31 @@
   bind[2].buffer = (char *)&time_data;
   bind[2].buffer_length = sizeof(MYSQL_TIME);
 
-  bind[3].buffer_type = MYSQL_TYPE_FLOAT;
-  bind[3].buffer = (char *)&float_data;
+  bind[3].buffer_type = MYSQL_TYPE_DATETIME;
+  bind[3].buffer = (char *)&ts_data;
+  bind[3].buffer_length = sizeof(MYSQL_TIME);
 
-  bind[4].buffer_type = MYSQL_TYPE_DOUBLE;
-  bind[4].buffer = (char *)&double_data;
+  bind[4].buffer_type = MYSQL_TYPE_FLOAT;
+  bind[4].buffer = (char *)&float_data;
+
+  bind[5].buffer_type = MYSQL_TYPE_DOUBLE;
+  bind[5].buffer = (char *)&double_data;
 
   CPPUNIT_ASSERT(mysql_stmt_bind_param(stmt, bind) == 0);
   
   int_data = 4;
   memset(&date_data, 0, sizeof(MYSQL_TIME));
+  memset(&ts_data, 0, sizeof(MYSQL_TIME));
+  ts_data.time_type = MYSQL_TIMESTAMP_DATETIME;
   date_data.time_type = MYSQL_TIMESTAMP_DATE;
-  date_data.year = 2006;
-  date_data.month = 1;
-  date_data.day = 4;
+  ts_data.year = date_data.year = 2006;
+  ts_data.month = date_data.month = 1;
+  ts_data.day = date_data.day = 4;
   memset(&time_data, 0, sizeof(MYSQL_TIME));
   time_data.time_type = MYSQL_TIMESTAMP_TIME;
-  time_data.hour = 10;
-  time_data.minute = 11;
-  time_data.second = 12;
+  ts_data.hour = time_data.hour = 10;
+  ts_data.minute = time_data.minute = 11;
+  ts_data.second = time_data.second = 12;
   float_data = 4.4;
   double_data = 4.4;
   
@@ -392,15 +400,17 @@
   
   int_data = 5;
   memset(&date_data, 0, sizeof(MYSQL_TIME));
+  memset(&ts_data, 0, sizeof(MYSQL_TIME));
+  ts_data.time_type = MYSQL_TIMESTAMP_DATETIME;
   date_data.time_type = MYSQL_TIMESTAMP_DATE;
-  date_data.year = 2006;
-  date_data.month = 1;
-  date_data.day = 5;
+  ts_data.year = date_data.year = 2006;
+  ts_data.month = date_data.month = 1;
+  ts_data.day = date_data.day = 5;
   memset(&time_data, 0, sizeof(MYSQL_TIME));
   time_data.time_type = MYSQL_TIMESTAMP_TIME;
-  time_data.hour = 13;
-  time_data.minute = 14;
-  time_data.second = 15;
+  ts_data.hour = time_data.hour = 13;
+  ts_data.minute = time_data.minute = 14;
+  ts_data.second = time_data.second = 15;
   float_data = 5.5;
   double_data = 5.5;
   CPPUNIT_ASSERT(mysql_stmt_execute(stmt) == 0);
@@ -475,6 +485,12 @@
     CPPUNIT_ASSERT(date.year == 2006);
     CPPUNIT_ASSERT(date.month == 1);
     CPPUNIT_ASSERT(date.day == count);
+    CPPUNIT_ASSERT(datetime.year == date.year);
+    CPPUNIT_ASSERT(datetime.month == date.month);
+    CPPUNIT_ASSERT(datetime.day == date.day);
+    CPPUNIT_ASSERT(datetime.hour == time.hour);
+    CPPUNIT_ASSERT(datetime.minute == time.minute);
+    CPPUNIT_ASSERT(datetime.second == time.second);
     CPPUNIT_ASSERT(fabsf(float_data - count * 1.1) < 0.000001);
     CPPUNIT_ASSERT(fabs(double_data - count * 1.1) < 0.000000000000001);
     CPPUNIT_ASSERT(count++ == (unsigned int)int_res);

_______________________________________________
Carob-commits mailing list
[email protected]
https://forge.continuent.org/mailman/listinfo/carob-commits

Reply via email to