From 73edd8b28ac415b6fdb7d8c7f8728dc7f8de75d0 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Mon, 29 Nov 2010 09:27:29 +0200 Subject: Make container pragmas also work on types in addition to members --- odb/context.cxx | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) (limited to 'odb/context.cxx') diff --git a/odb/context.cxx b/odb/context.cxx index 5585ab1..5c16e68 100644 --- a/odb/context.cxx +++ b/odb/context.cxx @@ -120,6 +120,30 @@ context:: { } +bool context:: +comp_value_ (semantics::class_& c) +{ + bool r (true); + + //@@ This is bad. Did I add new value pragmas and forgot to + // account for them here? + // + r = r && c.count ("value"); + r = r && !c.count ("table"); + r = r && !c.count ("type"); + r = r && !c.count ("value-type"); + r = r && !c.count ("index-type"); + r = r && !c.count ("key-type"); + r = r && !c.count ("value-column"); + r = r && !c.count ("index-column"); + r = r && !c.count ("key-column"); + r = r && !c.count ("id-column"); + r = r && !c.count ("unordered"); + + c.set ("composite-value", r); + return r; +} + string context:: table_name (semantics::class_& t) const { @@ -147,14 +171,24 @@ table_name (semantics::data_member& m, table_prefix const& p) const string context:: column_name (semantics::data_member& m) const { - return m.count ("column") ? m.get ("column") : public_name_db (m); + if (m.count ("column")) + return m.get ("column"); + else if (m.type ().count ("column")) + return m.type ().get ("column"); + else + return public_name_db (m); } string context:: column_name (semantics::data_member& m, string const& p, string const& d) const { string key (p + "-column"); - return m.count (key) ? m.get (key) : d; + if (m.count (key)) + return m.get (key); + else if (m.type ().count (key)) + return m.type ().get (key); + else + return d; } string context:: -- cgit v1.1