diff options
Diffstat (limited to 'odb/semantics/relational/foreign-key.cxx')
-rw-r--r-- | odb/semantics/relational/foreign-key.cxx | 81 |
1 files changed, 76 insertions, 5 deletions
diff --git a/odb/semantics/relational/foreign-key.cxx b/odb/semantics/relational/foreign-key.cxx index 7ef88a6..0407858 100644 --- a/odb/semantics/relational/foreign-key.cxx +++ b/odb/semantics/relational/foreign-key.cxx @@ -89,11 +89,9 @@ namespace semantics return g.new_node<foreign_key> (*this, s, g); } - void foreign_key:: - serialize (xml::serializer& s) const + serialize_attributes (xml::serializer& s) const { - s.start_element (xmlns, "foreign-key"); key::serialize_attributes (s); if (deferred ()) @@ -101,7 +99,11 @@ namespace semantics if (on_delete () != no_action) s.attribute ("on-delete", on_delete ()); + } + void foreign_key:: + serialize_content (xml::serializer& s) const + { key::serialize_content (s); // Referenced columns. @@ -118,9 +120,57 @@ namespace semantics } s.end_element (); // references + } + + void foreign_key:: + serialize (xml::serializer& s) const + { + s.start_element (xmlns, "foreign-key"); + serialize_attributes (s); + serialize_content (s); s.end_element (); // foreign-key } + // add_foreign_key + // + add_foreign_key& add_foreign_key:: + clone (uscope& s, graph& g) const + { + return g.new_node<add_foreign_key> (*this, s, g); + } + + void add_foreign_key:: + serialize (xml::serializer& s) const + { + s.start_element (xmlns, "add-foreign-key"); + foreign_key::serialize_attributes (s); + foreign_key::serialize_content (s); + s.end_element (); + } + + // drop_foreign_key + // + drop_foreign_key:: + drop_foreign_key (xml::parser& p, uscope&, graph& g) + : unameable (p, g) + { + p.content (xml::parser::empty); + } + + drop_foreign_key& drop_foreign_key:: + clone (uscope& s, graph& g) const + { + return g.new_node<drop_foreign_key> (*this, s, g); + } + + void drop_foreign_key:: + serialize (xml::serializer& s) const + { + s.start_element (xmlns, "drop-foreign-key"); + unameable::serialize_attributes (s); + s.end_element (); + } + // type info // namespace @@ -129,16 +179,37 @@ namespace semantics { init () { - unameable::parser_map_["foreign-key"] = - &unameable::parser_impl<foreign_key>; + unameable::parser_map& m (unameable::parser_map_); + + m["foreign-key"] = &unameable::parser_impl<foreign_key>; + m["add-foreign-key"] = &unameable::parser_impl<add_foreign_key>; + m["drop-foreign-key"] = &unameable::parser_impl<drop_foreign_key>; using compiler::type_info; + // foreign_key + // { type_info ti (typeid (foreign_key)); ti.add_base (typeid (key)); insert (ti); } + + // add_foreign_key + // + { + type_info ti (typeid (add_foreign_key)); + ti.add_base (typeid (foreign_key)); + insert (ti); + } + + // drop_foreign_key + // + { + type_info ti (typeid (drop_foreign_key)); + ti.add_base (typeid (unameable)); + insert (ti); + } } } init_; } |