From d7752cdb86957f7dc0caffe6033e872443ad8153 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Fri, 14 Nov 2014 16:24:50 +0200 Subject: Implement bulk database operation support for Oracle and SQL Server --- mssql/types/driver.cxx | 51 +++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 46 insertions(+), 5 deletions(-) (limited to 'mssql/types/driver.cxx') 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 p (db->load (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 p1 (db->load (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 p (db->load (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 (); -- cgit v1.1