diff options
author | Thomas Müller <thomas.mueller@tmit.eu> | 2016-03-17 20:52:11 +0100 |
---|---|---|
committer | Thomas Müller <thomas.mueller@tmit.eu> | 2016-03-17 20:52:11 +0100 |
commit | 382b18e85e021afbe738f8b21086908acb534248 (patch) | |
tree | 1dfbd80b17c876d3b705572da55465e48608d95b | |
parent | 9e5c5c804b56bc43d8d7788ab8adb6ce304ebdf0 (diff) | |
parent | aa91d50d043df254403479aedfa0f7b4f7f76502 (diff) | |
download | nextcloud-server-382b18e85e021afbe738f8b21086908acb534248.tar.gz nextcloud-server-382b18e85e021afbe738f8b21086908acb534248.zip |
Merge pull request #23309 from owncloud/backport-23164-stable9
[stable9] Prevent certain DBs throwing exceptions on same-value updates
-rw-r--r-- | lib/private/db/connection.php | 2 | ||||
-rw-r--r-- | tests/lib/db/connection.php | 30 |
2 files changed, 25 insertions, 7 deletions
diff --git a/lib/private/db/connection.php b/lib/private/db/connection.php index 584904e6370..7904fab0726 100644 --- a/lib/private/db/connection.php +++ b/lib/private/db/connection.php @@ -293,7 +293,7 @@ class Connection extends \Doctrine\DBAL\Connection implements IDBConnection { $updateQb->where($where); $affected = $updateQb->execute(); - if ($affected === 0) { + if ($affected === 0 && !empty($updatePreconditionValues)) { throw new PreconditionNotMetException(); } diff --git a/tests/lib/db/connection.php b/tests/lib/db/connection.php index b10b1a322a9..62d0a77ca1f 100644 --- a/tests/lib/db/connection.php +++ b/tests/lib/db/connection.php @@ -47,6 +47,11 @@ class Connection extends \Test\TestCase { $this->connection = \OC::$server->getDatabaseConnection(); } + public function tearDown() { + parent::tearDown(); + $this->connection->dropTable('table'); + } + /** * @param string $table */ @@ -86,6 +91,7 @@ class Connection extends \Test\TestCase { * @depends testTableExists */ public function testDropTable() { + $this->makeTestTable(); $this->assertTableExist('table'); $this->connection->dropTable('table'); $this->assertTableNotExist('table'); @@ -111,8 +117,6 @@ class Connection extends \Test\TestCase { ]); $this->assertEquals('foo', $this->getTextValueByIntergerField(1)); - - $this->connection->dropTable('table'); } public function testSetValuesOverWrite() { @@ -131,8 +135,6 @@ class Connection extends \Test\TestCase { ]); $this->assertEquals('bar', $this->getTextValueByIntergerField(1)); - - $this->connection->dropTable('table'); } public function testSetValuesOverWritePrecondition() { @@ -154,8 +156,6 @@ class Connection extends \Test\TestCase { ]); $this->assertEquals('bar', $this->getTextValueByIntergerField(1)); - - $this->connection->dropTable('table'); } /** @@ -179,4 +179,22 @@ class Connection extends \Test\TestCase { 'booleanfield' => false ]); } + + public function testSetValuesSameNoError() { + $this->makeTestTable(); + $this->connection->setValues('table', [ + 'integerfield' => 1 + ], [ + 'textfield' => 'foo', + 'clobfield' => 'not_null' + ]); + + // this will result in 'no affected rows' on certain optimizing DBs + // ensure the PreConditionNotMetException isn't thrown + $this->connection->setValues('table', [ + 'integerfield' => 1 + ], [ + 'textfield' => 'foo' + ]); + } } |