diff --git a/src/DMLQueryBuilder.php b/src/DMLQueryBuilder.php index 92e9a5fc4..67af4ef37 100644 --- a/src/DMLQueryBuilder.php +++ b/src/DMLQueryBuilder.php @@ -23,7 +23,6 @@ use function ltrim; use function strrpos; use function is_array; -use function reset; final class DMLQueryBuilder extends AbstractDMLQueryBuilder { @@ -90,9 +89,7 @@ public function resetSequence(string $tableName, int|string $value = null): stri $tableName = $this->quoter->quoteTableName($tableName); if ($value === null) { - $pk = $table->getPrimaryKey(); - $key = $this->quoter->quoteColumnName(reset($pk)); - $value = "(SELECT COALESCE(MAX($key),0) FROM $tableName)+1"; + return "DBCC CHECKIDENT ('$tableName', RESEED, 0) WITH NO_INFOMSGS;DBCC CHECKIDENT ('$tableName', RESEED)"; } return "DBCC CHECKIDENT ('$tableName', RESEED, $value)"; diff --git a/tests/CommandTest.php b/tests/CommandTest.php index 68220830d..ce27ebae8 100644 --- a/tests/CommandTest.php +++ b/tests/CommandTest.php @@ -343,4 +343,16 @@ public function testInsertExWithRowVersionNullColumn(): void $this->assertEquals($insertedString, $result['stringcol']); $this->assertEquals(1, $result['id']); } + + public function testExecuteResetSequence(): void + { + $db = $this->getConnection(true); + $oldRow = $db->createCommand()->insertEx('item', ['name' => 'insert_value_for_sequence', 'category_id' => 1]); + $db->createCommand()->delete('item', ['id' => $oldRow['id']])->execute(); + + $db->createCommand()->executeResetSequence('item')->execute(); + $newRow = $db->createCommand()->insertEx('item', ['name' => 'insert_value_for_sequence', 'category_id' => 1]); + + $this->assertEquals($oldRow['id'], $newRow['id']); + } } diff --git a/tests/QueryBuilderTest.php b/tests/QueryBuilderTest.php index bd81cf8a1..b8bf30b92 100644 --- a/tests/QueryBuilderTest.php +++ b/tests/QueryBuilderTest.php @@ -447,7 +447,7 @@ public function testResetSequence(): void $qb = $this->getConnection(true)->getQueryBuilder(); $sql = $qb->resetSequence('item'); - $this->assertSame("DBCC CHECKIDENT ('[item]', RESEED, (SELECT COALESCE(MAX([id]),0) FROM [item])+1)", $sql); + $this->assertSame("DBCC CHECKIDENT ('[item]', RESEED, 0) WITH NO_INFOMSGS;DBCC CHECKIDENT ('[item]', RESEED)", $sql); $sql = $qb->resetSequence('item', 4); $this->assertSame("DBCC CHECKIDENT ('[item]', RESEED, 4)", $sql);