summaryrefslogtreecommitdiff
path: root/odb/odb/semantics/relational/index.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'odb/odb/semantics/relational/index.hxx')
-rw-r--r--odb/odb/semantics/relational/index.hxx100
1 files changed, 100 insertions, 0 deletions
diff --git a/odb/odb/semantics/relational/index.hxx b/odb/odb/semantics/relational/index.hxx
new file mode 100644
index 0000000..68648cb
--- /dev/null
+++ b/odb/odb/semantics/relational/index.hxx
@@ -0,0 +1,100 @@
+// file : odb/semantics/relational/index.hxx
+// license : GNU GPL v3; see accompanying LICENSE file
+
+#ifndef ODB_SEMANTICS_RELATIONAL_INDEX_HXX
+#define ODB_SEMANTICS_RELATIONAL_INDEX_HXX
+
+#include <odb/semantics/relational/elements.hxx>
+#include <odb/semantics/relational/key.hxx>
+
+namespace semantics
+{
+ namespace relational
+ {
+ // Note that in our model indexes are defined in the table scope.
+ //
+ class index: public key
+ {
+ public:
+ string const&
+ type () const {return type_;}
+
+ string const&
+ method () const {return method_;}
+
+ string const&
+ options () const {return options_;}
+
+ public:
+ index (string const& id,
+ string const& t = string (),
+ string const& m = string (),
+ string const& o = string ())
+ : key (id), type_ (t), method_ (m), options_ (o) {}
+ index (index const&, uscope&, graph&);
+ index (xml::parser&, uscope&, graph&);
+
+ virtual index&
+ clone (uscope&, graph&) const;
+
+ virtual string
+ kind () const
+ {
+ return "index";
+ }
+
+ virtual void
+ serialize (xml::serializer&) const;
+
+ protected:
+ void
+ serialize_attributes (xml::serializer&) const;
+
+ private:
+ string type_; // E.g., "UNIQUE", etc.
+ string method_; // E.g., "BTREE", etc.
+ string options_; // Database-specific index options.
+ };
+
+ class add_index: public index
+ {
+ public:
+ add_index (string const& id,
+ string const& t = string (),
+ string const& m = string (),
+ string const& o = string ())
+ : index (id, t, m, o) {}
+ add_index (index const& i, uscope& s, graph& g): index (i, s, g) {}
+ add_index (xml::parser& p, uscope& s, graph& g): index (p, s, g) {}
+
+ virtual add_index&
+ clone (uscope&, graph&) const;
+
+ virtual string
+ kind () const {return "add index";}
+
+ virtual void
+ serialize (xml::serializer&) const;
+ };
+
+ class drop_index: public unameable
+ {
+ public:
+ drop_index (string const& id): unameable (id) {}
+ drop_index (drop_index const& di, uscope&, graph& g)
+ : unameable (di, g) {}
+ drop_index (xml::parser&, uscope&, graph&);
+
+ virtual drop_index&
+ clone (uscope&, graph&) const;
+
+ virtual string
+ kind () const {return "drop index";}
+
+ virtual void
+ serialize (xml::serializer&) const;
+ };
+ }
+}
+
+#endif // ODB_SEMANTICS_RELATIONAL_INDEX_HXX