Browse Source

Fixes #17420: Fixed loading of column default values for MSSQL

tags/2.0.23
Alexander Kartavenko 5 years ago committed by Alexander Makarov
parent
commit
9f2a87363e
  1. 1
      framework/CHANGELOG.md
  2. 29
      framework/db/mssql/ColumnSchema.php
  3. 4
      framework/db/mssql/Schema.php
  4. 4
      tests/framework/db/ActiveRecordTest.php
  5. 8
      tests/framework/db/SchemaTest.php
  6. 47
      tests/framework/db/mssql/SchemaTest.php

1
framework/CHANGELOG.md

@ -5,6 +5,7 @@ Yii Framework 2 Change Log
------------------------ ------------------------
- Bug #17413: Fixed MSSQL tests: `QueryBuilderTest::testGetColumnType()`, `QueryBuilderTest::testResetSequence()` (alexkart) - Bug #17413: Fixed MSSQL tests: `QueryBuilderTest::testGetColumnType()`, `QueryBuilderTest::testResetSequence()` (alexkart)
- Bug #17420: Fixed loading of column default values for MSSQL (alexkart)
2.0.22 July 02, 2019 2.0.22 July 02, 2019

29
framework/db/mssql/ColumnSchema.php

@ -0,0 +1,29 @@
<?php
/**
* @link http://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
namespace yii\db\mssql;
/**
* Class ColumnSchema for MSSQL database
*
* @since 2.0.23
*/
class ColumnSchema extends \yii\db\ColumnSchema
{
/**
* {@inheritdoc}
*/
public function phpTypecast($value)
{
if ($value !== null) {
// convert from MSSQL column_default format, e.g. ('1') -> 1, ('string') -> string
$value = trim($value, "'()");
}
return parent::phpTypecast($value);
}
}

4
framework/db/mssql/Schema.php

@ -30,6 +30,10 @@ class Schema extends \yii\db\Schema implements ConstraintFinderInterface
use ConstraintFinderTrait; use ConstraintFinderTrait;
/** /**
* {@inheritdoc}
*/
public $columnSchemaClass = 'yii\db\mssql\ColumnSchema';
/**
* @var string the default schema used for the current session. * @var string the default schema used for the current session.
*/ */
public $defaultSchema = 'dbo'; public $defaultSchema = 'dbo';

4
tests/framework/db/ActiveRecordTest.php

@ -1166,10 +1166,6 @@ abstract class ActiveRecordTest extends DatabaseTestCase
public function testDefaultValues() public function testDefaultValues()
{ {
if ($this->driverName === 'sqlsrv') {
$this->markTestSkipped('Should be fixed');
}
$model = new Type(); $model = new Type();
$model->loadDefaultValues(); $model->loadDefaultValues();
$this->assertEquals(1, $model->int_col2); $this->assertEquals(1, $model->int_col2);

8
tests/framework/db/SchemaTest.php

@ -495,10 +495,6 @@ abstract class SchemaTest extends DatabaseTestCase
public function testNegativeDefaultValues() public function testNegativeDefaultValues()
{ {
if ($this->driverName === 'sqlsrv') {
$this->markTestSkipped('Should be fixed');
}
/* @var $schema Schema */ /* @var $schema Schema */
$schema = $this->getConnection()->schema; $schema = $this->getConnection()->schema;
@ -513,10 +509,6 @@ abstract class SchemaTest extends DatabaseTestCase
public function testColumnSchema() public function testColumnSchema()
{ {
if ($this->driverName === 'sqlsrv') {
$this->markTestSkipped('Should be fixed');
}
$columns = $this->getExpectedColumns(); $columns = $this->getExpectedColumns();
$table = $this->getConnection(false)->schema->getTableSchema('type', true); $table = $this->getConnection(false)->schema->getTableSchema('type', true);

47
tests/framework/db/mssql/SchemaTest.php

@ -133,4 +133,51 @@ class SchemaTest extends \yiiunit\framework\db\SchemaTest
['dbo.[table.with.special.characters]', 'table.with.special.characters'], ['dbo.[table.with.special.characters]', 'table.with.special.characters'],
]; ];
} }
public function getExpectedColumns()
{
$columns = parent::getExpectedColumns();
unset($columns['enum_col']);
unset($columns['ts_default']);
unset($columns['bit_col']);
unset($columns['json_col']);
$columns['int_col']['dbType'] = 'int';
$columns['int_col2']['dbType'] = 'int';
$columns['tinyint_col']['dbType'] = 'tinyint';
$columns['smallint_col']['dbType'] = 'smallint';
$columns['float_col']['dbType'] = 'decimal';
$columns['float_col']['phpType'] = 'string';
$columns['float_col']['type'] = 'decimal';
$columns['float_col']['scale'] = null;
$columns['float_col2']['dbType'] = 'float';
$columns['float_col2']['phpType'] = 'double';
$columns['float_col2']['type'] = 'float';
$columns['float_col2']['scale'] = null;
$columns['blob_col']['dbType'] = 'varbinary';
$columns['numeric_col']['dbType'] = 'decimal';
$columns['numeric_col']['scale'] = null;
$columns['time']['dbType'] = 'datetime';
$columns['time']['type'] = 'datetime';
$columns['bool_col']['dbType'] = 'tinyint';
$columns['bool_col2']['dbType'] = 'tinyint';
array_walk($columns, static function (&$item) {
$item['enumValues'] = [];
});
array_walk($columns, static function (&$item, $name) {
if (!in_array($name, ['char_col', 'char_col2', 'char_col3'])) {
$item['size'] = null;
}
});
array_walk($columns, static function (&$item, $name) {
if (!in_array($name, ['char_col', 'char_col2', 'char_col3'])) {
$item['precision'] = null;
}
});
return $columns;
}
} }

Loading…
Cancel
Save