summaryrefslogtreecommitdiff
path: root/odb/semantics
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2012-07-20 14:26:23 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2012-07-27 10:30:15 +0200
commitadfa9bbd04cd3571932ee7675344ca723bfa1eab (patch)
treec47487e8253d71ce0f2dd2e360f872e1e59a6cef /odb/semantics
parent526f66e63f23afb40cc01550ca1a3a3592a84254 (diff)
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).
Diffstat (limited to 'odb/semantics')
-rw-r--r--odb/semantics/relational/elements.hxx8
-rw-r--r--odb/semantics/relational/foreign-key.hxx4
-rw-r--r--odb/semantics/relational/index.hxx19
-rw-r--r--odb/semantics/relational/key.hxx4
-rw-r--r--odb/semantics/relational/primary-key.hxx7
5 files changed, 15 insertions, 27 deletions
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 <odb/semantics/relational/elements.hxx>
-#include <odb/semantics/relational/column.hxx>
#include <odb/semantics/relational/key.hxx>
-#include <odb/semantics/relational/table.hxx>
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*> 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_)
{
}