aboutsummaryrefslogtreecommitdiff
path: root/schema/employee.hxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2011-01-19 12:04:47 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2011-01-19 12:04:47 +0200
commit17d96bd351d0db6760706f2620b25353f1883ddd (patch)
tree00bea13508ca4f8e9add78510f36da217fabe894 /schema/employee.hxx
parenta15bb990af3ed0b93483703221a89235d95db96a (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.hxx150
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