aboutsummaryrefslogtreecommitdiff
path: root/odb/context.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2011-07-24 14:56:11 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2011-07-24 14:56:11 +0200
commit319def6da0c6d17c29f66c0ea5837a58988a67d7 (patch)
tree43724ae423ec85682ba77d5e4af347f8e7ed7729 /odb/context.cxx
parentac83439900ab5ed4febe68375d3936ae2a59d707 (diff)
Add support for resetting options accumulated with options pragma
Diffstat (limited to 'odb/context.cxx')
-rw-r--r--odb/context.cxx99
1 files changed, 85 insertions, 14 deletions
diff --git a/odb/context.cxx b/odb/context.cxx
index 39a01f7..3b684ea 100644
--- a/odb/context.cxx
+++ b/odb/context.cxx
@@ -325,10 +325,45 @@ column_options (semantics::data_member& m)
//
semantics::type& t (m.type ());
- string mo (m.get<string> ("options", string ()));
- string to (t.get<string> ("options", string ()));
+ string r;
+
+ if (t.count ("options"))
+ {
+ strings const& o (t.get<strings> ("options"));
+
+ for (strings::const_iterator i (o.begin ()); i != o.end (); ++i)
+ {
+ if (i->empty ())
+ r.clear ();
+ else
+ {
+ if (!r.empty ())
+ r += ' ';
+
+ r += *i;
+ }
+ }
+ }
- return to + (mo.empty () || to.empty () ? "" : " ") + mo;
+ if (m.count ("options"))
+ {
+ strings const& o (m.get<strings> ("options"));
+
+ for (strings::const_iterator i (o.begin ()); i != o.end (); ++i)
+ {
+ if (i->empty ())
+ r.clear ();
+ else
+ {
+ if (!r.empty ())
+ r += ' ';
+
+ r += *i;
+ }
+ }
+ }
+
+ return r;
}
string context::
@@ -344,24 +379,60 @@ column_options (semantics::data_member& m, string const& kp)
semantics::type& c (m.type ());
semantics::type& t (member_type (m, kp));
- string r (t.get<string> ("options", string ()));
+ string r;
- string o (c.get<string> (k, string ()));
- if (!o.empty ())
+ if (t.count ("options"))
{
- if (!r.empty ())
- r += ' ';
+ strings const& o (t.get<strings> ("options"));
- r += o;
+ for (strings::const_iterator i (o.begin ()); i != o.end (); ++i)
+ {
+ if (i->empty ())
+ r.clear ();
+ else
+ {
+ if (!r.empty ())
+ r += ' ';
+
+ r += *i;
+ }
+ }
+ }
+
+ if (c.count (k))
+ {
+ strings const& o (c.get<strings> (k));
+
+ for (strings::const_iterator i (o.begin ()); i != o.end (); ++i)
+ {
+ if (i->empty ())
+ r.clear ();
+ else
+ {
+ if (!r.empty ())
+ r += ' ';
+
+ r += *i;
+ }
+ }
}
- o = m.get<string> (k, string ());
- if (!o.empty ())
+ if (m.count (k))
{
- if (!r.empty ())
- r += ' ';
+ strings const& o (m.get<strings> (k));
- r += o;
+ for (strings::const_iterator i (o.begin ()); i != o.end (); ++i)
+ {
+ if (i->empty ())
+ r.clear ();
+ else
+ {
+ if (!r.empty ())
+ r += ' ';
+
+ r += *i;
+ }
+ }
}
return r;