mirror of
https://github.com/pocoproject/poco.git
synced 2025-04-01 09:24:55 +02:00
TypeHandler documentation clarification and test modification
This commit is contained in:
parent
50a373c3b9
commit
5c7994c863
@ -92,38 +92,81 @@ using Poco::Data::SQLite::ParameterCountMismatchException;
|
|||||||
using Poco::Int32;
|
using Poco::Int32;
|
||||||
|
|
||||||
|
|
||||||
struct Person
|
class Person
|
||||||
{
|
{
|
||||||
std::string lastName;
|
public:
|
||||||
std::string firstName;
|
Person(){_age = 0;}
|
||||||
std::string address;
|
Person(const std::string& ln, const std::string& fn, const std::string& adr, int a):_lastName(ln), _firstName(fn), _address(adr), _age(a)
|
||||||
int age;
|
|
||||||
Person(){age = 0;}
|
|
||||||
Person(const std::string& ln, const std::string& fn, const std::string& adr, int a):lastName(ln), firstName(fn), address(adr), age(a)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
bool operator==(const Person& other) const
|
bool operator==(const Person& other) const
|
||||||
{
|
{
|
||||||
return lastName == other.lastName && firstName == other.firstName && address == other.address && age == other.age;
|
return _lastName == other._lastName && _firstName == other._firstName && _address == other._address && _age == other._age;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator < (const Person& p) const
|
bool operator < (const Person& p) const
|
||||||
{
|
{
|
||||||
if (age < p.age)
|
if (_age < p._age)
|
||||||
return true;
|
return true;
|
||||||
if (lastName < p.lastName)
|
if (_lastName < p._lastName)
|
||||||
return true;
|
return true;
|
||||||
if (firstName < p.firstName)
|
if (_firstName < p._firstName)
|
||||||
return true;
|
return true;
|
||||||
return (address < p.address);
|
return (_address < p._address);
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::string& operator () () const
|
const std::string& operator () () const
|
||||||
/// This method is required so we can extract data to a map!
|
/// This method is required so we can extract data to a map!
|
||||||
{
|
{
|
||||||
// we choose the lastName as examplary key
|
// we choose the lastName as examplary key
|
||||||
return lastName;
|
return _lastName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const std::string& getLastName() const
|
||||||
|
{
|
||||||
|
return _lastName;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setLastName(const std::string& lastName)
|
||||||
|
{
|
||||||
|
_lastName = lastName;
|
||||||
|
}
|
||||||
|
|
||||||
|
const std::string& getFirstName() const
|
||||||
|
{
|
||||||
|
return _firstName;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setFirstName(const std::string& firstName)
|
||||||
|
{
|
||||||
|
_firstName = firstName;
|
||||||
|
}
|
||||||
|
|
||||||
|
const std::string& getAddress() const
|
||||||
|
{
|
||||||
|
return _address;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setAddress(const std::string& address)
|
||||||
|
{
|
||||||
|
_address = address;
|
||||||
|
}
|
||||||
|
|
||||||
|
const int& getAge() const
|
||||||
|
{
|
||||||
|
return _age;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setAge(const int& age)
|
||||||
|
{
|
||||||
|
_age = age;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::string _lastName;
|
||||||
|
std::string _firstName;
|
||||||
|
std::string _address;
|
||||||
|
int _age;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -139,20 +182,20 @@ public:
|
|||||||
{
|
{
|
||||||
// the table is defined as Person (LastName VARCHAR(30), FirstName VARCHAR, Address VARCHAR, Age INTEGER(3))
|
// the table is defined as Person (LastName VARCHAR(30), FirstName VARCHAR, Address VARCHAR, Age INTEGER(3))
|
||||||
poco_assert_dbg (pBinder != 0);
|
poco_assert_dbg (pBinder != 0);
|
||||||
pBinder->bind(pos++, obj.lastName, dir);
|
pBinder->bind(pos++, obj.getLastName(), dir);
|
||||||
pBinder->bind(pos++, obj.firstName, dir);
|
pBinder->bind(pos++, obj.getFirstName(), dir);
|
||||||
pBinder->bind(pos++, obj.address, dir);
|
pBinder->bind(pos++, obj.getAddress(), dir);
|
||||||
pBinder->bind(pos++, obj.age, dir);
|
pBinder->bind(pos++, obj.getAge(), dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void prepare(std::size_t pos, Person& obj, AbstractPreparator* pPrepare)
|
static void prepare(std::size_t pos, Person& obj, AbstractPreparator* pPrepare)
|
||||||
{
|
{
|
||||||
// the table is defined as Person (LastName VARCHAR(30), FirstName VARCHAR, Address VARCHAR, Age INTEGER(3))
|
// the table is defined as Person (LastName VARCHAR(30), FirstName VARCHAR, Address VARCHAR, Age INTEGER(3))
|
||||||
poco_assert_dbg (pPrepare != 0);
|
poco_assert_dbg (pPrepare != 0);
|
||||||
pPrepare->prepare(pos++, obj.lastName);
|
pPrepare->prepare(pos++, obj.getLastName());
|
||||||
pPrepare->prepare(pos++, obj.firstName);
|
pPrepare->prepare(pos++, obj.getFirstName());
|
||||||
pPrepare->prepare(pos++, obj.address);
|
pPrepare->prepare(pos++, obj.getAddress());
|
||||||
pPrepare->prepare(pos++, obj.age);
|
pPrepare->prepare(pos++, obj.getAge());
|
||||||
}
|
}
|
||||||
|
|
||||||
static std::size_t size()
|
static std::size_t size()
|
||||||
@ -166,15 +209,27 @@ public:
|
|||||||
std::string lastName;
|
std::string lastName;
|
||||||
std::string firstName;
|
std::string firstName;
|
||||||
std::string address;
|
std::string address;
|
||||||
|
int age;
|
||||||
|
|
||||||
if (!pExt->extract(pos++, obj.lastName))
|
if (pExt->extract(pos++, lastName))
|
||||||
obj.lastName = defVal.lastName;
|
obj.setLastName(lastName);
|
||||||
if (!pExt->extract(pos++, obj.firstName))
|
else
|
||||||
obj.firstName = defVal.firstName;
|
obj.setLastName(defVal.getLastName());
|
||||||
if (!pExt->extract(pos++, obj.address))
|
|
||||||
obj.address = defVal.address;
|
if (pExt->extract(pos++, firstName))
|
||||||
if (!pExt->extract(pos++, obj.age))
|
obj.setFirstName(firstName);
|
||||||
obj.age = defVal.age;
|
else
|
||||||
|
obj.setFirstName(defVal.getFirstName());
|
||||||
|
|
||||||
|
if (pExt->extract(pos++, address))
|
||||||
|
obj.setAddress(address);
|
||||||
|
else
|
||||||
|
obj.setAddress(defVal.getAddress());
|
||||||
|
|
||||||
|
if (pExt->extract(pos++, age))
|
||||||
|
obj.setAge(age);
|
||||||
|
else
|
||||||
|
obj.setAge(defVal.getAge());
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -407,7 +462,7 @@ void SQLiteTest::testComplexType()
|
|||||||
|
|
||||||
Person c1;
|
Person c1;
|
||||||
Person c2;
|
Person c2;
|
||||||
tmp << "SELECT * FROM PERSON WHERE LASTNAME = :ln", into(c1), use(p1.lastName), now;
|
tmp << "SELECT * FROM PERSON WHERE LASTNAME = :ln", into(c1), useRef(p1.getLastName()), now;
|
||||||
assert (c1 == p1);
|
assert (c1 == p1);
|
||||||
|
|
||||||
tmp << "DROP TABLE IF EXISTS Person", now;
|
tmp << "DROP TABLE IF EXISTS Person", now;
|
||||||
@ -1225,7 +1280,7 @@ void SQLiteTest::testEmptyDB()
|
|||||||
Person result;
|
Person result;
|
||||||
Statement stmt = (tmp << "SELECT * FROM PERSON", into(result), limit(1));
|
Statement stmt = (tmp << "SELECT * FROM PERSON", into(result), limit(1));
|
||||||
stmt.execute();
|
stmt.execute();
|
||||||
assert (result.firstName.empty());
|
assert (result.getFirstName().empty());
|
||||||
assert (stmt.done());
|
assert (stmt.done());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -79,7 +79,10 @@ class TypeHandler: public AbstractTypeHandler
|
|||||||
/// std::string _lastName;
|
/// std::string _lastName;
|
||||||
/// std::string _firstName;
|
/// std::string _firstName;
|
||||||
/// int _age;
|
/// int _age;
|
||||||
/// [....] // public set/get methods, a default constructor, optional < operator (for set, multiset) or function operator (for map, multimap)
|
/// public:
|
||||||
|
/// const std::string& getLastName();
|
||||||
|
/// [...] // other set/get methods (returning const reference), a default constructor,
|
||||||
|
/// [...] // optional < operator (for set, multiset) or function operator (for map, multimap)
|
||||||
/// };
|
/// };
|
||||||
///
|
///
|
||||||
/// The TypeHandler must provide a custom bind, size, prepare and extract method:
|
/// The TypeHandler must provide a custom bind, size, prepare and extract method:
|
||||||
@ -103,7 +106,7 @@ class TypeHandler: public AbstractTypeHandler
|
|||||||
/// TypeHandler<int>::bind(pos++, obj.getAge(), pBinder);
|
/// TypeHandler<int>::bind(pos++, obj.getAge(), pBinder);
|
||||||
/// }
|
/// }
|
||||||
///
|
///
|
||||||
/// static void prepare(std::size_t pos, const Person& obj, AbstractPreparator* pPreparator)
|
/// static void prepare(std::size_t pos, Person& obj, AbstractPreparator* pPreparator)
|
||||||
/// {
|
/// {
|
||||||
/// // the table is defined as Person (LastName VARCHAR(30), FirstName VARCHAR, Age INTEGER(3))
|
/// // the table is defined as Person (LastName VARCHAR(30), FirstName VARCHAR, Age INTEGER(3))
|
||||||
/// poco_assert_dbg (pPreparator != 0);
|
/// poco_assert_dbg (pPreparator != 0);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user