From e63735e7fb35c63d17cb70ab132f6464542e59f0 Mon Sep 17 00:00:00 2001 From: darkdef Date: Sun, 5 Feb 2023 18:24:31 +0300 Subject: [PATCH 1/2] Medium and long text support for mysql --- src/Migration/AbstractMigrationBuilder.php | 20 ++++++++++++++++++++ src/Schema/AbstractColumnSchema.php | 2 ++ src/Schema/AbstractColumnSchemaBuilder.php | 2 ++ src/Schema/SchemaInterface.php | 2 ++ tests/AbstractQueryBuilderTest.php | 2 ++ tests/Provider/ColumnTypes.php | 22 ++++++++++++++++++++++ 6 files changed, 50 insertions(+) diff --git a/src/Migration/AbstractMigrationBuilder.php b/src/Migration/AbstractMigrationBuilder.php index 712cadb2b..ec949b744 100644 --- a/src/Migration/AbstractMigrationBuilder.php +++ b/src/Migration/AbstractMigrationBuilder.php @@ -292,6 +292,26 @@ public function text(): ColumnSchemaBuilderInterface return $this->schema->createColumnSchemaBuilder(SchemaInterface::TYPE_TEXT); } + /** + * Creates a medium text column. + * + * @return ColumnSchemaBuilderInterface The column instance which can be further customized. + */ + public function mediumtext(): ColumnSchemaBuilderInterface + { + return $this->schema->createColumnSchemaBuilder(SchemaInterface::TYPE_MEDIUMTEXT); + } + + /** + * Creates a long text column. + * + * @return ColumnSchemaBuilderInterface The column instance which can be further customized. + */ + public function longtext(): ColumnSchemaBuilderInterface + { + return $this->schema->createColumnSchemaBuilder(SchemaInterface::TYPE_LONGTEXT); + } + /** * Creates a time column. * diff --git a/src/Schema/AbstractColumnSchema.php b/src/Schema/AbstractColumnSchema.php index 77412b27e..7578ee79e 100644 --- a/src/Schema/AbstractColumnSchema.php +++ b/src/Schema/AbstractColumnSchema.php @@ -242,6 +242,8 @@ protected function typecast(mixed $value): mixed $this->type, [ SchemaInterface::TYPE_TEXT, + SchemaInterface::TYPE_MEDIUMTEXT, + SchemaInterface::TYPE_LONGTEXT, SchemaInterface::TYPE_STRING, SchemaInterface::TYPE_BINARY, SchemaInterface::TYPE_CHAR, diff --git a/src/Schema/AbstractColumnSchemaBuilder.php b/src/Schema/AbstractColumnSchemaBuilder.php index bdc08e82e..31519662e 100644 --- a/src/Schema/AbstractColumnSchemaBuilder.php +++ b/src/Schema/AbstractColumnSchemaBuilder.php @@ -57,6 +57,8 @@ abstract class AbstractColumnSchemaBuilder implements ColumnSchemaBuilderInterfa SchemaInterface::TYPE_CHAR => self::CATEGORY_STRING, SchemaInterface::TYPE_STRING => self::CATEGORY_STRING, SchemaInterface::TYPE_TEXT => self::CATEGORY_STRING, + SchemaInterface::TYPE_MEDIUMTEXT => self::CATEGORY_STRING, + SchemaInterface::TYPE_LONGTEXT => self::CATEGORY_STRING, SchemaInterface::TYPE_TINYINT => self::CATEGORY_NUMERIC, SchemaInterface::TYPE_SMALLINT => self::CATEGORY_NUMERIC, SchemaInterface::TYPE_INTEGER => self::CATEGORY_NUMERIC, diff --git a/src/Schema/SchemaInterface.php b/src/Schema/SchemaInterface.php index 23cbd72fc..5b40bd305 100644 --- a/src/Schema/SchemaInterface.php +++ b/src/Schema/SchemaInterface.php @@ -59,6 +59,8 @@ interface SchemaInterface extends ConstraintSchemaInterface public const TYPE_CHAR = 'char'; public const TYPE_STRING = 'string'; public const TYPE_TEXT = 'text'; + public const TYPE_MEDIUMTEXT = 'mediumtext'; + public const TYPE_LONGTEXT = 'longtext'; public const TYPE_TINYINT = 'tinyint'; public const TYPE_SMALLINT = 'smallint'; public const TYPE_INTEGER = 'integer'; diff --git a/tests/AbstractQueryBuilderTest.php b/tests/AbstractQueryBuilderTest.php index f09ad5502..fab53cee7 100644 --- a/tests/AbstractQueryBuilderTest.php +++ b/tests/AbstractQueryBuilderTest.php @@ -1525,6 +1525,8 @@ public function testGetColumnType(): void $this->assertSame('char', $qb->getColumnType(SchemaInterface::TYPE_CHAR)); $this->assertSame('string', $qb->getColumnType(SchemaInterface::TYPE_STRING)); $this->assertSame('text', $qb->getColumnType(SchemaInterface::TYPE_TEXT)); + $this->assertSame('mediumtext', $qb->getColumnType(SchemaInterface::TYPE_MEDIUMTEXT)); + $this->assertSame('longtext', $qb->getColumnType(SchemaInterface::TYPE_LONGTEXT)); $this->assertSame('tinyint', $qb->getColumnType(SchemaInterface::TYPE_TINYINT)); $this->assertSame('smallint', $qb->getColumnType(SchemaInterface::TYPE_SMALLINT)); $this->assertSame('integer', $qb->getColumnType(SchemaInterface::TYPE_INTEGER)); diff --git a/tests/Provider/ColumnTypes.php b/tests/Provider/ColumnTypes.php index 3638fd774..26f4050b5 100644 --- a/tests/Provider/ColumnTypes.php +++ b/tests/Provider/ColumnTypes.php @@ -757,6 +757,28 @@ public function getColumnTypes(): array 'sqlsrv' => 'nvarchar(max)', ], ], + [ + SchemaInterface::TYPE_MEDIUMTEXT, + $this->mediumtext(), + [ + 'mysql' => 'mediumtext', + 'pgsql' => 'text', + 'sqlite' => 'text', + 'oci' => 'CLOB', + 'sqlsrv' => 'nvarchar(max)', + ], + ], + [ + SchemaInterface::TYPE_LONGTEXT, + $this->longtext(), + [ + 'mysql' => 'longtext', + 'pgsql' => 'text', + 'sqlite' => 'text', + 'oci' => 'CLOB', + 'sqlsrv' => 'nvarchar(max)', + ], + ], [ SchemaInterface::TYPE_TIME . ' NOT NULL', $this->time()->notNull(), From 7cb84bf90027fffb766b94aaa055bd2035534c1e Mon Sep 17 00:00:00 2001 From: darkdef Date: Sun, 5 Feb 2023 18:29:53 +0300 Subject: [PATCH 2/2] fix --- tests/Schema/ColumnSchemaBuilderTest.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/Schema/ColumnSchemaBuilderTest.php b/tests/Schema/ColumnSchemaBuilderTest.php index 52badf8ba..24e211659 100644 --- a/tests/Schema/ColumnSchemaBuilderTest.php +++ b/tests/Schema/ColumnSchemaBuilderTest.php @@ -143,6 +143,8 @@ public function testGetCategoryMap(): void 'char' => 'string', 'string' => 'string', 'text' => 'string', + 'mediumtext' => 'string', + 'longtext' => 'string', 'tinyint' => 'numeric', 'smallint' => 'numeric', 'integer' => 'numeric',