aboutsummaryrefslogtreecommitdiff
path: root/odb/processor.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2013-09-02 08:33:25 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2013-09-02 08:33:25 +0200
commit3e23b0478aa8f426e0443d2c4c0189b4da0e6198 (patch)
treef3d3c7ba0e2cb26e7d060795c368f38eeb118f97 /odb/processor.cxx
parentf3f682c074117fda84bf51a4ce9a378d950a04de (diff)
Support for versioning simple value in object
Diffstat (limited to 'odb/processor.cxx')
-rw-r--r--odb/processor.cxx51
1 files changed, 49 insertions, 2 deletions
diff --git a/odb/processor.cxx b/odb/processor.cxx
index bc6c408..8c4efaf 100644
--- a/odb/processor.cxx
+++ b/odb/processor.cxx
@@ -1656,6 +1656,13 @@ namespace
t.set ("key-tree-hint", kh);
t.set ("key-not-null", true);
}
+
+ // Check if we are versioned.
+ //
+ // @@ TODO
+ //
+ if (force_versioned)
+ t.set ("versioned", true);
}
// Process member data.
@@ -1896,12 +1903,16 @@ namespace
if (k == class_object)
traverse_object_pre (c);
else if (k == class_view)
- traverse_view (c);
+ traverse_view_pre (c);
names (c);
if (k == class_object)
traverse_object_post (c);
+ else if (k == class_view)
+ traverse_view_post (c);
+ else if (k == class_composite)
+ traverse_composite_post (c);
}
//
@@ -2085,8 +2096,19 @@ namespace
traverse_object_post (type& c)
{
semantics::class_* poly_root (polymorphic (c));
+ bool poly_derived (poly_root != 0 && poly_root != &c);
+
semantics::data_member* opt (optimistic (c));
+ // Figure out if we are versioned. We are versioned if we have
+ // soft-added/deleted columns ourselves or our poly-base is
+ // versioned.
+ //
+ if (force_versioned ||
+ column_count (c).soft != 0 ||
+ (poly_derived && polymorphic_base (c).count ("versioned")))
+ c.set ("versioned", true);
+
// Sections.
//
user_sections& uss (c.get<user_sections> ("user-sections"));
@@ -2149,7 +2171,7 @@ namespace
//
virtual void
- traverse_view (type& c)
+ traverse_view_pre (type& c)
{
// Resolve referenced objects from tree nodes to semantic graph
// nodes. Also populate maps and compute counts.
@@ -2258,6 +2280,31 @@ namespace
}
}
+ virtual void
+ traverse_view_post (type& c)
+ {
+ // Figure out if we are versioned. When versioning is forced, ignore
+ // it for native views.
+ //
+ if ((force_versioned &&
+ c.get<view_query> ("query").kind == view_query::condition) ||
+ column_count (c).soft != 0)
+ c.set ("versioned", true);
+ }
+
+ //
+ // Composite.
+ //
+
+ virtual void
+ traverse_composite_post (type& c)
+ {
+ // Figure out if we are versioned.
+ //
+ if (force_versioned || column_count (c).soft != 0)
+ c.set ("versioned", true);
+ }
+
//
// Assign object/view pointer.
//