Merge "rdbms: rename wasKnownStatementRollbackError() to isKnownStatementRollbackError()"
This commit is contained in:
commit
04426c6a05
7 changed files with 18 additions and 14 deletions
|
|
@ -77,6 +77,8 @@ because of Phabricator reports.
|
|||
- ::fetchRow()
|
||||
- ::numRows()
|
||||
- ::freeResult()
|
||||
* Database::wasKnownStatementRollbackError() was removed. Subclasses should
|
||||
override isKnownStatementRollbackError() instead.
|
||||
* …
|
||||
|
||||
=== Deprecations in 1.39 ===
|
||||
|
|
|
|||
|
|
@ -1333,7 +1333,7 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
|
|||
$reconnected = $this->replaceLostConnection( $lastErrno, __METHOD__ );
|
||||
} else {
|
||||
# Check if only the last query was rolled back
|
||||
$recoverableSR = $this->wasKnownStatementRollbackError();
|
||||
$recoverableSR = $this->isKnownStatementRollbackError( $lastErrno );
|
||||
}
|
||||
|
||||
if ( $sql === self::PING_QUERY ) {
|
||||
|
|
@ -3907,12 +3907,13 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
|
|||
|
||||
/**
|
||||
* @stable to override
|
||||
* @param int|string $errno
|
||||
* @return bool Whether it is known that the last query error only caused statement rollback
|
||||
* @note This is for backwards compatibility for callers catching DBError exceptions in
|
||||
* order to ignore problems like duplicate key errors or foreign key violations
|
||||
* @since 1.31
|
||||
* @since 1.39
|
||||
*/
|
||||
protected function wasKnownStatementRollbackError() {
|
||||
protected function isKnownStatementRollbackError( $errno ) {
|
||||
return false; // don't know; it could have caused a transaction rollback
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1229,11 +1229,11 @@ abstract class DatabaseMysqlBase extends Database {
|
|||
return $errno == 2013 || $errno == 2006;
|
||||
}
|
||||
|
||||
protected function wasKnownStatementRollbackError() {
|
||||
$errno = $this->lastErrno();
|
||||
|
||||
protected function isKnownStatementRollbackError( $errno ) {
|
||||
// https://mariadb.com/kb/en/mariadb-error-codes/
|
||||
// https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html
|
||||
if ( $errno === 1205 ) { // lock wait timeout
|
||||
// Note that this is uncached to avoid stale values of SET is used
|
||||
// Note that this is uncached to avoid stale values if SET is used
|
||||
$res = $this->query(
|
||||
"SELECT @@innodb_rollback_on_timeout AS Value",
|
||||
__METHOD__,
|
||||
|
|
@ -1245,7 +1245,6 @@ abstract class DatabaseMysqlBase extends Database {
|
|||
return ( $row && !$row->Value );
|
||||
}
|
||||
|
||||
// See https://dev.mysql.com/doc/refman/5.5/en/error-messages-server.html
|
||||
return in_array( $errno, [ 1022, 1062, 1216, 1217, 1137, 1146, 1051, 1054 ], true );
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -662,7 +662,7 @@ __INDEXATTR__;
|
|||
return in_array( $errno, $codes, true );
|
||||
}
|
||||
|
||||
protected function wasKnownStatementRollbackError() {
|
||||
protected function isKnownStatementRollbackError( $errno ) {
|
||||
return false; // transaction has to be rolled-back from error state
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -633,7 +633,7 @@ class DatabaseSqlite extends Database {
|
|||
return $errno == 17; // SQLITE_SCHEMA;
|
||||
}
|
||||
|
||||
protected function wasKnownStatementRollbackError() {
|
||||
protected function isKnownStatementRollbackError( $errno ) {
|
||||
// ON CONFLICT ROLLBACK clauses make it so that SQLITE_CONSTRAINT error is
|
||||
// ambiguous with regard to whether it implies a ROLLBACK or an ABORT happened.
|
||||
// https://sqlite.org/lang_createtable.html#uniqueconst
|
||||
|
|
|
|||
|
|
@ -110,7 +110,7 @@ class DatabaseTestHelper extends Database {
|
|||
* @param int $errno Error number
|
||||
* @param string $error Error text
|
||||
* @param array $options
|
||||
* - wasKnownStatementRollbackError: Return value for wasKnownStatementRollbackError()
|
||||
* - isKnownStatementRollbackError: Return value for isKnownStatementRollbackError()
|
||||
*/
|
||||
public function forceNextQueryError( $errno, $error, $options = [] ) {
|
||||
$this->nextError = [ 'errno' => $errno, 'error' => $error ] + $options;
|
||||
|
|
@ -195,8 +195,10 @@ class DatabaseTestHelper extends Database {
|
|||
return $this->lastError ? $this->lastError['error'] : 'test';
|
||||
}
|
||||
|
||||
protected function wasKnownStatementRollbackError() {
|
||||
return $this->lastError['wasKnownStatementRollbackError'] ?? false;
|
||||
protected function isKnownStatementRollbackError( $errno ) {
|
||||
return ( $this->lastError['errno'] ?? 0 ) === $errno
|
||||
? ( $this->lastError['isKnownStatementRollbackError'] ?? false )
|
||||
: false;
|
||||
}
|
||||
|
||||
public function fieldInfo( $table, $field ) {
|
||||
|
|
|
|||
|
|
@ -2375,7 +2375,7 @@ class DatabaseSQLTest extends PHPUnit\Framework\TestCase {
|
|||
|
||||
$doError = function () {
|
||||
$this->database->forceNextQueryError( 666, 'Evilness', [
|
||||
'wasKnownStatementRollbackError' => true,
|
||||
'isKnownStatementRollbackError' => true,
|
||||
] );
|
||||
try {
|
||||
$this->database->delete( 'error', '1', __CLASS__ . '::SomeCaller' );
|
||||
|
|
|
|||
Loading…
Reference in a new issue