aboutsummaryrefslogtreecommitdiff
path: root/odb/common.hxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2011-03-10 08:44:28 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2011-03-21 15:39:59 +0200
commit7ae497743c7b042904fe1f6b4153ab3f4763ff2b (patch)
tree08ba3f742f20d16d893856ccceb070094bd69225 /odb/common.hxx
parent2436f20262a41bd1cafa5107ab6d6799c03e0964 (diff)
Split MySQL code generator into common and db-specific parts
The common part (in relational/) still has some MySQL-specific parts. Also, add the notion of the current context which is used to avoid explicitly passing the context object to every generator's c-tor.
Diffstat (limited to 'odb/common.hxx')
-rw-r--r--odb/common.hxx65
1 files changed, 42 insertions, 23 deletions
diff --git a/odb/common.hxx b/odb/common.hxx
index 9479b77..99741b2 100644
--- a/odb/common.hxx
+++ b/odb/common.hxx
@@ -13,7 +13,7 @@
// Traverse object members recursively by going into composite members.
//
-struct object_members_base: traversal::class_
+struct object_members_base: traversal::class_, virtual context
{
virtual void
simple (semantics::data_member&);
@@ -31,25 +31,21 @@ struct object_members_base: traversal::class_
public:
object_members_base ()
- : ctx_ (0),
- build_prefix_ (false),
- build_table_prefix_ (false),
- member_ (*this)
+ : member_ (*this)
{
- *this >> names_ >> member_;
- *this >> inherits_ >> *this;
+ init (false, false);
}
- object_members_base (context& c,
- bool build_prefix,
- bool build_table_prefix)
- : ctx_ (&c),
- build_prefix_ (build_prefix),
- build_table_prefix_ (build_table_prefix),
- member_ (*this)
+ object_members_base (bool build_prefix, bool build_table_prefix)
+ : member_ (*this)
{
- *this >> names_ >> member_;
- *this >> inherits_ >> *this;
+ init (build_prefix, build_table_prefix);
+ }
+
+ object_members_base (object_members_base const& x)
+ : context (), member_ (*this)
+ {
+ init (x.build_prefix_, x.build_table_prefix_);
}
virtual void
@@ -63,6 +59,17 @@ protected:
context::table_prefix table_prefix_;
private:
+ void
+ init (bool build_prefix, bool build_table_prefix)
+ {
+ build_prefix_ = build_prefix;
+ build_table_prefix_ = build_table_prefix;
+
+ *this >> names_ >> member_;
+ *this >> inherits_ >> *this;
+ }
+
+private:
struct member: traversal::data_member
{
member (object_members_base& om)
@@ -77,7 +84,6 @@ private:
object_members_base& om_;
};
- context* ctx_;
bool build_prefix_;
bool build_table_prefix_;
@@ -104,11 +110,16 @@ struct object_columns_base: traversal::class_
composite (semantics::data_member&, semantics::class_&);
public:
- object_columns_base (context& c)
- : member_ (c, *this)
+ object_columns_base ()
+ : member_ (*this)
{
- *this >> names_ >> member_;
- *this >> inherits_ >> *this;
+ init ();
+ }
+
+ object_columns_base (object_columns_base const&)
+ : member_ (*this)
+ {
+ init ();
}
virtual void
@@ -121,10 +132,18 @@ public:
std::string const& default_name);
private:
+ void
+ init ()
+ {
+ *this >> names_ >> member_;
+ *this >> inherits_ >> *this;
+ }
+
+private:
struct member: traversal::data_member, context
{
- member (context& c, object_columns_base& oc)
- : context (c), oc_ (oc), first_ (true)
+ member (object_columns_base& oc)
+ : oc_ (oc), first_ (true)
{
}