diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2011-01-19 12:04:47 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2011-01-19 12:04:47 +0200 |
commit | 17d96bd351d0db6760706f2620b25353f1883ddd (patch) | |
tree | 00bea13508ca4f8e9add78510f36da217fabe894 /schema/employee.hxx | |
parent | a15bb990af3ed0b93483703221a89235d95db96a (diff) |
Add schema example
It shows how to map persistent classes to a custom database schema.
Diffstat (limited to 'schema/employee.hxx')
-rw-r--r-- | schema/employee.hxx | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/schema/employee.hxx b/schema/employee.hxx new file mode 100644 index 0000000..25f8d8f --- /dev/null +++ b/schema/employee.hxx @@ -0,0 +1,150 @@ +// file : schema/employee.hxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// copyright : not copyrighted - public domain + +#ifndef EMPLOYEE_HXX +#define EMPLOYEE_HXX + +#include <vector> +#include <string> + +#include <odb/core.hxx> + +// Include TR1 <memory> header in a compiler-specific fashion. Fall back +// on the Boost implementation if the compiler does not support TR1. +// +#include <odb/tr1/memory.hxx> + +using std::tr1::shared_ptr; + +typedef std::vector<std::string> 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_type> 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_type> + employer () const + { + return employer_; + } + + void + employer (shared_ptr<employer_type> 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_type> employer_; +}; + +#endif // EMPLOYEE_HXX |