diff options
Diffstat (limited to 'odb/semantics/relational/index.cxx')
-rw-r--r-- | odb/semantics/relational/index.cxx | 75 |
1 files changed, 72 insertions, 3 deletions
diff --git a/odb/semantics/relational/index.cxx b/odb/semantics/relational/index.cxx index 5ff1a26..b38c6e4 100644 --- a/odb/semantics/relational/index.cxx +++ b/odb/semantics/relational/index.cxx @@ -10,6 +10,8 @@ namespace semantics { namespace relational { + // index + // index:: index (index const& i, uscope& s, graph& g) : key (i, s, g), @@ -35,9 +37,8 @@ namespace semantics } void index:: - serialize (xml::serializer& s) const + serialize_attributes (xml::serializer& s) const { - s.start_element (xmlns, "index"); key::serialize_attributes (s); if (!type ().empty ()) @@ -48,11 +49,57 @@ namespace semantics if (!options ().empty ()) s.attribute ("options", options ()); + } + void index:: + serialize (xml::serializer& s) const + { + s.start_element (xmlns, "index"); + serialize_attributes (s); key::serialize_content (s); s.end_element (); } + // add_index + // + add_index& add_index:: + clone (uscope& s, graph& g) const + { + return g.new_node<add_index> (*this, s, g); + } + + void add_index:: + serialize (xml::serializer& s) const + { + s.start_element (xmlns, "add-index"); + index::serialize_attributes (s); + index::serialize_content (s); + s.end_element (); + } + + // drop_index + // + drop_index:: + drop_index (xml::parser& p, uscope&, graph& g) + : unameable (p, g) + { + p.content (xml::parser::empty); + } + + drop_index& drop_index:: + clone (uscope& s, graph& g) const + { + return g.new_node<drop_index> (*this, s, g); + } + + void drop_index:: + serialize (xml::serializer& s) const + { + s.start_element (xmlns, "drop-index"); + unameable::serialize_attributes (s); + s.end_element (); + } + // type info // namespace @@ -61,15 +108,37 @@ namespace semantics { init () { - unameable::parser_map_["index"] = &unameable::parser_impl<index>; + unameable::parser_map& m (unameable::parser_map_); + + m["index"] = &unameable::parser_impl<index>; + m["add-index"] = &unameable::parser_impl<add_index>; + m["drop-index"] = &unameable::parser_impl<drop_index>; using compiler::type_info; + // index + // { type_info ti (typeid (index)); ti.add_base (typeid (key)); insert (ti); } + + // add_index + // + { + type_info ti (typeid (add_index)); + ti.add_base (typeid (index)); + insert (ti); + } + + // drop_index + // + { + type_info ti (typeid (drop_index)); + ti.add_base (typeid (unameable)); + insert (ti); + } } } init_; } |