From e7892161b62d0f7f2ccf984d163a91025a3ddf78 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Wed, 24 Nov 2010 16:37:09 +0200 Subject: Implement support for many-to-{one,many} inverse relationships --- odb/mysql/header.cxx | 77 ++++++++++++++++++++++++++++------------------------ 1 file changed, 42 insertions(+), 35 deletions(-) (limited to 'odb/mysql/header.cxx') diff --git a/odb/mysql/header.cxx b/odb/mysql/header.cxx index 119219a..89b1fe8 100644 --- a/odb/mysql/header.cxx +++ b/odb/mysql/header.cxx @@ -245,6 +245,7 @@ namespace mysql type* kt (0); bool ordered (false); + bool inverse (context::inverse (m, "value")); switch (ck) { @@ -520,33 +521,36 @@ namespace mysql // init (data_image) // - os << "static void" << endl; - - switch (ck) + if (!inverse) { - case ck_ordered: + os << "static void" << endl; + + switch (ck) { - if (ordered) - os << "init (data_image_type&, index_type, const value_type&);"; - else + case ck_ordered: + { + if (ordered) + os << "init (data_image_type&, index_type, const value_type&);"; + else + os << "init (data_image_type&, const value_type&);"; + break; + } + case ck_map: + case ck_multimap: + { + os << "init (data_image_type&, const key_type&, const value_type&);"; + break; + } + case ck_set: + case ck_multiset: + { os << "init (data_image_type&, const value_type&);"; - break; - } - case ck_map: - case ck_multimap: - { - os << "init (data_image_type&, const key_type&, const value_type&);"; - break; - } - case ck_set: - case ck_multiset: - { - os << "init (data_image_type&, const value_type&);"; - break; + break; + } } - } - os << endl; + os << endl; + } // init (data) // @@ -641,11 +645,12 @@ namespace mysql // persist // - os << "static void" << endl - << "persist (const container_type&," << endl - << "id_image_type&," << endl - << "statements_type&);" - << endl; + if (!inverse) + os << "static void" << endl + << "persist (const container_type&," << endl + << "id_image_type&," << endl + << "statements_type&);" + << endl; // load // @@ -657,17 +662,19 @@ namespace mysql // update // - os << "static void" << endl - << "update (const container_type&," << endl - << "id_image_type&," << endl - << "statements_type&);" - << endl; + if (!inverse) + os << "static void" << endl + << "update (const container_type&," << endl + << "id_image_type&," << endl + << "statements_type&);" + << endl; // erase // - os << "static void" << endl - << "erase (id_image_type&, statements_type&);" - << endl; + if (!inverse) + os << "static void" << endl + << "erase (id_image_type&, statements_type&);" + << endl; os << "};"; } -- cgit v1.1