diff options
Diffstat (limited to 'mapping/person.hxx')
-rw-r--r-- | mapping/person.hxx | 114 |
1 files changed, 114 insertions, 0 deletions
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 <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#ifndef PERSON_HXX +#define PERSON_HXX + +#include <string> +#include <ostream> + +#include <odb/core.hxx> + +// 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 |