From 2ef165437ce47f50110a9b230f302c5cd5fde1d4 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Fri, 25 Feb 2011 12:07:33 +0200 Subject: Add support for examples in subdirectories Move the schema example to schema/custom. --- schema/custom/employee.hxx | 150 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 schema/custom/employee.hxx (limited to 'schema/custom/employee.hxx') diff --git a/schema/custom/employee.hxx b/schema/custom/employee.hxx new file mode 100644 index 0000000..742ad42 --- /dev/null +++ b/schema/custom/employee.hxx @@ -0,0 +1,150 @@ +// file : schema/custom/employee.hxx +// author : Boris Kolpackov +// copyright : not copyrighted - public domain + +#ifndef EMPLOYEE_HXX +#define EMPLOYEE_HXX + +#include +#include + +#include + +// Include TR1 header in a compiler-specific fashion. Fall back +// on the Boost implementation if the compiler does not support TR1. +// +#include + +using std::tr1::shared_ptr; + +typedef std::vector degrees; + +#pragma db value +class name +{ +public: + name (const std::string& first, const std::string& last) + : first_ (first), last_ (last) + { + } + + const std::string& + first () const + { + return first_; + } + + const std::string& + last () const + { + return last_; + } + +private: + friend class odb::access; + + #pragma db type("VARCHAR(255) NOT NULL") column("first_name") + std::string first_; + + #pragma db type("VARCHAR(255) NOT NULL") column("last_name") + std::string last_; +}; + +#pragma db object table("Employer") +class employer +{ +public: + employer (const std::string& name) + : name_ (name) + { + } + + const std::string& + name () const + { + return name_; + } + +private: + friend class odb::access; + + employer () {} + + #pragma db id type("VARCHAR(255) NOT NULL") column("name") + std::string name_; +}; + +#pragma db object table("Employee") +class employee +{ +public: + typedef ::employer employer_type; + + employee (unsigned long id, + const std::string& first, + const std::string& last, + shared_ptr employer) + : id_ (id), name_ (first, last), employer_ (employer) + { + } + + // Name. + // + typedef ::name name_type; + + const name_type& + name () const + { + return name_; + } + + // Degrees. + // + typedef ::degrees degrees_type; + + const degrees_type& + degrees () const + { + return degrees_; + } + + degrees_type& + degrees () + { + return degrees_; + } + + // Employer. + // + shared_ptr + employer () const + { + return employer_; + } + + void + employer (shared_ptr employer) + { + employer_ = employer; + } + +private: + friend class odb::access; + + employee (): name_ ("", "") {} + + #pragma db id type("INTEGER UNSIGNED NOT NULL") column("ssn") + unsigned long id_; + + #pragma db column("") // No column prefix. + name_type name_; + + #pragma db unordered table("EmployeeDegree") id_column("ssn") \ + value_type("VARCHAR(255) NOT NULL") value_column("degree") + degrees_type degrees_; + + #pragma db not_null column("employer") + shared_ptr employer_; +}; + +#endif // EMPLOYEE_HXX -- cgit v1.1