diff --git a/.gitignore b/.gitignore index 1f51cd384..26f82f6b3 100644 --- a/.gitignore +++ b/.gitignore @@ -59,6 +59,7 @@ XML/testsuite/rss.xml Icon? ehthumbs.db Thumbs.db +*~ # VS generated files # ###################### diff --git a/Data/MySQL/src/ResultMetadata.cpp b/Data/MySQL/src/ResultMetadata.cpp index ae43f9f0c..b018b7d46 100644 --- a/Data/MySQL/src/ResultMetadata.cpp +++ b/Data/MySQL/src/ResultMetadata.cpp @@ -130,8 +130,13 @@ namespace case MYSQL_TYPE_LONGLONG: if (unsig) return Poco::Data::MetaColumn::FDT_UINT64; return Poco::Data::MetaColumn::FDT_INT64; + case MYSQL_TYPE_DATE: + return Poco::Data::MetaColumn::FDT_DATE; + case MYSQL_TYPE_TIME: + return Poco::Data::MetaColumn::FDT_TIME; + case MYSQL_TYPE_DATETIME: return Poco::Data::MetaColumn::FDT_TIMESTAMP; diff --git a/Data/MySQL/testsuite/src/MySQLTest.cpp b/Data/MySQL/testsuite/src/MySQLTest.cpp index bc4f058e9..f9e457e0a 100644 --- a/Data/MySQL/testsuite/src/MySQLTest.cpp +++ b/Data/MySQL/testsuite/src/MySQLTest.cpp @@ -423,6 +423,10 @@ void MySQLTest::testDateTime() recreatePersonDateTimeTable(); _pExecutor->dateTime(); + recreatePersonDateTable(); + _pExecutor->date(); + recreatePersonTimeTable(); + _pExecutor->time(); } @@ -715,6 +719,24 @@ void MySQLTest::recreatePersonDateTimeTable() } +void MySQLTest::recreatePersonDateTable() +{ + dropTable("Person"); + try { *_pSession << "CREATE TABLE Person (LastName VARCHAR(30), FirstName VARCHAR(30), Address VARCHAR(30), Birthday DATE)", now; } + catch(ConnectionException& ce){ std::cout << ce.displayText() << std::endl; fail ("recreatePersonDateTable()"); } + catch(StatementException& se){ std::cout << se.displayText() << std::endl; fail ("recreatePersonDateTable()"); } +} + + +void MySQLTest::recreatePersonTimeTable() +{ + dropTable("Person"); + try { *_pSession << "CREATE TABLE Person (LastName VARCHAR(30), FirstName VARCHAR(30), Address VARCHAR(30), Birthday TIME)", now; } + catch(ConnectionException& ce){ std::cout << ce.displayText() << std::endl; fail ("recreatePersonTimeTable()"); } + catch(StatementException& se){ std::cout << se.displayText() << std::endl; fail ("recreatePersonTimeTable()"); } +} + + void MySQLTest::recreateIntsTable() { dropTable("Strings"); diff --git a/Data/MySQL/testsuite/src/MySQLTest.h b/Data/MySQL/testsuite/src/MySQLTest.h index 3a9fe275c..887f69af1 100644 --- a/Data/MySQL/testsuite/src/MySQLTest.h +++ b/Data/MySQL/testsuite/src/MySQLTest.h @@ -130,6 +130,8 @@ private: void recreatePersonTable(); void recreatePersonBLOBTable(); void recreatePersonDateTimeTable(); + void recreatePersonDateTable(); + void recreatePersonTimeTable(); void recreateStringsTable(); void recreateIntsTable(); void recreateFloatsTable(); diff --git a/Data/MySQL/testsuite/src/SQLExecutor.cpp b/Data/MySQL/testsuite/src/SQLExecutor.cpp index 4e63a6109..73b7205c1 100644 --- a/Data/MySQL/testsuite/src/SQLExecutor.cpp +++ b/Data/MySQL/testsuite/src/SQLExecutor.cpp @@ -39,6 +39,8 @@ #include "Poco/Any.h" #include "Poco/Exception.h" #include "Poco/Data/LOB.h" +#include "Poco/Data/Date.h" +#include "Poco/Data/Time.h" #include "Poco/Data/StatementImpl.h" #include "Poco/Data/RecordSet.h" #include "Poco/Data/Transaction.h" @@ -1253,6 +1255,90 @@ void SQLExecutor::emptyDB() } +void SQLExecutor::dateTime() +{ + std::string funct = "dateTime()"; + std::string lastName("Bart"); + std::string firstName("Simpson"); + std::string address("Springfield"); + DateTime birthday(1980, 4, 1, 5, 45, 12); + + int count = 0; + try { *_pSession << "INSERT INTO Person VALUES (?,?,?,?)", use(lastName), use(firstName), use(address), use(birthday), now; } + catch(ConnectionException& ce){ std::cout << ce.displayText() << std::endl; fail (funct); } + catch(StatementException& se){ std::cout << se.displayText() << std::endl; fail (funct); } + try { *_pSession << "SELECT COUNT(*) FROM Person", into(count), now; } + catch(ConnectionException& ce){ std::cout << ce.displayText() << std::endl; fail (funct); } + catch(StatementException& se){ std::cout << se.displayText() << std::endl; fail (funct); } + assert (count == 1); + + DateTime bd; + assert (bd != birthday); + try { *_pSession << "SELECT Birthday FROM Person", into(bd), now; } + catch(ConnectionException& ce){ std::cout << ce.displayText() << std::endl; fail (funct); } + catch(StatementException& se){ std::cout << se.displayText() << std::endl; fail (funct); } + assert (bd == birthday); + + std::cout << std::endl << RecordSet(*_pSession, "SELECT * FROM Person"); +} + + +void SQLExecutor::date() +{ + std::string funct = "date()"; + std::string lastName("Bart"); + std::string firstName("Simpson"); + std::string address("Springfield"); + Date birthday(1980, 4, 1); + + int count = 0; + try { *_pSession << "INSERT INTO Person VALUES (?,?,?,?)", use(lastName), use(firstName), use(address), use(birthday), now; } + catch(ConnectionException& ce){ std::cout << ce.displayText() << std::endl; fail (funct); } + catch(StatementException& se){ std::cout << se.displayText() << std::endl; fail (funct); } + try { *_pSession << "SELECT COUNT(*) FROM Person", into(count), now; } + catch(ConnectionException& ce){ std::cout << ce.displayText() << std::endl; fail (funct); } + catch(StatementException& se){ std::cout << se.displayText() << std::endl; fail (funct); } + assert (count == 1); + + Date bd; + assert (bd != birthday); + try { *_pSession << "SELECT Birthday FROM Person", into(bd), now; } + catch(ConnectionException& ce){ std::cout << ce.displayText() << std::endl; fail (funct); } + catch(StatementException& se){ std::cout << se.displayText() << std::endl; fail (funct); } + assert (bd == birthday); + + std::cout << std::endl << RecordSet(*_pSession, "SELECT * FROM Person"); +} + + +void SQLExecutor::time() +{ + std::string funct = "date()"; + std::string lastName("Bart"); + std::string firstName("Simpson"); + std::string address("Springfield"); + Time birthday(1, 2, 3); + + int count = 0; + try { *_pSession << "INSERT INTO Person VALUES (?,?,?,?)", use(lastName), use(firstName), use(address), use(birthday), now; } + catch(ConnectionException& ce){ std::cout << ce.displayText() << std::endl; fail (funct); } + catch(StatementException& se){ std::cout << se.displayText() << std::endl; fail (funct); } + try { *_pSession << "SELECT COUNT(*) FROM Person", into(count), now; } + catch(ConnectionException& ce){ std::cout << ce.displayText() << std::endl; fail (funct); } + catch(StatementException& se){ std::cout << se.displayText() << std::endl; fail (funct); } + assert (count == 1); + + Time bd; + assert (bd != birthday); + try { *_pSession << "SELECT Birthday FROM Person", into(bd), now; } + catch(ConnectionException& ce){ std::cout << ce.displayText() << std::endl; fail (funct); } + catch(StatementException& se){ std::cout << se.displayText() << std::endl; fail (funct); } + assert (bd == birthday); + + std::cout << std::endl << RecordSet(*_pSession, "SELECT * FROM Person"); +} + + void SQLExecutor::blob(int bigSize) { std::string funct = "blob()"; @@ -1298,34 +1384,6 @@ void SQLExecutor::blob(int bigSize) } -void SQLExecutor::dateTime() -{ - std::string funct = "dateTime()"; - std::string lastName("Bart"); - std::string firstName("Simpson"); - std::string address("Springfield"); - DateTime birthday(1980, 4, 1, 5, 45, 12); - - int count = 0; - try { *_pSession << "INSERT INTO Person VALUES (?,?,?,?)", use(lastName), use(firstName), use(address), use(birthday), now; } - catch(ConnectionException& ce){ std::cout << ce.displayText() << std::endl; fail (funct); } - catch(StatementException& se){ std::cout << se.displayText() << std::endl; fail (funct); } - try { *_pSession << "SELECT COUNT(*) FROM Person", into(count), now; } - catch(ConnectionException& ce){ std::cout << ce.displayText() << std::endl; fail (funct); } - catch(StatementException& se){ std::cout << se.displayText() << std::endl; fail (funct); } - assert (count == 1); - - DateTime bd; - assert (bd != birthday); - try { *_pSession << "SELECT Birthday FROM Person", into(bd), now; } - catch(ConnectionException& ce){ std::cout << ce.displayText() << std::endl; fail (funct); } - catch(StatementException& se){ std::cout << se.displayText() << std::endl; fail (funct); } - assert (bd == birthday); - - std::cout << std::endl << RecordSet(*_pSession, "SELECT * FROM Person"); -} - - void SQLExecutor::blobStmt() { std::string funct = "blobStmt()"; diff --git a/Data/MySQL/testsuite/src/SQLExecutor.h b/Data/MySQL/testsuite/src/SQLExecutor.h index 1dc64e38e..ae6e1f3bd 100644 --- a/Data/MySQL/testsuite/src/SQLExecutor.h +++ b/Data/MySQL/testsuite/src/SQLExecutor.h @@ -103,6 +103,8 @@ public: void blob(int bigSize = 1024); void blobStmt(); void dateTime(); + void date(); + void time(); void floats(); void doubles(); void tuples();