From 2d76f33dd43d992a3547054a95446facf910eefa Mon Sep 17 00:00:00 2001 From: DarkDef Date: Tue, 27 Apr 2021 12:15:31 +0300 Subject: [PATCH] Fixes after review --- framework/db/mssql/ColumnSchemaBuilder.php | 6 +++--- framework/db/mssql/QueryBuilder.php | 11 +++++++---- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/framework/db/mssql/ColumnSchemaBuilder.php b/framework/db/mssql/ColumnSchemaBuilder.php index 618973f5af..2939be8a2e 100644 --- a/framework/db/mssql/ColumnSchemaBuilder.php +++ b/framework/db/mssql/ColumnSchemaBuilder.php @@ -13,8 +13,8 @@ use yii\db\Expression; /** * ColumnSchemaBuilder is the schema builder for MSSQL databases. * - * @author Chris Harris - * @since 2.0.8 + * @author Valerii Gorbachev + * @since 2.0.42 */ class ColumnSchemaBuilder extends AbstractColumnSchemaBuilder { @@ -64,7 +64,7 @@ class ColumnSchemaBuilder extends AbstractColumnSchemaBuilder */ public function getCheckValue() { - return $this->check !== null ? "{$this->check}" : null; + return $this->check !== null ? (string) $this->check : null; } /** diff --git a/framework/db/mssql/QueryBuilder.php b/framework/db/mssql/QueryBuilder.php index d2727abae8..b96451345b 100644 --- a/framework/db/mssql/QueryBuilder.php +++ b/framework/db/mssql/QueryBuilder.php @@ -176,12 +176,13 @@ class QueryBuilder extends \yii\db\QueryBuilder { $sqlAfter = [$this->dropConstraintsForColumn($table, $column, 'D')]; + $columnName = $this->db->quoteColumnName($column); + $tableName = $this->db->quoteTableName($table); + $constraintBase = preg_replace('/[^a-z0-9_]/i', '', $table . '_' . $column); + if ($type instanceof \yii\db\mssql\ColumnSchemaBuilder) { $type->setAlterColumnFormat(); - $columnName = $this->db->quoteColumnName($column); - $tableName = $this->db->quoteTableName($table); - $constraintBase = preg_replace('/[^a-z0-9_]/i', '', $table . '_' . $column); $defaultValue = $type->getDefaultValue(); if ($defaultValue !== null) { @@ -195,7 +196,9 @@ class QueryBuilder extends \yii\db\QueryBuilder $checkValue = $type->getCheckValue(); if ($checkValue !== null) { - $sqlAfter[] = "ALTER TABLE {$tableName} ADD CONSTRAINT " . $this->db->quoteColumnName("CK_{$constraintBase}") . " CHECK ({$checkValue})"; + $sqlAfter[] = "ALTER TABLE {$tableName} ADD CONSTRAINT " . + $this->db->quoteColumnName("CK_{$constraintBase}") . + " CHECK (" . ($defaultValue instanceof Expression ? $checkValue : new Expression($checkValue)) . ")"; } if ($type->isUnique()) {