diff --git a/system/Database/BaseBuilder.php b/system/Database/BaseBuilder.php index 2d54b90f6961..f9682a72bb54 100644 --- a/system/Database/BaseBuilder.php +++ b/system/Database/BaseBuilder.php @@ -2369,7 +2369,13 @@ public function increment(string $column, int $value = 1) $sql = $this->_update($this->QBFrom[0], [$column => "{$column} + {$value}"]); - return $this->db->query($sql, $this->binds, false); + if (! $this->testMode) { + $this->resetWrite(); + + return $this->db->query($sql, $this->binds, false); + } + + return true; } /** @@ -2383,7 +2389,13 @@ public function decrement(string $column, int $value = 1) $sql = $this->_update($this->QBFrom[0], [$column => "{$column}-{$value}"]); - return $this->db->query($sql, $this->binds, false); + if (! $this->testMode) { + $this->resetWrite(); + + return $this->db->query($sql, $this->binds, false); + } + + return true; } /** diff --git a/system/Database/Postgre/Builder.php b/system/Database/Postgre/Builder.php index 1d80f687568c..b0a94670ff18 100644 --- a/system/Database/Postgre/Builder.php +++ b/system/Database/Postgre/Builder.php @@ -96,7 +96,13 @@ public function increment(string $column, int $value = 1) $sql = $this->_update($this->QBFrom[0], [$column => "to_number({$column}, '9999999') + {$value}"]); - return $this->db->query($sql, $this->binds, false); + if (! $this->testMode) { + $this->resetWrite(); + + return $this->db->query($sql, $this->binds, false); + } + + return true; } /** @@ -112,7 +118,13 @@ public function decrement(string $column, int $value = 1) $sql = $this->_update($this->QBFrom[0], [$column => "to_number({$column}, '9999999') - {$value}"]); - return $this->db->query($sql, $this->binds, false); + if (! $this->testMode) { + $this->resetWrite(); + + return $this->db->query($sql, $this->binds, false); + } + + return true; } /** diff --git a/system/Database/SQLSRV/Builder.php b/system/Database/SQLSRV/Builder.php index a5bf829a6b74..8d0e0b419620 100755 --- a/system/Database/SQLSRV/Builder.php +++ b/system/Database/SQLSRV/Builder.php @@ -255,7 +255,13 @@ public function increment(string $column, int $value = 1) $sql = $this->_update($this->QBFrom[0], $values); - return $this->db->query($sql, $this->binds, false); + if (! $this->testMode) { + $this->resetWrite(); + + return $this->db->query($sql, $this->binds, false); + } + + return true; } /** @@ -275,7 +281,13 @@ public function decrement(string $column, int $value = 1) $sql = $this->_update($this->QBFrom[0], $values); - return $this->db->query($sql, $this->binds, false); + if (! $this->testMode) { + $this->resetWrite(); + + return $this->db->query($sql, $this->binds, false); + } + + return true; } /** diff --git a/tests/system/Database/Live/IncrementTest.php b/tests/system/Database/Live/IncrementTest.php index 0c3ddf600833..104bb1371c51 100644 --- a/tests/system/Database/Live/IncrementTest.php +++ b/tests/system/Database/Live/IncrementTest.php @@ -49,6 +49,20 @@ public function testIncrementWithValue() $this->seeInDatabase('job', ['name' => 'incremental', 'description' => '8']); } + public function testResetStateAfterIncrement() + { + $this->hasInDatabase('job', ['name' => 'account1', 'description' => '10']); + $this->hasInDatabase('job', ['name' => 'account2', 'description' => '10']); + + $builder = $this->db->table('job'); + + $builder->where('name', 'account1')->increment('description'); + $builder->where('name', 'account2')->increment('description'); + + $this->seeInDatabase('job', ['name' => 'account1', 'description' => '11']); + $this->seeInDatabase('job', ['name' => 'account2', 'description' => '11']); + } + public function testDecrement() { $this->hasInDatabase('job', ['name' => 'incremental', 'description' => '6']); @@ -70,4 +84,18 @@ public function testDecrementWithValue() $this->seeInDatabase('job', ['name' => 'incremental', 'description' => '4']); } + + public function testResetStateAfterDecrement() + { + $this->hasInDatabase('job', ['name' => 'account1', 'description' => '10']); + $this->hasInDatabase('job', ['name' => 'account2', 'description' => '10']); + + $builder = $this->db->table('job'); + + $builder->where('name', 'account1')->decrement('description'); + $builder->where('name', 'account2')->decrement('description'); + + $this->seeInDatabase('job', ['name' => 'account1', 'description' => '9']); + $this->seeInDatabase('job', ['name' => 'account2', 'description' => '9']); + } } diff --git a/user_guide_src/source/changelogs/v4.2.2.rst b/user_guide_src/source/changelogs/v4.2.2.rst new file mode 100644 index 000000000000..895439f489c0 --- /dev/null +++ b/user_guide_src/source/changelogs/v4.2.2.rst @@ -0,0 +1,35 @@ +Version 4.2.2 +############# + +Release Date: Unreleased + +**4.2.2 release of CodeIgniter4** + +.. contents:: + :local: + :depth: 2 + +BREAKING +******** + +none. + +Enhancements +************ + +none. + +Changes +******* + +- Fixed: ``BaseBuilder::increment()`` and ``BaseBuilder::decrement()`` do not reset the ``BaseBuilder`` state after a query. + +Deprecations +************ + +none. + +Bugs Fixed +********** + +See the repo's `CHANGELOG.md `_ for a complete list of bugs fixed.