From 74fb204d1e14a098f48d5e7e4563309428cc5ebc Mon Sep 17 00:00:00 2001 From: darkdef Date: Mon, 14 Nov 2022 19:32:18 +0300 Subject: [PATCH 1/2] Reset sequence fix --- src/DMLQueryBuilder.php | 4 +--- tests/CommandTest.php | 12 ++++++++++++ tests/QueryBuilderTest.php | 2 +- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/DMLQueryBuilder.php b/src/DMLQueryBuilder.php index 92e9a5fc4..279db54f5 100644 --- a/src/DMLQueryBuilder.php +++ b/src/DMLQueryBuilder.php @@ -90,9 +90,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); From 9655e57c812846b0c2ceca1a934d630f5e4907e5 Mon Sep 17 00:00:00 2001 From: darkdef Date: Mon, 14 Nov 2022 19:36:39 +0300 Subject: [PATCH 2/2] fix --- src/DMLQueryBuilder.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/DMLQueryBuilder.php b/src/DMLQueryBuilder.php index 279db54f5..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 {