summaryrefslogtreecommitdiff
path: root/odb/semantics/relational/index.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'odb/semantics/relational/index.cxx')
-rw-r--r--odb/semantics/relational/index.cxx75
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_;
}