From 2f17222fd6b2f3cfa251e57daf67ee58d25d6e43 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Thu, 23 Sep 2010 09:32:31 +0200 Subject: Add the mapping example It shows how to map between C++ value types and SQL types --- mapping/person.hxx | 114 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 mapping/person.hxx (limited to 'mapping/person.hxx') diff --git a/mapping/person.hxx b/mapping/person.hxx new file mode 100644 index 0000000..b091944 --- /dev/null +++ b/mapping/person.hxx @@ -0,0 +1,114 @@ +// file : mapping/person.hxx +// author : Boris Kolpackov +// copyright : not copyrighted - public domain + +#ifndef PERSON_HXX +#define PERSON_HXX + +#include +#include + +#include + +// In our database boolean values are stored as strings with valid +// values being "true" and "false". +// +#pragma db value(bool) type("VARCHAR(5) NOT NULL") + +#pragma db value type("DATE NOT NULL") +class date +{ +public: + date (unsigned int year, unsigned int month, unsigned int day) + : year_ (year), month_ (month), day_ (day) + { + } + + unsigned int + year () const + { + return year_; + } + + unsigned int + month () const + { + return month_; + } + + unsigned int + day () const + { + return day_; + } + +private: + unsigned int year_; + unsigned int month_; + unsigned int day_; +}; + +inline std::ostream& +operator<< (std::ostream& os, const date& d) +{ + return os << d.year () << '-' << d.month () << '-' << d.day (); +} + +#pragma db object +class person +{ +public: + person (const std::string& first, + const std::string& last, + const date& born, + bool married) + : first_ (first), last_ (last), born_ (born), married_ (married) + { + } + + const std::string& + first () const + { + return first_; + } + + const std::string& + last () const + { + return last_; + } + + const date& + born () const + { + return born_; + } + + bool + married () const + { + return married_; + } + +public: + unsigned long + id () const + { + return id_; + } + +private: + friend class odb::access; + + person (): born_ (0, 0, 0) {} + + #pragma db id auto + unsigned long id_; + + std::string first_; + std::string last_; + date born_; + bool married_; +}; + +#endif // PERSON_HXX -- cgit v1.1