Handle all errors in query() that might have caused rollback by putting the Database handle into an error state that can only be resolved by cancelAtomic() or rollback(). Other queries will be rejected until then. This results in more immediate exceptions in some cases where atomic section mismatch errors would have been thrown, such as a an error bubbling up from a child atomic section. Most cases were a try/catch block assumes that only the statement was rolled back now result in an error and rollback. Callers using try/catch to handle key conflicts should instead use SELECT FOR UPDATE to find conflicts beforehand, or use IGNORE, or the upsert()/replace() methods. The try/catch pattern is unsafe and no longer allowed, except for some common errors known to just rollback the statement. Even then, such statements can come from child atomic sections, so committing would be unsafe. Luckily, in such cases, there will be a mismatch detected on endAtomic() or a dangling section detected in close(), resulting in rollback. Remove caching from DatabaseMyslBase::getServerVariableSettings in case some SET query changes the values. Bug: T189999 Change-Id: I532bc5201681a915d0c8aa7a3b1c143b040b142e
28 lines
923 B
PHP
28 lines
923 B
PHP
<?php
|
|
/**
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along
|
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
* http://www.gnu.org/copyleft/gpl.html
|
|
*
|
|
* @file
|
|
* @ingroup Database
|
|
*/
|
|
|
|
namespace Wikimedia\Rdbms;
|
|
|
|
/**
|
|
* @ingroup Database
|
|
*/
|
|
class DBTransactionStateError extends DBTransactionError {
|
|
}
|