Merge pull request #20061 from terabytesoftw/revert-20045

Revert 20045.
This commit is contained in:
Bizley
2023-11-02 12:44:44 +01:00
committed by GitHub
4 changed files with 1 additions and 256 deletions

View File

@ -3,7 +3,6 @@ Yii Framework 2 Change Log
2.0.50 under development
------------------------
- Bug #20045: Fix type `boolean` in `MySQL` (terabytesoftw)
- Bug #20040: Fix type `boolean` in `MSSQL` (terabytesoftw)
- Bug #20005: Fix `yii\console\controllers\ServeController` to specify the router script (terabytesoftw)
- Bug #19060: Fix `yii\widgets\Menu` bug when using Closure for active item and adding additional tests in `tests\framework\widgets\MenuTest` (atrandafir)

View File

@ -279,7 +279,7 @@ SQL;
if (isset($values[1])) {
$column->scale = (int) $values[1];
}
if ($column->size === 1 && ($type === 'tinyint' || $type === 'bit')) {
if ($column->size === 1 && $type === 'bit') {
$column->type = 'boolean';
} elseif ($type === 'bit') {
if ($column->size > 32) {

View File

@ -228,11 +228,6 @@ SQL;
]
);
$columns['bool_col']['type'] = 'boolean';
$columns['bool_col']['phpType'] = 'boolean';
$columns['bool_col2']['type'] = 'boolean';
$columns['bool_col2']['phpType'] = 'boolean';
if (version_compare($version, '5.7', '<')) {
$columns['int_col3']['phpType'] = 'string';
$columns['json_col']['type'] = 'text';

View File

@ -1,249 +0,0 @@
<?php
/**
* @link https://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license https://www.yiiframework.com/license/
*/
namespace yiiunit\framework\db\mysql\type;
use yii\db\mysql\Schema;
use yiiunit\framework\db\DatabaseTestCase;
/**
* @group db
* @group mysql
*/
class BooleanTest extends DatabaseTestCase
{
protected $driverName = 'mysql';
public function testBoolean()
{
$db = $this->getConnection(true);
$schema = $db->getSchema();
$tableName = '{{%boolean}}';
if ($db->getTableSchema($tableName)) {
$db->createCommand()->dropTable($tableName)->execute();
}
$db->createCommand()->createTable(
$tableName,
[
'id' => $schema->createColumnSchemaBuilder(Schema::TYPE_PK),
'bool_col_tinyint' => $schema->createColumnSchemaBuilder(Schema::TYPE_BOOLEAN),
'bool_col_bit' => $schema->createColumnSchemaBuilder('bit', 1),
]
)->execute();
// test type `boolean`
$columnBoolColTinyint = $db->getTableSchema($tableName)->getColumn('bool_col_tinyint');
$this->assertSame('boolean', $columnBoolColTinyint->phpType);
$columnBoolColBit = $db->getTableSchema($tableName)->getColumn('bool_col_bit');
$this->assertSame('boolean', $columnBoolColBit->phpType);
// test value `false`
$db->createCommand()->insert($tableName, ['bool_col_tinyint' => false, 'bool_col_bit' => false])->execute();
$boolValues = $db->createCommand("SELECT * FROM $tableName WHERE id = 1")->queryOne();
$this->assertEquals(0, $boolValues['bool_col_tinyint']);
$this->assertEquals(0, $boolValues['bool_col_bit']);
// test php typecast
$phpTypeCastBoolColTinyint = $columnBoolColTinyint->phpTypecast($boolValues['bool_col_tinyint']);
$this->assertFalse($phpTypeCastBoolColTinyint);
$phpTypeCastBoolColBit = $columnBoolColBit->phpTypecast($boolValues['bool_col_bit']);
$this->assertFalse($phpTypeCastBoolColBit);
// test value `true`
$db->createCommand()->insert($tableName, ['bool_col_tinyint' => true, 'bool_col_bit' => true])->execute();
$boolValues = $db->createCommand("SELECT * FROM $tableName WHERE id = 2")->queryOne();
$this->assertEquals(1, $boolValues['bool_col_tinyint']);
$this->assertEquals(1, $boolValues['bool_col_bit']);
// test php typecast
$phpTypeCastBoolColTinyint = $columnBoolColTinyint->phpTypecast($boolValues['bool_col_tinyint']);
$this->assertTrue($phpTypeCastBoolColTinyint);
$phpTypeCastBoolColBit = $columnBoolColBit->phpTypecast($boolValues['bool_col_bit']);
$this->assertTrue($phpTypeCastBoolColBit);
}
public function testBooleanWithValueInteger()
{
$db = $this->getConnection(true);
$schema = $db->getSchema();
$tableName = '{{%boolean}}';
if ($db->getTableSchema($tableName)) {
$db->createCommand()->dropTable($tableName)->execute();
}
$db->createCommand()->createTable(
$tableName,
[
'id' => $schema->createColumnSchemaBuilder(Schema::TYPE_PK),
'bool_col_tinyint' => $schema->createColumnSchemaBuilder(Schema::TYPE_BOOLEAN),
'bool_col_bit' => $schema->createColumnSchemaBuilder('bit', 1),
]
)->execute();
// test type `boolean`
$columnBoolColTinyint = $db->getTableSchema($tableName)->getColumn('bool_col_tinyint');
$this->assertSame('boolean', $columnBoolColTinyint->phpType);
$columnBoolColBit = $db->getTableSchema($tableName)->getColumn('bool_col_bit');
$this->assertSame('boolean', $columnBoolColBit->phpType);
// test value `0`
$db->createCommand()->insert($tableName, ['bool_col_tinyint' => 0, 'bool_col_bit' => 0])->execute();
$boolValues = $db->createCommand("SELECT * FROM $tableName WHERE id = 1")->queryOne();
$this->assertEquals(0, $boolValues['bool_col_tinyint']);
$this->assertEquals(0, $boolValues['bool_col_bit']);
// test php typecast
$phpTypeCastBoolColTinyint = $columnBoolColTinyint->phpTypecast($boolValues['bool_col_tinyint']);
$this->assertFalse($phpTypeCastBoolColTinyint);
$phpTypeCastBoolColBit = $columnBoolColBit->phpTypecast($boolValues['bool_col_bit']);
$this->assertFalse($phpTypeCastBoolColBit);
// test value `1`
$db->createCommand()->insert($tableName, ['bool_col_tinyint' => 1, 'bool_col_bit' => 1])->execute();
$boolValues = $db->createCommand("SELECT * FROM $tableName WHERE id = 2")->queryOne();
$this->assertEquals(1, $boolValues['bool_col_tinyint']);
$this->assertEquals(1, $boolValues['bool_col_bit']);
// test php typecast
$phpTypeCastBoolColTinyint = $columnBoolColTinyint->phpTypecast($boolValues['bool_col_tinyint']);
$this->assertTrue($phpTypeCastBoolColTinyint);
$phpTypeCastBoolColBit = $columnBoolColBit->phpTypecast($boolValues['bool_col_bit']);
$this->assertTrue($phpTypeCastBoolColBit);
}
public function testBooleanWithValueNegative()
{
$db = $this->getConnection(true);
$schema = $db->getSchema();
$tableName = '{{%boolean}}';
if ($db->getTableSchema($tableName)) {
$db->createCommand()->dropTable($tableName)->execute();
}
$db->createCommand()->createTable(
$tableName,
[
'id' => $schema->createColumnSchemaBuilder(Schema::TYPE_PK),
'bool_col_tinyint' => $schema->createColumnSchemaBuilder(Schema::TYPE_BOOLEAN),
'bool_col_bit' => $schema->createColumnSchemaBuilder('bit', 1),
]
)->execute();
// test type `boolean`
$columnBoolColTinyint = $db->getTableSchema($tableName)->getColumn('bool_col_tinyint');
$this->assertSame('boolean', $columnBoolColTinyint->phpType);
$columnBoolColBit = $db->getTableSchema($tableName)->getColumn('bool_col_bit');
$this->assertSame('boolean', $columnBoolColBit->phpType);
// test value `-1`
$db->createCommand()->insert($tableName, ['bool_col_tinyint' => -1, 'bool_col_bit' => -1])->execute();
$boolValues = $db->createCommand("SELECT * FROM $tableName WHERE id = 1")->queryOne();
$this->assertEquals(1, $boolValues['bool_col_tinyint']);
$this->assertEquals(1, $boolValues['bool_col_bit']);
// test php typecast
$phpTypeCastBoolColTinyint = $columnBoolColTinyint->phpTypecast($boolValues['bool_col_tinyint']);
$this->assertTrue($phpTypeCastBoolColTinyint);
$phpTypeCastBoolColBit = $columnBoolColBit->phpTypecast($boolValues['bool_col_bit']);
$this->assertTrue($phpTypeCastBoolColBit);
}
public function testBooleanWithValueNull()
{
$db = $this->getConnection(true);
$schema = $db->getSchema();
$tableName = '{{%boolean}}';
if ($db->getTableSchema($tableName)) {
$db->createCommand()->dropTable($tableName)->execute();
}
$db->createCommand()->createTable(
$tableName,
[
'id' => $schema->createColumnSchemaBuilder(Schema::TYPE_PK),
'bool_col_tinyint' => $schema->createColumnSchemaBuilder(Schema::TYPE_BOOLEAN),
'bool_col_bit' => $schema->createColumnSchemaBuilder('bit', 1),
]
)->execute();
// test type `boolean`
$columnBoolColTinyint = $db->getTableSchema($tableName)->getColumn('bool_col_tinyint');
$this->assertSame('boolean', $columnBoolColTinyint->phpType);
$columnBoolColBit = $db->getTableSchema($tableName)->getColumn('bool_col_bit');
$this->assertSame('boolean', $columnBoolColBit->phpType);
// test value `null`
$db->createCommand()->insert($tableName, ['bool_col_tinyint' => null, 'bool_col_bit' => null])->execute();
$boolValues = $db->createCommand("SELECT * FROM $tableName WHERE id = 1")->queryOne();
$this->assertNull($boolValues['bool_col_tinyint']);
$this->assertNull($boolValues['bool_col_bit']);
// test php typecast
$phpTypeCastBoolColTinyint = $columnBoolColTinyint->phpTypecast($boolValues['bool_col_tinyint']);
$this->assertNull($phpTypeCastBoolColTinyint);
$phpTypeCastBoolColBit = $columnBoolColBit->phpTypecast($boolValues['bool_col_bit']);
$this->assertNull($phpTypeCastBoolColBit);
}
public function testBooleanWithValueOverflow()
{
$db = $this->getConnection(true);
$schema = $db->getSchema();
$tableName = '{{%boolean}}';
if ($db->getTableSchema($tableName)) {
$db->createCommand()->dropTable($tableName)->execute();
}
$db->createCommand()->createTable(
$tableName,
[
'id' => $schema->createColumnSchemaBuilder(Schema::TYPE_PK),
'bool_col_tinyint' => $schema->createColumnSchemaBuilder(Schema::TYPE_BOOLEAN),
'bool_col_bit' => $schema->createColumnSchemaBuilder('bit', 1),
]
)->execute();
// test type `boolean`
$columnBoolColTinyint = $db->getTableSchema($tableName)->getColumn('bool_col_tinyint');
$this->assertSame('boolean', $columnBoolColTinyint->phpType);
$columnBoolColBit = $db->getTableSchema($tableName)->getColumn('bool_col_bit');
$this->assertSame('boolean', $columnBoolColBit->phpType);
// test value `2`
$db->createCommand()->insert($tableName, ['bool_col_tinyint' => 2, 'bool_col_bit' => 2])->execute();
$boolValues = $db->createCommand("SELECT * FROM $tableName WHERE id = 1")->queryOne();
$this->assertEquals(1, $boolValues['bool_col_tinyint']);
$this->assertEquals(1, $boolValues['bool_col_bit']);
// test php typecast
$phpTypeCastBoolColTinyint = $columnBoolColTinyint->phpTypecast($boolValues['bool_col_tinyint']);
$this->assertTrue($phpTypeCastBoolColTinyint);
$phpTypeCastBoolColBit = $columnBoolColBit->phpTypecast($boolValues['bool_col_bit']);
$this->assertTrue($phpTypeCastBoolColBit);
}
}