From 79121ca0e7ffdad212513a05fba76c1a19a73df5 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Tue, 15 Jan 2013 12:27:27 +0200 Subject: Add support for setting SQL Server transaction isolation level --- odb/mssql/connection.cxx | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) (limited to 'odb/mssql/connection.cxx') diff --git a/odb/mssql/connection.cxx b/odb/mssql/connection.cxx index 4c69a0c..6310bf3 100644 --- a/odb/mssql/connection.cxx +++ b/odb/mssql/connection.cxx @@ -18,6 +18,15 @@ namespace odb { namespace mssql { + static const long transaction_isolation_map[] = + { + SQL_TXN_READ_UNCOMMITTED, + SQL_TXN_READ_COMMITTED, + SQL_TXN_REPEATABLE_READ, + SQL_TXN_SS_SNAPSHOT, + SQL_TXN_SERIALIZABLE + }; + connection:: connection (database_type& db) : odb::connection (db), @@ -63,6 +72,40 @@ namespace odb if (!SQL_SUCCEEDED (r)) translate_error (r, handle_, SQL_HANDLE_DBC); + // Set transaction isolation level. + // + transaction_isolation ti (db_.transaction_isolation ()); + switch (ti) + { + case isolation_read_committed: + { + break; // SQL Server default. + } + case isolation_read_uncommitted: + case isolation_repeatable_read: + case isolation_serializable: + { + r = SQLSetConnectAttrA (handle_, + SQL_ATTR_TXN_ISOLATION, + (SQLPOINTER) transaction_isolation_map[ti], + 0); + if (!SQL_SUCCEEDED (r)) + translate_error (r, handle_, SQL_HANDLE_DBC); + break; + } + case isolation_snapshot: + { + r = SQLSetConnectAttrA (handle_, + SQL_COPT_SS_TXN_ISOLATION, + (SQLPOINTER) transaction_isolation_map[ti], + SQL_IS_INTEGER); + + if (!SQL_SUCCEEDED (r)) + translate_error (r, handle_, SQL_HANDLE_DBC); + break; + } + } + // Connect. // { -- cgit v1.1