Skip to content

Commit 7037fd4

Browse files
Fix #20355: Fix SQL syntax for resetting sequence in QueryBuilder for MSSQL
1 parent 5fb3f80 commit 7037fd4

File tree

4 files changed

+5
-7
lines changed

4 files changed

+5
-7
lines changed

.github/workflows/ci-mssql.yml

-5
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,6 @@ jobs:
3434
mssql-tool: /opt/mssql-tools18/bin/sqlcmd -C
3535

3636
include:
37-
- php: 7.4
38-
mssql:
39-
version: server:2017-latest
40-
mssql-tool: /opt/mssql-tools/bin/sqlcmd
41-
os: ubuntu-22.04
4237
- php: 8.0
4338
mssql:
4439
version: server:2019-latest

framework/CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ Yii Framework 2 Change Log
88
- Bug #20329: pgsql: Column Schema doesn't recognize PG type cast (arkhamvm)
99
- Bug #8298: Loading fixtures does not update table sequence for Postgresql database (mtangoo)
1010
- Bug #20347: Fix compatibility with PHP 8.4: remove usage of `session.use_trans_sid` and `session.use_only_cookies` (tehmaestro)
11+
- Bug #20355: Fix SQL syntax for resetting sequence in `QueryBuilder` for `MSSQL` (terabytesoftw)
1112

1213

1314
2.0.52 February 13, 2025

framework/db/mssql/QueryBuilder.php

+3-1
Original file line numberDiff line numberDiff line change
@@ -247,9 +247,11 @@ public function resetSequence($tableName, $value = null)
247247
$table = $this->db->getTableSchema($tableName);
248248
if ($table !== null && $table->sequenceName !== null) {
249249
$tableName = $this->db->quoteTableName($tableName);
250+
250251
if ($value === null) {
251252
$key = $this->db->quoteColumnName(reset($table->primaryKey));
252-
$value = "(SELECT COALESCE(MAX({$key}),0) FROM {$tableName})+1";
253+
$sql = "SELECT COALESCE(MAX({$key}), 0) + 1 FROM {$tableName}";
254+
$value = $this->db->createCommand($sql)->queryScalar();
253255
} else {
254256
$value = (int) $value;
255257
}

tests/framework/db/mssql/QueryBuilderTest.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -364,7 +364,7 @@ public function testResetSequence()
364364
{
365365
$qb = $this->getQueryBuilder();
366366

367-
$expected = "DBCC CHECKIDENT ('[item]', RESEED, (SELECT COALESCE(MAX([id]),0) FROM [item])+1)";
367+
$expected = "DBCC CHECKIDENT ('[item]', RESEED, 6)";
368368
$sql = $qb->resetSequence('item');
369369
$this->assertEquals($expected, $sql);
370370

0 commit comments

Comments
 (0)