From ec84a9a8c6578fdd8ace8ab14cb3a3ca2c602058 Mon Sep 17 00:00:00 2001 From: aleks-f Date: Thu, 6 Dec 2012 22:35:08 -0600 Subject: [PATCH] added DateTime to samples added DateTime to samples fixed TypeHandler::prepare for AutoPtr and SharedPtr --- CHANGELOG | 1 + Data/include/Poco/Data/TypeHandler.h | 12 ++---- Data/samples/RecordSet/src/RecordSet.cpp | 8 ++-- .../samples/RowFormatter/src/RowFormatter.cpp | 12 +++--- Data/samples/TypeHandler/src/TypeHandler.cpp | 41 +++++++++++++------ 5 files changed, 46 insertions(+), 28 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 018314324..c9598fda1 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -14,6 +14,7 @@ Release 1.5.0 (2012-12-17) - fixed GH #16: NetworkInterface::firstAddress() should not throw on unconfigured interfaces - Android compile/build support (by Rangel Reale) - TypeHandler::prepare() now takes const-reference +- fixed GH #27: Poco::URI::decode() doesn't properly handle '+' Release 1.5.0 (2012-10-14) ========================== diff --git a/Data/include/Poco/Data/TypeHandler.h b/Data/include/Poco/Data/TypeHandler.h index 1674aabb6..e206d34c8 100644 --- a/Data/include/Poco/Data/TypeHandler.h +++ b/Data/include/Poco/Data/TypeHandler.h @@ -1991,7 +1991,6 @@ private: }; - template class TypeHandler >: public AbstractTypeHandler { @@ -2055,12 +2054,10 @@ public: TypeHandler::extract(pos, *obj, *obj, pExt); } - static void prepare(std::size_t pos, const Poco::AutoPtr& obj, AbstractPreparator* pPreparator) + static void prepare(std::size_t pos, const Poco::AutoPtr&, AbstractPreparator* pPreparator) { poco_assert_dbg (pPreparator != 0); - if (!obj) - obj = new T(); - TypeHandler::prepare(pos, *obj, pPreparator); + TypeHandler::prepare(pos, T(), pPreparator); } private: @@ -2097,11 +2094,10 @@ public: TypeHandler::extract(pos, *obj, *obj, pExt); } - static void prepare(std::size_t pos, const Poco::SharedPtr& obj, AbstractPreparator* pPreparator) + static void prepare(std::size_t pos, const Poco::SharedPtr&, AbstractPreparator* pPreparator) { poco_assert_dbg (pPreparator != 0); - // *obj will trigger a nullpointer exception if empty - TypeHandler::prepare(pos, *obj, pPreparator); + TypeHandler::prepare(pos, T(), pPreparator); } private: diff --git a/Data/samples/RecordSet/src/RecordSet.cpp b/Data/samples/RecordSet/src/RecordSet.cpp index 9b9dc4d5c..1d20d139a 100644 --- a/Data/samples/RecordSet/src/RecordSet.cpp +++ b/Data/samples/RecordSet/src/RecordSet.cpp @@ -32,6 +32,7 @@ #include "Poco/SharedPtr.h" +#include "Poco/DateTime.h" #include "Poco/Data/SessionFactory.h" #include "Poco/Data/Session.h" #include "Poco/Data/RecordSet.h" @@ -41,6 +42,7 @@ using namespace Poco::Data::Keywords; +using Poco::DateTime; using Poco::Data::Session; using Poco::Data::Statement; using Poco::Data::RecordSet; @@ -66,11 +68,11 @@ int main(int argc, char** argv) session << "DROP TABLE IF EXISTS Person", now; // (re)create table - session << "CREATE TABLE Person (Name VARCHAR(30), Address VARCHAR, Age INTEGER(3))", now; + session << "CREATE TABLE Person (Name VARCHAR(30), Address VARCHAR, Age INTEGER(3), Birthday DATE)", now; // insert some rows - session << "INSERT INTO Person VALUES('Bart Simpson', 'Springfield', 12)", now; - session << "INSERT INTO Person VALUES('Lisa Simpson', 'Springfield', 10)", now; + session << "INSERT INTO Person VALUES('Bart Simpson', 'Springfield', 12, ?)", use(DateTime(1980, 4, 1)), now; + session << "INSERT INTO Person VALUES('Lisa Simpson', 'Springfield', 10, ?)", use(DateTime(1982, 5, 9)), now; // a simple query Statement select(session); diff --git a/Data/samples/RowFormatter/src/RowFormatter.cpp b/Data/samples/RowFormatter/src/RowFormatter.cpp index 42c0496f9..3b9073393 100644 --- a/Data/samples/RowFormatter/src/RowFormatter.cpp +++ b/Data/samples/RowFormatter/src/RowFormatter.cpp @@ -33,6 +33,7 @@ #include "Poco/SharedPtr.h" +#include "Poco/DateTime.h" #include "Poco/Data/SessionFactory.h" #include "Poco/Data/Session.h" #include "Poco/Data/Statement.h" @@ -43,6 +44,7 @@ using namespace Poco::Data::Keywords; +using Poco::DateTime; using Poco::Data::Session; using Poco::Data::Statement; using Poco::Data::RecordSet; @@ -111,13 +113,13 @@ int main(int argc, char** argv) session << "DROP TABLE IF EXISTS Simpsons", now; // (re)create table - session << "CREATE TABLE Simpsons (Name VARCHAR(30), Address VARCHAR, Age INTEGER(3))", now; + session << "CREATE TABLE Simpsons (Name VARCHAR(30), Address VARCHAR, Age INTEGER(3), Birthday DATE)", now; // insert some rows - session << "INSERT INTO Simpsons VALUES('Homer Simpson', 'Springfield', 42)", now; - session << "INSERT INTO Simpsons VALUES('Marge Simpson', 'Springfield', 38)", now; - session << "INSERT INTO Simpsons VALUES('Bart Simpson', 'Springfield', 12)", now; - session << "INSERT INTO Simpsons VALUES('Lisa Simpson', 'Springfield', 10)", now; + session << "INSERT INTO Simpsons VALUES('Homer Simpson', 'Springfield', 42, ?)", use(DateTime(1956, 3, 1)), now; + session << "INSERT INTO Simpsons VALUES('Marge Simpson', 'Springfield', 38, ?)", use(DateTime(1954, 10, 1)), now; + session << "INSERT INTO Simpsons VALUES('Bart Simpson', 'Springfield', 12, ?)", use(DateTime(1980, 4, 1)), now; + session << "INSERT INTO Simpsons VALUES('Lisa Simpson', 'Springfield', 10, ?)", use(DateTime(1982, 5, 9)), now; // create a statement and print the column names and data as HTML table HTMLTableFormatter tf; diff --git a/Data/samples/TypeHandler/src/TypeHandler.cpp b/Data/samples/TypeHandler/src/TypeHandler.cpp index 41237bf10..52d8315f1 100644 --- a/Data/samples/TypeHandler/src/TypeHandler.cpp +++ b/Data/samples/TypeHandler/src/TypeHandler.cpp @@ -32,6 +32,7 @@ #include "Poco/SharedPtr.h" +#include "Poco/DateTimeFormatter.h" #include "Poco/Data/SessionFactory.h" #include "Poco/Data/Session.h" #include "Poco/Data/TypeHandler.h" @@ -41,15 +42,18 @@ using namespace Poco::Data::Keywords; +using Poco::DateTime; +using Poco::DateTimeFormatter; using Poco::Data::Session; using Poco::Data::Statement; struct Person { - std::string name; - std::string address; - int age; + std::string name; + std::string address; + int age; + DateTime birthday; }; @@ -73,6 +77,7 @@ public: TypeHandler::bind(pos++, person.name, pBinder, dir); TypeHandler::bind(pos++, person.address, pBinder, dir); TypeHandler::bind(pos++, person.age, pBinder, dir); + TypeHandler::bind(pos++, person.birthday, pBinder, dir); } static void extract(std::size_t pos, Person& person, const Person& deflt, AbstractExtractor* pExtr) @@ -80,6 +85,7 @@ public: TypeHandler::extract(pos++, person.name, deflt.name, pExtr); TypeHandler::extract(pos++, person.address, deflt.address, pExtr); TypeHandler::extract(pos++, person.age, deflt.age, pExtr); + TypeHandler::extract(pos++, person.birthday, deflt.birthday, pExtr); } static void prepare(std::size_t pos, const Person& person, AbstractPreparator* pPrep) @@ -87,6 +93,7 @@ public: TypeHandler::prepare(pos++, person.name, pPrep); TypeHandler::prepare(pos++, person.address, pPrep); TypeHandler::prepare(pos++, person.age, pPrep); + TypeHandler::prepare(pos++, person.birthday, pPrep); } }; @@ -106,49 +113,59 @@ int main(int argc, char** argv) session << "DROP TABLE IF EXISTS Person", now; // (re)create table - session << "CREATE TABLE Person (Name VARCHAR(30), Address VARCHAR, Age INTEGER(3))", now; + session << "CREATE TABLE Person (Name VARCHAR(30), Address VARCHAR, Age INTEGER(3), Birthday DATE)", now; // insert some rows Person person = { "Bart Simpson", "Springfield", - 12 + 10, + DateTime(1980, 4, 1) }; Statement insert(session); - insert << "INSERT INTO Person VALUES(?, ?, ?)", + insert << "INSERT INTO Person VALUES(?, ?, ?, ?)", use(person); insert.execute(); person.name = "Lisa Simpson"; person.address = "Springfield"; - person.age = 10; - + person.age = 8; + person.birthday = DateTime(1982, 5, 9); + insert.execute(); // a simple query Statement select(session); - select << "SELECT Name, Address, Age FROM Person", + select << "SELECT Name, Address, Age, Birthday FROM Person", into(person), range(0, 1); // iterate over result set one row at a time while (!select.done()) { select.execute(); - std::cout << person.name << " " << person.address << " " << person.age << std::endl; + std::cout << person.name << "\t" + << person.address << "\t" + << person.age << "\t" + << DateTimeFormatter::format(person.birthday, "%b %d %Y") + << std::endl; } // another query - store the result in a container std::vector persons; - session << "SELECT Name, Address, Age FROM Person", + session << "SELECT Name, Address, Age, Birthday FROM Person", into(persons), now; for (std::vector::const_iterator it = persons.begin(); it != persons.end(); ++it) { - std::cout << it->name << " " << it->address << " " << it->age << std::endl; + std::cout << it->name << "\t" + << it->address << "\t" + << it->age << "\t" + << DateTimeFormatter::format(it->birthday, "%b %d %Y") + << std::endl; } return 0;