From 4452be925b749572f0e3edcb21e9af818647eb55 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Fri, 20 Aug 2010 10:23:55 +0200 Subject: Add deadlock exception --- odb/mysql/statement.cxx | 66 +++++++++++++++++++++++++++++++++++-------------- 1 file changed, 48 insertions(+), 18 deletions(-) (limited to 'odb/mysql') diff --git a/odb/mysql/statement.cxx b/odb/mysql/statement.cxx index 9c99c8f..14907a9 100644 --- a/odb/mysql/statement.cxx +++ b/odb/mysql/statement.cxx @@ -3,7 +3,7 @@ // copyright : Copyright (c) 2005-2010 Code Synthesis Tools CC // license : GNU GPL v2; see accompanying LICENSE file -#include // ER_DUP_ENTRY +#include // ER_DUP_ENTRY, ER_LOCK_DEADLOCK #include #include @@ -94,7 +94,14 @@ namespace odb } if (mysql_stmt_execute (stmt_)) - throw database_exception (stmt_); + { + unsigned int e (mysql_stmt_errno (stmt_)); + + if (e == ER_LOCK_DEADLOCK) + throw deadlock (); + else + throw database_exception (stmt_); + } conn_.active (this); } @@ -193,20 +200,22 @@ namespace odb if (mysql_stmt_execute (stmt_)) { - unsigned int e (mysql_stmt_errno (stmt_)); - - if (e == ER_DUP_ENTRY) - throw object_already_persistent (); - else - throw database_exception (stmt_); + switch (mysql_stmt_errno (stmt_)) + { + case ER_DUP_ENTRY: + { + throw object_already_persistent (); + } + case ER_LOCK_DEADLOCK: + { + throw deadlock (); + } + default: + { + throw database_exception (stmt_); + } + } } - - /* - @@ Should I throw unknown error or some such? - - if (mysql_stmt_affected_rows (stmt_) != 1) - throw object_already_persistent (); - */ } // find_statement @@ -268,7 +277,14 @@ namespace odb } if (mysql_stmt_execute (stmt_)) - throw database_exception (stmt_); + { + unsigned int e (mysql_stmt_errno (stmt_)); + + if (e == ER_LOCK_DEADLOCK) + throw deadlock (); + else + throw database_exception (stmt_); + } conn_.active (this); @@ -375,7 +391,14 @@ namespace odb } if (mysql_stmt_execute (stmt_)) - throw database_exception (stmt_); + { + unsigned int e (mysql_stmt_errno (stmt_)); + + if (e == ER_LOCK_DEADLOCK) + throw deadlock (); + else + throw database_exception (stmt_); + } my_ulonglong r (mysql_stmt_affected_rows (stmt_)); @@ -422,7 +445,14 @@ namespace odb } if (mysql_stmt_execute (stmt_)) - throw database_exception (stmt_); + { + unsigned int e (mysql_stmt_errno (stmt_)); + + if (e == ER_LOCK_DEADLOCK) + throw deadlock (); + else + throw database_exception (stmt_); + } my_ulonglong r (mysql_stmt_affected_rows (stmt_)); -- cgit v1.1