aboutsummaryrefslogtreecommitdiff
path: root/odb/relational/oracle
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2013-04-26 17:18:12 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2013-04-26 17:18:12 +0200
commit6692558ba588c76f5e61eb7ed9a1040d36cb9ed7 (patch)
tree6f7a29e911713829583bc573e938591383f8486c /odb/relational/oracle
parent84cb9f184bc24ef7151ab9931b46311b03219b14 (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.cxx7
-rw-r--r--odb/relational/oracle/schema.cxx14
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 ();
}