aboutsummaryrefslogtreecommitdiff
path: root/odb/relational/oracle
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/relational/oracle
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/relational/oracle')
-rw-r--r--odb/relational/oracle/schema.cxx20
1 files changed, 20 insertions, 0 deletions
diff --git a/odb/relational/oracle/schema.cxx b/odb/relational/oracle/schema.cxx
index ce2c470..29c1130 100644
--- a/odb/relational/oracle/schema.cxx
+++ b/odb/relational/oracle/schema.cxx
@@ -302,6 +302,26 @@ namespace relational
trav_rel::unames n (fk);
names (t, n);
}
+
+ struct create_index: relational::create_index, context
+ {
+ create_index (base const& x): base (x) {}
+
+ virtual string
+ name (sema_rel::index& in)
+ {
+ // In Oracle, index names are database-global. Make them unique
+ // by prefixing the index name with table name (preserving the
+ // schema).
+ //
+ sema_rel::qname n (
+ static_cast<sema_rel::table&> (in.scope ()).name ());
+
+ n.uname () += "_" + in.name ();
+ return quote_id (n);
+ }
+ };
+ entry<create_index> create_index_;
}
}
}