1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
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
|