diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2012-02-17 10:08:18 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2012-02-22 12:29:43 +0200 |
commit | 3a1eed21d4d5d0e7f6a9f400420fdc28d7be9b61 (patch) | |
tree | 97ba7338fb804c264c9eaaaa41085b08f6483c68 /odb/relational/header.hxx | |
parent | 3f73cc933b64d7d9a88325d33a3c33a0e28720c6 (diff) |
Add support for composite object ids
New pragma id_type (member). New test: common/composite-id. The composite
example has also been updated.
Diffstat (limited to 'odb/relational/header.hxx')
-rw-r--r-- | odb/relational/header.hxx | 41 |
1 files changed, 26 insertions, 15 deletions
diff --git a/odb/relational/header.hxx b/odb/relational/header.hxx index cf103b5..dda9e2a 100644 --- a/odb/relational/header.hxx +++ b/odb/relational/header.hxx @@ -441,8 +441,11 @@ namespace relational // size_t n; - if (class_* kc = composite_wrapper (*kt)) - n = column_count (*kc).total; + class_* ptr (object_pointer (*kt)); + semantics::type& t (ptr == 0 ? *kt : utype (*id_member (*ptr))); + + if (class_* comp = composite_wrapper (t)) + n = column_count (*comp).total; else n = 1; @@ -461,19 +464,27 @@ namespace relational // // Value is also a key. // - //if (class_* vc = composite_wrapper (vt)) - // cond_columns += column_count (*vc).total; - //else - // cond_columns++; - + // class_* ptr (object_pointer (vt)); + // semantics::type& t (ptr == 0 ? vt : utype (*id_member (*ptr))); + // + // if (class_* comp = composite_wrapper (t)) + // cond_columns += column_count (*comp).total; + // else + // cond_columns++; + // break; } } - if (class_* vc = composite_wrapper (vt)) - data_columns += column_count (*vc).total; - else - data_columns++; + { + class_* ptr (object_pointer (vt)); + semantics::type& t (ptr == 0 ? vt : utype (*id_member (*ptr))); + + if (class_* comp = composite_wrapper (t)) + data_columns += column_count (*comp).total; + else + data_columns++; + } // Store column counts for the source generator. // @@ -786,7 +797,7 @@ namespace relational } } - os << "const data_image_type&, database&);" + os << "const data_image_type&, database*);" << endl; // insert_one @@ -1138,7 +1149,7 @@ namespace relational // init (object, image) // os << "static void" << endl - << "init (object_type&, const image_type&, database&);" + << "init (object_type&, const image_type&, database*);" << endl; // init (id_image, id) @@ -1503,7 +1514,7 @@ namespace relational // init (view, image) // os << "static void" << endl - << "init (view_type&, const image_type&, database&);" + << "init (view_type&, const image_type&, database*);" << endl; // column_count @@ -1605,7 +1616,7 @@ namespace relational // init (value, image) // os << "static void" << endl - << "init (value_type&, const image_type&, database&);" + << "init (value_type&, const image_type&, database*);" << endl; os << "};"; |