diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2011-10-27 15:16:49 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2011-10-27 15:16:49 +0200 |
commit | 8d82c02a90cd7cc3f161828624db5b973585c34c (patch) | |
tree | 7b04f0b5e1b9e6eb3a2e76395df6a132be7a78d0 /odb/relational/pgsql/source.cxx | |
parent | 9d10c570acf1b7e8ed7c0a750ae3edfa70da200b (diff) |
Add support for persistent classes without object ids
New pragma id (object). New test: common/no-id.
Diffstat (limited to 'odb/relational/pgsql/source.cxx')
-rw-r--r-- | odb/relational/pgsql/source.cxx | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/odb/relational/pgsql/source.cxx b/odb/relational/pgsql/source.cxx index c45b40e..c17edc6 100644 --- a/odb/relational/pgsql/source.cxx +++ b/odb/relational/pgsql/source.cxx @@ -988,6 +988,7 @@ namespace relational if (abstract (c)) return; + semantics::data_member* id (id_member (c)); column_count_type const& cc (column_count (c)); string const& n (c.fq_name ()); @@ -998,20 +999,24 @@ namespace relational os << name_decl << endl << "persist_statement_name[] = " << strlit (fn + "_persist") << ";" - << endl - << name_decl << endl - << "find_statement_name[] = " << strlit (fn + "_find") << ";" << endl; - if (cc.total != cc.id + cc.inverse + cc.readonly) + if (id != 0) + { os << name_decl << endl - << "update_statement_name[] = " << strlit (fn + "_update") << - ";" + << "find_statement_name[] = " << strlit (fn + "_find") << ";" << endl; - os << name_decl << endl - << "erase_statement_name[] = " << strlit (fn + "_erase") << ";" - << endl; + if (cc.total != cc.id + cc.inverse + cc.readonly) + os << name_decl << endl + << "update_statement_name[] = " << strlit (fn + "_update") << + ";" + << endl; + + os << name_decl << endl + << "erase_statement_name[] = " << strlit (fn + "_erase") << ";" + << endl; + } // Query statement name. // @@ -1029,7 +1034,6 @@ namespace relational // Statement types. // string oid_decl ("const unsigned int " + traits); - semantics::data_member* id_m (id_member (c)); // persist_statement_types. // @@ -1046,20 +1050,21 @@ namespace relational // find_statement_types. // + if (id != 0) { os << oid_decl << endl << "find_statement_types[] =" << "{"; instance<statement_oids> st (statement_select); - st->traverse_column (*id_m, "", true); + st->traverse_column (*id, "", true); os << "};"; } // update_statement_types. // - if (cc.total != cc.id + cc.inverse + cc.readonly) + if (id != 0 && cc.total != cc.id + cc.inverse + cc.readonly) { os << oid_decl << endl << "update_statement_types[] =" @@ -1072,7 +1077,7 @@ namespace relational { instance<statement_oids> st (statement_where); - st->traverse_column (*id_m, "", false); + st->traverse_column (*id, "", false); } os << "};"; @@ -1080,13 +1085,14 @@ namespace relational // erase_statement_types. // + if (id != 0) { os << oid_decl << endl << "erase_statement_types[] =" << "{"; instance<statement_oids> st (statement_where); - st->traverse_column (*id_m, "", true); + st->traverse_column (*id, "", true); os << "};"; } |