summaryrefslogtreecommitdiff
path: root/odb/relational/validator.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2013-09-17 11:11:43 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2013-09-17 11:11:43 +0200
commit791b94b894f93bc037637907616efc844f3d9414 (patch)
tree27b8d92cbe5f7918109842d36484fb4b639a020c /odb/relational/validator.cxx
parent565ad74e164abdaaa31de146a1ef76f3d3f6734d (diff)
Add support for defining composite values inside persistent classes, etc
Diffstat (limited to 'odb/relational/validator.cxx')
-rw-r--r--odb/relational/validator.cxx35
1 files changed, 27 insertions, 8 deletions
diff --git a/odb/relational/validator.cxx b/odb/relational/validator.cxx
index 2a8e04e..c620a58 100644
--- a/odb/relational/validator.cxx
+++ b/odb/relational/validator.cxx
@@ -237,27 +237,43 @@ namespace relational
{
class2 (bool& valid)
: valid_ (valid),
+ typedefs_ (true),
data_member_ (valid),
object_no_id_members_ (valid),
composite_id_members_ (valid),
view_members_ (valid)
{
- *this >> data_member_names_ >> data_member_;
+ *this >> defines_ >> *this;
+ *this >> typedefs_ >> *this;
+
+ data_member_names_ >> data_member_;
}
virtual void
traverse (type& c)
{
- if (object (c))
+ class_kind_type ck (class_kind (c));
+ switch (ck)
+ {
+ case class_object:
+ names (c);
traverse_object (c);
- else if (view (c))
+ break;
+ case class_view:
+ names (c);
traverse_view (c);
- else if (composite (c))
+ break;
+ case class_composite:
+ names (c);
traverse_composite (c);
+ break;
+ case class_other:
+ break;
+ }
// Make sure indexes are not defined for anything other than objects.
//
- if (c.count ("index") && !object (c))
+ if (c.count ("index") && ck != class_object)
{
indexes& ins (c.get<indexes> ("index"));
@@ -331,7 +347,7 @@ namespace relational
}
}
- names (c);
+ names (c, data_member_names_);
// Validate indexes.
//
@@ -373,18 +389,21 @@ namespace relational
//
view_members_.traverse (c);
- names (c);
+ names (c, data_member_names_);
}
virtual void
traverse_composite (type& c)
{
- names (c);
+ names (c, data_member_names_);
}
public:
bool& valid_;
+ traversal::defines defines_;
+ typedefs typedefs_;
+
data_member2 data_member_;
traversal::names data_member_names_;