Browse Source

Fixes #14638: Added `yii\db\SchemaBuilderTrait::tinyInteger()`

tags/2.0.14
Robert Korulczyk 7 years ago committed by Alexander Makarov
parent
commit
df91a9608f
  1. 1
      framework/CHANGELOG.md
  2. 1
      framework/db/ColumnSchemaBuilder.php
  3. 18
      framework/db/Schema.php
  4. 12
      framework/db/SchemaBuilderTrait.php
  5. 1
      framework/db/cubrid/QueryBuilder.php
  6. 1
      framework/db/mssql/QueryBuilder.php
  7. 2
      framework/db/mssql/Schema.php
  8. 1
      framework/db/mysql/QueryBuilder.php
  9. 2
      framework/db/mysql/Schema.php
  10. 1
      framework/db/oci/QueryBuilder.php
  11. 1
      framework/db/pgsql/QueryBuilder.php
  12. 1
      framework/db/sqlite/QueryBuilder.php
  13. 2
      framework/db/sqlite/Schema.php
  14. 2
      tests/data/cubrid.sql
  15. 2
      tests/data/mssql.sql
  16. 2
      tests/data/mysql.sql
  17. 2
      tests/data/oci.sql
  18. 2
      tests/data/postgres.sql
  19. 2
      tests/data/sqlite.sql
  20. 34
      tests/framework/db/QueryBuilderTest.php
  21. 17
      tests/framework/db/SchemaTest.php
  22. 4
      tests/framework/db/cubrid/SchemaTest.php
  23. 5
      tests/framework/db/oci/SchemaTest.php
  24. 5
      tests/framework/db/pgsql/SchemaTest.php

1
framework/CHANGELOG.md

@ -76,6 +76,7 @@ Yii Framework 2 Change Log
- Enh #14488: Added support for X-Forwarded-Host to `yii\web\Request`, fixed `getServerPort()` usage (si294r, samdark)
- Enh #14546: Added `dataDirectory` property into `BaseActiveFixture` (leandrogehlen)
- Enh #14568: Refactored migration templates to use `safeUp()` and `safeDown()` methods (Kolyunya)
- Enh #14638: Added `yii\db\SchemaBuilderTrait::tinyInteger()` (rob006)
- Enh #14643: Added `yii\web\ErrorAction::$layout` property to conveniently set layout from error action config (swods, cebe, samdark)
- Enh #14662: Added support for custom `Content-Type` specification to `yii\web\JsonResponseFormatter` (Kolyunya)
- Enh #14806: Added $placeFooterAfterBody option for GridView (terehru)

1
framework/db/ColumnSchemaBuilder.php

@ -91,6 +91,7 @@ class ColumnSchemaBuilder extends BaseObject
Schema::TYPE_CHAR => self::CATEGORY_STRING,
Schema::TYPE_STRING => self::CATEGORY_STRING,
Schema::TYPE_TEXT => self::CATEGORY_STRING,
Schema::TYPE_TINYINT => self::CATEGORY_NUMERIC,
Schema::TYPE_SMALLINT => self::CATEGORY_NUMERIC,
Schema::TYPE_INTEGER => self::CATEGORY_NUMERIC,
Schema::TYPE_BIGINT => self::CATEGORY_NUMERIC,

18
framework/db/Schema.php

@ -49,6 +49,7 @@ abstract class Schema extends BaseObject
const TYPE_CHAR = 'char';
const TYPE_STRING = 'string';
const TYPE_TEXT = 'text';
const TYPE_TINYINT = 'tinyint';
const TYPE_SMALLINT = 'smallint';
const TYPE_INTEGER = 'integer';
const TYPE_BIGINT = 'bigint';
@ -615,14 +616,15 @@ abstract class Schema extends BaseObject
{
static $typeMap = [
// abstract type => php type
'smallint' => 'integer',
'integer' => 'integer',
'bigint' => 'integer',
'boolean' => 'boolean',
'float' => 'double',
'double' => 'double',
'binary' => 'resource',
'json' => 'array',
self::TYPE_TINYINT => 'integer',
self::TYPE_SMALLINT => 'integer',
self::TYPE_INTEGER => 'integer',
self::TYPE_BIGINT => 'integer',
self::TYPE_BOOLEAN => 'boolean',
self::TYPE_FLOAT => 'double',
self::TYPE_DOUBLE => 'double',
self::TYPE_BINARY => 'resource',
self::TYPE_JSON => 'array',
];
if (isset($typeMap[$column->type])) {
if ($column->type === 'bigint') {

12
framework/db/SchemaBuilderTrait.php

@ -98,6 +98,18 @@ trait SchemaBuilderTrait
}
/**
* Creates a tinyint column. If tinyint is not supported by the DBMS, smallint will be used.
* @param int $length column size or precision definition.
* This parameter will be ignored if not supported by the DBMS.
* @return ColumnSchemaBuilder the column instance which can be further customized.
* @since 2.0.14
*/
public function tinyInteger($length = null)
{
return $this->getDb()->getSchema()->createColumnSchemaBuilder(Schema::TYPE_TINYINT, $length);
}
/**
* Creates a smallint column.
* @param int $length column size or precision definition.
* This parameter will be ignored if not supported by the DBMS.

1
framework/db/cubrid/QueryBuilder.php

@ -32,6 +32,7 @@ class QueryBuilder extends \yii\db\QueryBuilder
Schema::TYPE_CHAR => 'char(1)',
Schema::TYPE_STRING => 'varchar(255)',
Schema::TYPE_TEXT => 'varchar',
Schema::TYPE_TINYINT => 'smallint',
Schema::TYPE_SMALLINT => 'smallint',
Schema::TYPE_INTEGER => 'int',
Schema::TYPE_BIGINT => 'bigint',

1
framework/db/mssql/QueryBuilder.php

@ -30,6 +30,7 @@ class QueryBuilder extends \yii\db\QueryBuilder
Schema::TYPE_CHAR => 'nchar(1)',
Schema::TYPE_STRING => 'nvarchar(255)',
Schema::TYPE_TEXT => 'nvarchar(max)',
Schema::TYPE_TINYINT => 'tinyint',
Schema::TYPE_SMALLINT => 'smallint',
Schema::TYPE_INTEGER => 'int',
Schema::TYPE_BIGINT => 'bigint',

2
framework/db/mssql/Schema.php

@ -45,7 +45,7 @@ class Schema extends \yii\db\Schema implements ConstraintFinderInterface
'decimal' => self::TYPE_DECIMAL,
'smallmoney' => self::TYPE_MONEY,
'int' => self::TYPE_INTEGER,
'tinyint' => self::TYPE_SMALLINT,
'tinyint' => self::TYPE_TINYINT,
'money' => self::TYPE_MONEY,
// approximate numbers
'float' => self::TYPE_FLOAT,

1
framework/db/mysql/QueryBuilder.php

@ -32,6 +32,7 @@ class QueryBuilder extends \yii\db\QueryBuilder
Schema::TYPE_CHAR => 'char(1)',
Schema::TYPE_STRING => 'varchar(255)',
Schema::TYPE_TEXT => 'text',
Schema::TYPE_TINYINT => 'tinyint(3)',
Schema::TYPE_SMALLINT => 'smallint(6)',
Schema::TYPE_INTEGER => 'int(11)',
Schema::TYPE_BIGINT => 'bigint(20)',

2
framework/db/mysql/Schema.php

@ -40,7 +40,7 @@ class Schema extends \yii\db\Schema implements ConstraintFinderInterface
* @var array mapping from physical column types (keys) to abstract column types (values)
*/
public $typeMap = [
'tinyint' => self::TYPE_SMALLINT,
'tinyint' => self::TYPE_TINYINT,
'bit' => self::TYPE_INTEGER,
'smallint' => self::TYPE_SMALLINT,
'mediumint' => self::TYPE_INTEGER,

1
framework/db/oci/QueryBuilder.php

@ -35,6 +35,7 @@ class QueryBuilder extends \yii\db\QueryBuilder
Schema::TYPE_CHAR => 'CHAR(1)',
Schema::TYPE_STRING => 'VARCHAR2(255)',
Schema::TYPE_TEXT => 'CLOB',
Schema::TYPE_TINYINT => 'NUMBER(3)',
Schema::TYPE_SMALLINT => 'NUMBER(5)',
Schema::TYPE_INTEGER => 'NUMBER(10)',
Schema::TYPE_BIGINT => 'NUMBER(20)',

1
framework/db/pgsql/QueryBuilder.php

@ -59,6 +59,7 @@ class QueryBuilder extends \yii\db\QueryBuilder
Schema::TYPE_CHAR => 'char(1)',
Schema::TYPE_STRING => 'varchar(255)',
Schema::TYPE_TEXT => 'text',
Schema::TYPE_TINYINT => 'smallint',
Schema::TYPE_SMALLINT => 'smallint',
Schema::TYPE_INTEGER => 'integer',
Schema::TYPE_BIGINT => 'bigint',

1
framework/db/sqlite/QueryBuilder.php

@ -35,6 +35,7 @@ class QueryBuilder extends \yii\db\QueryBuilder
Schema::TYPE_CHAR => 'char(1)',
Schema::TYPE_STRING => 'varchar(255)',
Schema::TYPE_TEXT => 'text',
Schema::TYPE_TINYINT => 'tinyint',
Schema::TYPE_SMALLINT => 'smallint',
Schema::TYPE_INTEGER => 'integer',
Schema::TYPE_BIGINT => 'bigint',

2
framework/db/sqlite/Schema.php

@ -38,7 +38,7 @@ class Schema extends \yii\db\Schema implements ConstraintFinderInterface
* @var array mapping from physical column types (keys) to abstract column types (values)
*/
public $typeMap = [
'tinyint' => self::TYPE_SMALLINT,
'tinyint' => self::TYPE_TINYINT,
'bit' => self::TYPE_SMALLINT,
'boolean' => self::TYPE_BOOLEAN,
'bool' => self::TYPE_BOOLEAN,

2
tests/data/cubrid.sql

@ -110,6 +110,7 @@ CREATE TABLE null_values (
);
CREATE TABLE "negative_default_values" (
tinyint_col smallint default '-123',
smallint_col smallint default '-123',
int_col int default '-123',
bigint_col bigint default '-123',
@ -121,6 +122,7 @@ CREATE TABLE "negative_default_values" (
CREATE TABLE "type" (
"int_col" int(11) NOT NULL,
"int_col2" int(11) DEFAULT '1',
"tinyint_col" smallint DEFAULT '1',
"smallint_col" smallint DEFAULT '1',
"char_col" char(100) NOT NULL,
"char_col2" varchar(100) DEFAULT 'something',

2
tests/data/mssql.sql

@ -106,6 +106,7 @@ CREATE TABLE [dbo].[null_values] (
);
CREATE TABLE [dbo].[negative_default_values] (
[tinyint_col] [tinyint] DEFAULT '-123',
[smallint_col] [tinyint] DEFAULT '-123',
[int_col] [smallint] DEFAULT '-123',
[bigint_col] [int] DEFAULT '-123',
@ -116,6 +117,7 @@ CREATE TABLE [dbo].[negative_default_values] (
CREATE TABLE [dbo].[type] (
[int_col] [int] NOT NULL,
[int_col2] [int] DEFAULT '1',
[tinyint_col] [tinyint] DEFAULT '1',
[smallint_col] [smallint] DEFAULT '1',
[char_col] [char](100) NOT NULL,
[char_col2] [varchar](100) DEFAULT 'something',

2
tests/data/mysql.sql

@ -123,6 +123,7 @@ CREATE TABLE null_values (
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `negative_default_values` (
`tinyint_col` tinyint default '-123',
`smallint_col` smallint default '-123',
`int_col` integer default '-123',
`bigint_col` bigint default '-123',
@ -133,6 +134,7 @@ CREATE TABLE `negative_default_values` (
CREATE TABLE `type` (
`int_col` integer NOT NULL,
`int_col2` integer DEFAULT '1',
`tinyint_col` tinyint(3) DEFAULT '1',
`smallint_col` smallint(1) DEFAULT '1',
`char_col` char(100) NOT NULL,
`char_col2` varchar(100) DEFAULT 'something',

2
tests/data/oci.sql

@ -142,6 +142,7 @@ CREATE TABLE "null_values" (
CREATE SEQUENCE "null_values_SEQ";
CREATE TABLE "negative_default_values" (
"tinyint_col" number(3) default -123,
"smallint_col" smallint default -123,
"int_col" integer default -123,
"bigint_col" integer default -123,
@ -152,6 +153,7 @@ CREATE TABLE "negative_default_values" (
CREATE TABLE "type" (
"int_col" integer NOT NULL,
"int_col2" integer DEFAULT 1,
"tinyint_col" number(3) DEFAULT 1,
"smallint_col" smallint DEFAULT 1,
"char_col" char(100) NOT NULL,
"char_col2" varchar2(100) DEFAULT 'something',

2
tests/data/postgres.sql

@ -126,6 +126,7 @@ CREATE TABLE "null_values" (
CREATE TABLE "type" (
int_col integer NOT NULL,
int_col2 integer DEFAULT '1',
tinyint_col smallint DEFAULT '1',
smallint_col smallint DEFAULT '1',
char_col char(100) NOT NULL,
char_col2 varchar(100) DEFAULT 'something',
@ -155,6 +156,7 @@ CREATE TABLE "bool_values" (
);
CREATE TABLE "negative_default_values" (
tinyint_col smallint default '-123',
smallint_col smallint default '-123',
int_col integer default '-123',
bigint_col bigint default '-123',

2
tests/data/sqlite.sql

@ -105,6 +105,7 @@ CREATE TABLE "null_values" (
);
CREATE TABLE "negative_default_values" (
tinyint_col tinyint default '-123',
smallint_col integer default '-123',
int_col integer default '-123',
bigint_col integer default '-123',
@ -115,6 +116,7 @@ CREATE TABLE "negative_default_values" (
CREATE TABLE "type" (
int_col INTEGER NOT NULL,
int_col2 INTEGER DEFAULT '1',
tinyint_col TINYINT(3) DEFAULT '1',
smallint_col SMALLINT(1) DEFAULT '1',
char_col char(100) NOT NULL,
char_col2 varchar(100) DEFAULT 'something',

34
tests/framework/db/QueryBuilderTest.php

@ -639,6 +639,40 @@ abstract class QueryBuilderTest extends DatabaseTestCase
],
],
[
Schema::TYPE_TINYINT . '(2)',
$this->tinyInteger(2),
[
'mysql' => 'tinyint(2)',
'postgres' => 'smallint',
'sqlite' => 'tinyint',
'oci' => 'NUMBER(2)',
'sqlsrv' => 'tinyint',
'cubrid' => 'smallint',
],
],
[
Schema::TYPE_TINYINT . ' UNSIGNED',
$this->tinyInteger()->unsigned(),
[
'mysql' => 'tinyint(3) UNSIGNED',
'postgres' => 'smallint UNSIGNED',
'sqlite' => 'tinyint UNSIGNED',
'cubrid' => 'smallint UNSIGNED',
],
],
[
Schema::TYPE_TINYINT,
$this->tinyInteger(),
[
'mysql' => 'tinyint(3)',
'postgres' => 'smallint',
'sqlite' => 'tinyint',
'oci' => 'NUMBER(3)',
'sqlsrv' => 'smallint',
'cubrid' => 'smallint',
],
],
[
Schema::TYPE_SMALLINT . '(8)',
$this->smallInteger(8),
[

17
tests/framework/db/SchemaTest.php

@ -274,6 +274,18 @@ abstract class SchemaTest extends DatabaseTestCase
'scale' => null,
'defaultValue' => 1,
],
'tinyint_col' => [
'type' => 'tinyint',
'dbType' => 'tinyint(3)',
'phpType' => 'integer',
'allowNull' => true,
'autoIncrement' => false,
'enumValues' => null,
'size' => 3,
'precision' => 3,
'scale' => null,
'defaultValue' => 1,
],
'smallint_col' => [
'type' => 'smallint',
'dbType' => 'smallint(1)',
@ -395,7 +407,7 @@ abstract class SchemaTest extends DatabaseTestCase
'defaultValue' => '2002-01-01 00:00:00',
],
'bool_col' => [
'type' => 'smallint',
'type' => 'tinyint',
'dbType' => 'tinyint(1)',
'phpType' => 'integer',
'allowNull' => false,
@ -407,7 +419,7 @@ abstract class SchemaTest extends DatabaseTestCase
'defaultValue' => null,
],
'bool_col2' => [
'type' => 'smallint',
'type' => 'tinyint',
'dbType' => 'tinyint(1)',
'phpType' => 'integer',
'allowNull' => true,
@ -463,6 +475,7 @@ abstract class SchemaTest extends DatabaseTestCase
$schema = $this->getConnection()->schema;
$table = $schema->getTableSchema('negative_default_values');
$this->assertEquals(-123, $table->getColumn('tinyint_col')->defaultValue);
$this->assertEquals(-123, $table->getColumn('smallint_col')->defaultValue);
$this->assertEquals(-123, $table->getColumn('int_col')->defaultValue);
$this->assertEquals(-123, $table->getColumn('bigint_col')->defaultValue);

4
tests/framework/db/cubrid/SchemaTest.php

@ -56,6 +56,10 @@ class SchemaTest extends \yiiunit\framework\db\SchemaTest
$columns['int_col2']['dbType'] = 'integer';
$columns['int_col2']['size'] = null;
$columns['int_col2']['precision'] = null;
$columns['tinyint_col']['smallint'] = 'short';
$columns['tinyint_col']['dbType'] = 'short';
$columns['tinyint_col']['size'] = null;
$columns['tinyint_col']['precision'] = null;
$columns['smallint_col']['dbType'] = 'short';
$columns['smallint_col']['size'] = null;
$columns['smallint_col']['precision'] = null;

5
tests/framework/db/oci/SchemaTest.php

@ -33,6 +33,11 @@ class SchemaTest extends \yiiunit\framework\db\SchemaTest
$columns['int_col2']['size'] = 22;
$columns['int_col2']['precision'] = null;
$columns['int_col2']['scale'] = 0;
$columns['tinyint_col']['dbType'] = 'NUMBER';
$columns['tinyint_col']['type'] = 'integer';
$columns['tinyint_col']['size'] = 22;
$columns['tinyint_col']['precision'] = 3;
$columns['tinyint_col']['scale'] = 0;
$columns['smallint_col']['dbType'] = 'NUMBER';
$columns['smallint_col']['type'] = 'integer';
$columns['smallint_col']['size'] = 22;

5
tests/framework/db/pgsql/SchemaTest.php

@ -36,6 +36,11 @@ class SchemaTest extends \yiiunit\framework\db\SchemaTest
$columns['int_col2']['size'] = null;
$columns['int_col2']['precision'] = 32;
$columns['int_col2']['scale'] = 0;
$columns['tinyint_col']['type'] = 'smallint';
$columns['tinyint_col']['dbType'] = 'int2';
$columns['tinyint_col']['size'] = null;
$columns['tinyint_col']['precision'] = 16;
$columns['tinyint_col']['scale'] = 0;
$columns['smallint_col']['dbType'] = 'int2';
$columns['smallint_col']['size'] = null;
$columns['smallint_col']['precision'] = 16;

Loading…
Cancel
Save