aboutsummaryrefslogtreecommitdiff
path: root/odb
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2012-01-12 09:15:21 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2012-01-20 15:43:46 +0200
commit29f0456d158cd6a8f369d7574bb757d22052454b (patch)
treebe66cd0f5ce0bec6d011de64a4187848084990c8 /odb
parentbcb41ec5c264862e1b70b295e8bb8cee546591a5 (diff)
Add support for case where we don't send auto object id in INSERT
Diffstat (limited to 'odb')
-rw-r--r--odb/relational/context.cxx1
-rw-r--r--odb/relational/context.hxx1
-rw-r--r--odb/relational/mssql/context.cxx1
-rw-r--r--odb/relational/mysql/context.cxx1
-rw-r--r--odb/relational/oracle/context.cxx1
-rw-r--r--odb/relational/pgsql/context.cxx1
-rw-r--r--odb/relational/source.hxx15
-rw-r--r--odb/relational/sqlite/context.cxx1
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*";