summaryrefslogtreecommitdiff
path: root/odb/relational/oracle/source.cxx
diff options
context:
space:
mode:
authorConstantin Michael <constantin@codesynthesis.com>2011-10-20 10:45:31 +0200
committerConstantin Michael <constantin@codesynthesis.com>2011-10-21 11:47:15 +0200
commit20f2d671951ce2bf3e4b86d26e326e770733e421 (patch)
treee0ab66a82135a4e4be530d39fdbf77e2dc7bc17d /odb/relational/oracle/source.cxx
parent993a4a9b102161f9a5f52ea1d3f70e71307d626c (diff)
Add persist_stmt hook to handle generation of persist statement SQL
ODB requires that Oracle persist statements include a RETURNING clause so that a generated auto_id column value may be returned.
Diffstat (limited to 'odb/relational/oracle/source.cxx')
-rw-r--r--odb/relational/oracle/source.cxx29
1 files changed, 29 insertions, 0 deletions
diff --git a/odb/relational/oracle/source.cxx b/odb/relational/oracle/source.cxx
index d50808a..992a8e4 100644
--- a/odb/relational/oracle/source.cxx
+++ b/odb/relational/oracle/source.cxx
@@ -763,6 +763,35 @@ namespace relational
{
os << "sts.find_statement ().stream_result ();";
}
+
+ virtual void
+ persist_stmt (type& c)
+ {
+ os << strlit ("INSERT INTO " + table_qname (c) + " (") << endl;
+
+ instance<relational::object_columns> ct (false);
+ ct->traverse (c);
+
+ string values;
+ instance<relational::persist_statement_params> pt (values);
+ pt->traverse (c);
+
+ os << strlit (") VALUES (" + values + ")");
+
+ semantics::data_member* id (id_member (c));
+
+ if (id->count ("auto"))
+ {
+ ostringstream n;
+ n << pt->count () + 1;
+
+ os << endl
+ << strlit (" RETURNING " +
+ column_qname (*id) +
+ " INTO :" +
+ n.str ());
+ }
+ }
};
entry<class_> class_entry_;
}