From 29f0456d158cd6a8f369d7574bb757d22052454b Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Thu, 12 Jan 2012 09:15:21 +0200 Subject: Add support for case where we don't send auto object id in INSERT --- odb/relational/context.cxx | 1 + odb/relational/context.hxx | 1 + odb/relational/mssql/context.cxx | 1 + odb/relational/mysql/context.cxx | 1 + odb/relational/oracle/context.cxx | 1 + odb/relational/pgsql/context.cxx | 1 + odb/relational/source.hxx | 15 +++++++++++---- odb/relational/sqlite/context.cxx | 1 + 8 files changed, 18 insertions(+), 4 deletions(-) diff --git a/odb/relational/context.cxx b/odb/relational/context.cxx index 25c91d7..0ebfbf4 100644 --- a/odb/relational/context.cxx +++ b/odb/relational/context.cxx @@ -26,6 +26,7 @@ namespace relational model (current ().model), generate_grow (current ().generate_grow), need_alias_as (current ().need_alias_as), + insert_send_auto_id (current ().insert_send_auto_id), bind_vector (data_->bind_vector_), truncated_vector (data_->truncated_vector_) { diff --git a/odb/relational/context.hxx b/odb/relational/context.hxx index 96e8954..095f579 100644 --- a/odb/relational/context.hxx +++ b/odb/relational/context.hxx @@ -155,6 +155,7 @@ namespace relational bool generate_grow; bool need_alias_as; + bool insert_send_auto_id; string const& bind_vector; string const& truncated_vector; diff --git a/odb/relational/mssql/context.cxx b/odb/relational/mssql/context.cxx index bda8df9..c9ff6f5 100644 --- a/odb/relational/mssql/context.cxx +++ b/odb/relational/mssql/context.cxx @@ -83,6 +83,7 @@ namespace relational generate_grow = false; need_alias_as = true; + insert_send_auto_id = false; data_->bind_vector_ = "mssql::bind*"; // Populate the C++ type to DB type map. diff --git a/odb/relational/mysql/context.cxx b/odb/relational/mysql/context.cxx index 392f34c..e7fd790 100644 --- a/odb/relational/mysql/context.cxx +++ b/odb/relational/mysql/context.cxx @@ -80,6 +80,7 @@ namespace relational generate_grow = true; need_alias_as = true; + insert_send_auto_id = true; data_->bind_vector_ = "MYSQL_BIND*"; data_->truncated_vector_ = "my_bool*"; diff --git a/odb/relational/oracle/context.cxx b/odb/relational/oracle/context.cxx index bc52f63..26adfda 100644 --- a/odb/relational/oracle/context.cxx +++ b/odb/relational/oracle/context.cxx @@ -79,6 +79,7 @@ namespace relational generate_grow = false; need_alias_as = false; + insert_send_auto_id = true; data_->bind_vector_ = "oracle::bind*"; // Populate the C++ type to DB type map. diff --git a/odb/relational/pgsql/context.cxx b/odb/relational/pgsql/context.cxx index c17b41f..2a5baf2 100644 --- a/odb/relational/pgsql/context.cxx +++ b/odb/relational/pgsql/context.cxx @@ -80,6 +80,7 @@ namespace relational generate_grow = true; need_alias_as = true; + insert_send_auto_id = true; data_->bind_vector_ = "pgsql::bind*"; data_->truncated_vector_ = "bool*"; diff --git a/odb/relational/source.hxx b/odb/relational/source.hxx index db8d9e6..9860a30 100644 --- a/odb/relational/source.hxx +++ b/odb/relational/source.hxx @@ -576,8 +576,14 @@ namespace relational os << " + "; os << "(" << endl - << "sk == statement_insert ? 0 : " << - cc.id + cc.readonly << "UL)"; + << "sk == statement_insert ? "; + + if (insert_send_auto_id || !auto_ (*id_member (c))) + os << "0"; + else + os << cc.id << "UL"; + + os << " : " << cc.id + cc.readonly << "UL)"; } os << ")"; @@ -2233,7 +2239,8 @@ namespace relational init_auto_id (semantics::data_member&, // id member string const&) // image variable prefix { - assert (false); + if (insert_send_auto_id) + assert (false); } virtual void @@ -2839,7 +2846,7 @@ namespace relational << "im.version++;" << endl; - if (auto_id) + if (auto_id && insert_send_auto_id) { string const& n (id->name ()); string var ("im." + n + (n[n.size () - 1] == '_' ? "" : "_")); diff --git a/odb/relational/sqlite/context.cxx b/odb/relational/sqlite/context.cxx index 17c0f53..710e9fb 100644 --- a/odb/relational/sqlite/context.cxx +++ b/odb/relational/sqlite/context.cxx @@ -78,6 +78,7 @@ namespace relational generate_grow = true; need_alias_as = true; + insert_send_auto_id = true; data_->bind_vector_ = "sqlite::bind*"; data_->truncated_vector_ = "bool*"; -- cgit v1.1