summaryrefslogtreecommitdiff
path: root/odb/relational/mssql
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2014-11-26 15:04:56 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2014-11-26 15:04:56 +0200
commit06583147eaa601764a789ae586384e38e05e9015 (patch)
tree03792913f585e4884843f1d6c52988d8dfa96a87 /odb/relational/mssql
parent858b2d37950c33cdf076382849de952ea44d7779 (diff)
Implement optimistic concurrency support in bulk operations
Bulk update and SQL Server ROWVERSION not yet supported.
Diffstat (limited to 'odb/relational/mssql')
-rw-r--r--odb/relational/mssql/header.cxx6
-rw-r--r--odb/relational/mssql/source.cxx12
2 files changed, 14 insertions, 4 deletions
diff --git a/odb/relational/mssql/header.cxx b/odb/relational/mssql/header.cxx
index 3bc2cbd..ff16950 100644
--- a/odb/relational/mssql/header.cxx
+++ b/odb/relational/mssql/header.cxx
@@ -53,6 +53,12 @@ namespace relational
os << "static const bool rowversion = " << rv << ";"
<< endl;
+
+ // Disable bulk update if we have ROWVERSION since we don't
+ // yet support batch extraction of the version.
+ //
+ if (rv && c.count ("bulk-update"))
+ c.remove ("bulk-update");
}
virtual void
diff --git a/odb/relational/mssql/source.cxx b/odb/relational/mssql/source.cxx
index ffcfa3c..2ce8810 100644
--- a/odb/relational/mssql/source.cxx
+++ b/odb/relational/mssql/source.cxx
@@ -1118,21 +1118,25 @@ namespace relational
}
virtual string
- optimistic_version_init (semantics::data_member& m)
+ optimistic_version_init (semantics::data_member& m, bool index)
{
sql_type t (parse_sql_type (column_type (m), m));
return t.type != sql_type::ROWVERSION
? "1"
- : "version (sts.id_image ())";
+ : (index
+ ? "version (sts.id_image (i))"
+ : "version (sts.id_image ())");
}
virtual string
- optimistic_version_increment (semantics::data_member& m)
+ optimistic_version_increment (semantics::data_member& m, bool index)
{
sql_type t (parse_sql_type (column_type (m), m));
return t.type != sql_type::ROWVERSION
? "1"
- : "version (sts.id_image ())";
+ : (index
+ ? "version (sts.id_image (i))"
+ : "version (sts.id_image ())");
}
virtual bool