From adfa9bbd04cd3571932ee7675344ca723bfa1eab Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Fri, 20 Jul 2012 14:26:23 +0200 Subject: Move indexes from model scope to table scope Conceptually, indexes belong to tables and some databases (MySQL, MSSQL) indeed treat them as such (i.e., you can have indexes with the same name in different tables). --- odb/semantics/relational/elements.hxx | 8 ++++---- odb/semantics/relational/foreign-key.hxx | 4 ++-- odb/semantics/relational/index.hxx | 19 +++---------------- odb/semantics/relational/key.hxx | 4 +++- odb/semantics/relational/primary-key.hxx | 7 +++---- 5 files changed, 15 insertions(+), 27 deletions(-) (limited to 'odb/semantics') diff --git a/odb/semantics/relational/elements.hxx b/odb/semantics/relational/elements.hxx index 6b4964e..8eb695a 100644 --- a/odb/semantics/relational/elements.hxx +++ b/odb/semantics/relational/elements.hxx @@ -174,10 +174,10 @@ namespace semantics public: // Id identifies the C++ node (e.g., a class or a data member) that // this model node corresponds to. The ids are not necessarily unique - // (e.g., there can be a table and an index with the same id that - // correspond to a container member). However, in any given scope, - // the {id,typeid} must be unique. This becomes important when we - // try to find correspondance between nodes during model diff'ing. + // (e.g., there can be a foreign key and an index with the same id that + // correspond to a container member). However, in any given scope, the + // {id,typeid} must be unique. This becomes important when we try to + // find correspondance between nodes during model diff'ing. // nameable (string const& id): id_ (id), named_ (0) {} diff --git a/odb/semantics/relational/foreign-key.hxx b/odb/semantics/relational/foreign-key.hxx index 83b7071..871c036 100644 --- a/odb/semantics/relational/foreign-key.hxx +++ b/odb/semantics/relational/foreign-key.hxx @@ -12,7 +12,7 @@ namespace semantics { namespace relational { - class foreign_key: public unameable, public key + class foreign_key: public key { public: enum action @@ -25,7 +25,7 @@ namespace semantics qname const& referenced_table, bool deferred, action on_delete = no_action) - : unameable (id), + : key (id), referenced_table_ (referenced_table), deferred_ (deferred), on_delete_ (on_delete) diff --git a/odb/semantics/relational/index.hxx b/odb/semantics/relational/index.hxx index dcb8e6e..af90b12 100644 --- a/odb/semantics/relational/index.hxx +++ b/odb/semantics/relational/index.hxx @@ -6,31 +6,18 @@ #define ODB_SEMANTICS_RELATIONAL_INDEX_HXX #include -#include #include -#include namespace semantics { namespace relational { - // Note that unlike other keys, indexes are defined in the model - // scope, not table scope. + // Note that in our model indexes are defined in the table scope. // - class index: public qnameable, public key + class index: public key { public: - relational::table& - table () const - { - return contains_begin ()->column ().table (); - } - - public: - index (string const& id) - : qnameable (id) - { - } + index (string const& id): key (id) {} virtual string kind () const diff --git a/odb/semantics/relational/key.hxx b/odb/semantics/relational/key.hxx index f5184be..40e7499 100644 --- a/odb/semantics/relational/key.hxx +++ b/odb/semantics/relational/key.hxx @@ -50,7 +50,7 @@ namespace semantics column_type* column_; }; - class key: public virtual node + class key: public unameable { typedef std::vector contains_list; @@ -78,6 +78,8 @@ namespace semantics } public: + key (std::string const& id): unameable (id) {} + void add_edge_left (contains& e) { diff --git a/odb/semantics/relational/primary-key.hxx b/odb/semantics/relational/primary-key.hxx index e35b00f..0aec038 100644 --- a/odb/semantics/relational/primary-key.hxx +++ b/odb/semantics/relational/primary-key.hxx @@ -12,7 +12,7 @@ namespace semantics { namespace relational { - class primary_key: public unameable, public key + class primary_key: public key { public: bool @@ -23,9 +23,8 @@ namespace semantics public: primary_key (bool auto_) - // Primary key has the implicit empty id. - // - : unameable (""), auto__ (auto_) + : key (""), // Primary key has the implicit empty id. + auto__ (auto_) { } -- cgit v1.1