diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2013-04-26 17:18:12 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2013-04-26 17:18:12 +0200 |
commit | 6692558ba588c76f5e61eb7ed9a1040d36cb9ed7 (patch) | |
tree | 6f7a29e911713829583bc573e938591383f8486c /odb/relational/oracle | |
parent | 84cb9f184bc24ef7151ab9931b46311b03219b14 (diff) |
Add support for extra database info in primary key
Use that to handle Oracle sequence name and SQLite lax auto ids.
Diffstat (limited to 'odb/relational/oracle')
-rw-r--r-- | odb/relational/oracle/model.cxx | 7 | ||||
-rw-r--r-- | odb/relational/oracle/schema.cxx | 14 |
2 files changed, 14 insertions, 7 deletions
diff --git a/odb/relational/oracle/model.cxx b/odb/relational/oracle/model.cxx index 8032b3b..91f1285 100644 --- a/odb/relational/oracle/model.cxx +++ b/odb/relational/oracle/model.cxx @@ -51,6 +51,13 @@ namespace relational return ostr.str (); } + + virtual void + primary_key (sema_rel::primary_key& pk) + { + if (pk.auto_ ()) + pk.extra ()["sequence"] = sequence_name (table_.name ()).string (); + } }; entry<object_columns> object_columns_; } diff --git a/odb/relational/oracle/schema.cxx b/odb/relational/oracle/schema.cxx index 03da322..5856dd2 100644 --- a/odb/relational/oracle/schema.cxx +++ b/odb/relational/oracle/schema.cxx @@ -149,16 +149,14 @@ namespace relational using sema_rel::primary_key; - qname const& table (t.name ()); - sema_rel::table::names_iterator i (t.find ("")); // Special name. primary_key* pk (i != t.names_end () ? &dynamic_cast<primary_key&> (i->nameable ()) : 0); - string qt (quote_id (table)); + string qt (quote_id (t.name ())); string qs (pk != 0 && pk->auto_ () - ? quote_id (sequence_name (table)) + ? quote_id (qname::from_string (pk->extra ()["sequence"])) : ""); if (migration) @@ -249,7 +247,7 @@ namespace relational primary_key (); if (pk != 0 && pk->auto_ ()) - auto_ (c); + auto_ (*pk); } }; entry<create_column> create_column_; @@ -307,9 +305,11 @@ namespace relational if (pk != 0 && pk->auto_ ()) { + string qs ( + quote_id (qname::from_string (pk->extra ()["sequence"]))); + pre_statement (); - os_ << "CREATE SEQUENCE " << - quote_id (sequence_name (t.name ())) << endl + os_ << "CREATE SEQUENCE " << qs << endl << " START WITH 1 INCREMENT BY 1" << endl; post_statement (); } |