summaryrefslogtreecommitdiff
path: root/odb/context.hxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2010-11-22 14:18:40 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2010-11-22 14:18:40 +0200
commit759c865ebbdf8401e58ef5df705f9d1ad3d83cc9 (patch)
tree142b8b4f0ef70774632ae6e9254b9514ccbc8d29 /odb/context.hxx
parent4a50c5a7e9976587569276c768f85ad481694e70 (diff)
Implement support for one-to-{one,many} inverse relationships
New pragma: inverse.
Diffstat (limited to 'odb/context.hxx')
-rw-r--r--odb/context.hxx18
1 files changed, 17 insertions, 1 deletions
diff --git a/odb/context.hxx b/odb/context.hxx
index 4d6dd10..8878e54 100644
--- a/odb/context.hxx
+++ b/odb/context.hxx
@@ -75,7 +75,8 @@ public:
}
static semantics::class_*
- object_pointer (semantics::data_member& m, string const& key_prefix)
+ object_pointer (semantics::data_member& m,
+ string const& key_prefix = string ())
{
using semantics::class_;
@@ -84,6 +85,18 @@ public:
: m.get<class_*> (key_prefix + "-object-pointer", 0);
}
+ static semantics::data_member*
+ inverse (semantics::data_member& m, string const& key_prefix = string ())
+ {
+ using semantics::data_member;
+
+ return object_pointer (m, key_prefix)
+ ? (key_prefix.empty ()
+ ? m.get<data_member*> ("inverse", 0)
+ : m.get<data_member*> (key_prefix + "-inverse", 0))
+ : 0;
+ }
+
// Database names and types.
//
public:
@@ -94,6 +107,9 @@ public:
//
struct table_prefix
{
+ table_prefix () {}
+ table_prefix (string const& p, size_t l): prefix (p), level (l) {}
+
string prefix;
size_t level;
};