aboutsummaryrefslogtreecommitdiff
path: root/mssql/types/driver.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2014-11-14 16:24:50 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2014-11-25 06:49:01 +0200
commitd7752cdb86957f7dc0caffe6033e872443ad8153 (patch)
tree8909976800ce89089ce6b12ea02c7f18ca61453d /mssql/types/driver.cxx
parent0a4df2bc0c7962acbddc55b4b5668e09fb54ef7f (diff)
Implement bulk database operation support for Oracle and SQL Server
Diffstat (limited to 'mssql/types/driver.cxx')
-rw-r--r--mssql/types/driver.cxx51
1 files changed, 46 insertions, 5 deletions
diff --git a/mssql/types/driver.cxx b/mssql/types/driver.cxx
index 33b606e..55e4c68 100644
--- a/mssql/types/driver.cxx
+++ b/mssql/types/driver.cxx
@@ -269,23 +269,64 @@ main (int argc, char* argv[])
// Test optimistic concurrency using ROWVERSION.
//
{
- rowversion o;
+ rowversion o (123);
o.str = "abc";
{
transaction t (db->begin ());
db->persist (o);
- assert (o.version != 0);
+ assert (o.ver != 0);
t.commit ();
}
{
transaction t (db->begin ());
auto_ptr<rowversion> p (db->load<rowversion> (o.id_));
- assert (p->version == o.version);
+ assert (p->ver == o.ver);
p->str += 'd';
db->update (*p);
- assert (p->version > o.version);
+ assert (p->ver > o.ver);
+
+ // Double-check object version was updated.
+ //
+ {
+ auto_ptr<rowversion> p1 (db->load<rowversion> (o.id_));
+ assert (p->ver == p1->ver);
+ }
+
+ o.str += 'D';
+ try
+ {
+ db->update (o);
+ assert (false);
+ }
+ catch (const odb::object_changed&) {}
+ db->reload (o);
+ assert (o.ver == p->ver);
+ o.str += 'D';
+ db->update (o);
+ t.commit ();
+ }
+ }
+
+ {
+ rowversion_auto o;
+ o.str = "abc";
+
+ {
+ transaction t (db->begin ());
+ db->persist (o);
+ assert (o.ver != 0);
+ t.commit ();
+ }
+
+ {
+ transaction t (db->begin ());
+ auto_ptr<rowversion_auto> p (db->load<rowversion_auto> (o.id_));
+ assert (p->ver == o.ver);
+ p->str += 'd';
+ db->update (*p);
+ assert (p->ver > o.ver);
o.str += 'D';
try
{
@@ -294,7 +335,7 @@ main (int argc, char* argv[])
}
catch (const odb::object_changed&) {}
db->reload (o);
- assert (o.version == p->version);
+ assert (o.ver == p->ver);
o.str += 'D';
db->update (o);
t.commit ();