diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2012-07-25 12:13:38 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2012-07-27 10:30:15 +0200 |
commit | 923639283d2bae0b82cb605fa4680a3058c9d973 (patch) | |
tree | 3c122b70129cdd2b502e1f7056eac896c109f03a /odb/relational/context.hxx | |
parent | adfa9bbd04cd3571932ee7675344ca723bfa1eab (diff) |
Add support for defining indexes
New db pragma qualifier: index. New tests: common/index, mysql/index,
pgsql/index.
Diffstat (limited to 'odb/relational/context.hxx')
-rw-r--r-- | odb/relational/context.hxx | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/odb/relational/context.hxx b/odb/relational/context.hxx index ca55650..990e0aa 100644 --- a/odb/relational/context.hxx +++ b/odb/relational/context.hxx @@ -23,6 +23,41 @@ namespace relational statement_where // WHERE clause. }; + // Index. + // + struct index + { + location_t loc; // Location of this index definition. + std::string name; // If empty, then derive from the member name. + std::string type; // E.g., "UNIQUE", etc. + std::string method; // E.g., "BTREE", etc. + std::string options; // Database-specific index options. + + struct member + { + location_t loc; // Location of this member specifier. + std::string name; // Member name, e.g., foo_, foo_.bar_. + data_member_path path; // Member path. + std::string options; // Member options, e.g., "ASC", etc. + }; + typedef std::vector<member> members_type; + + members_type members; + }; + + typedef std::vector<index> indexes; + + // Indexes in the above vector are in location order. + // + struct index_comparator + { + bool + operator() (index const& x, index const& y) const + { + return x.loc < y.loc; + } + }; + // Custom database type mapping. // struct custom_db_type |