From e9f03dc824b72509052db346ca43b7bfb906a35f Mon Sep 17 00:00:00 2001 From: Jonas Regner Date: Sun, 29 Mar 2026 10:33:14 +0200 Subject: [PATCH 1/6] feat(database): allow setting char size --- .../src/QueryStatements/CharStatement.php | 4 ++- .../QueryStatements/CharStatementTest.php | 34 +++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 packages/database/tests/QueryStatements/CharStatementTest.php diff --git a/packages/database/src/QueryStatements/CharStatement.php b/packages/database/src/QueryStatements/CharStatement.php index 56a5d75af..28d974fe7 100644 --- a/packages/database/src/QueryStatements/CharStatement.php +++ b/packages/database/src/QueryStatements/CharStatement.php @@ -11,6 +11,7 @@ { public function __construct( private string $name, + private int $size, private bool $nullable = false, private ?string $default = null, ) {} @@ -18,8 +19,9 @@ public function __construct( public function compile(DatabaseDialect $dialect): string { return sprintf( - '%s CHAR %s %s', + '%s CHAR(%s) %s %s', $dialect->quoteIdentifier($this->name), + $this->size, $this->default !== null ? "DEFAULT '{$this->default}'" : '', $this->nullable ? '' : 'NOT NULL', ); diff --git a/packages/database/tests/QueryStatements/CharStatementTest.php b/packages/database/tests/QueryStatements/CharStatementTest.php new file mode 100644 index 000000000..7cb34f002 --- /dev/null +++ b/packages/database/tests/QueryStatements/CharStatementTest.php @@ -0,0 +1,34 @@ +assertSame($expectedMysql, $statement->compile(DatabaseDialect::MYSQL)); + } +} From dce00ed5be5be6c4da44041d03bcc4d391bf508d Mon Sep 17 00:00:00 2001 From: Jonas Regner Date: Sun, 29 Mar 2026 13:38:12 +0200 Subject: [PATCH 2/6] test(database): add Test attribute --- .../tests/QueryStatements/CharStatementTest.php | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/packages/database/tests/QueryStatements/CharStatementTest.php b/packages/database/tests/QueryStatements/CharStatementTest.php index 7cb34f002..869b3ecb6 100644 --- a/packages/database/tests/QueryStatements/CharStatementTest.php +++ b/packages/database/tests/QueryStatements/CharStatementTest.php @@ -2,22 +2,14 @@ namespace Tempest\Database\Tests\QueryStatements; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; -use Tempest\Database\Builder\FieldDefinition; -use Tempest\Database\Builder\TableDefinition; use Tempest\Database\Config\DatabaseDialect; use Tempest\Database\QueryStatements\CharStatement; -use Tempest\Database\QueryStatements\GroupByStatement; -use Tempest\Database\QueryStatements\HavingStatement; -use Tempest\Database\QueryStatements\JoinStatement; -use Tempest\Database\QueryStatements\OrderByStatement; -use Tempest\Database\QueryStatements\SelectStatement; -use Tempest\Database\QueryStatements\WhereStatement; - -use function Tempest\Support\arr; final class CharStatementTest extends TestCase { + #[Test] public function test_char(): void { $statement = new CharStatement( From 50b34fe8c45b9178d0142a876a30bc22b88ec6a4 Mon Sep 17 00:00:00 2001 From: Jonas Regner Date: Sun, 29 Mar 2026 13:48:57 +0200 Subject: [PATCH 3/6] fix(database): add missing size to char method of CreateTableStatement --- packages/database/src/QueryStatements/CreateTableStatement.php | 3 ++- .../Database/QueryStatements/CreateTableStatementTest.php | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/database/src/QueryStatements/CreateTableStatement.php b/packages/database/src/QueryStatements/CreateTableStatement.php index 81e66153c..cb0842feb 100644 --- a/packages/database/src/QueryStatements/CreateTableStatement.php +++ b/packages/database/src/QueryStatements/CreateTableStatement.php @@ -186,10 +186,11 @@ public function string(string $name, int $length = 255, bool $nullable = false, /** * Adds a `CHAR` column to the table. */ - public function char(string $name, bool $nullable = false, ?string $default = null): self + public function char(string $name, int $size, bool $nullable = false, ?string $default = null): self { $this->statements[] = new CharStatement( name: $name, + size: $size, nullable: $nullable, default: $default, ); diff --git a/tests/Integration/Database/QueryStatements/CreateTableStatementTest.php b/tests/Integration/Database/QueryStatements/CreateTableStatementTest.php index 18d74bb60..0cb2ea5f1 100644 --- a/tests/Integration/Database/QueryStatements/CreateTableStatementTest.php +++ b/tests/Integration/Database/QueryStatements/CreateTableStatementTest.php @@ -34,7 +34,7 @@ public function up(): QueryStatement { return new CreateTableStatement('test_table') ->text('text', default: 'default') - ->char('char', default: 'd') + ->char('char', 7, default: 'default') ->varchar('varchar', default: 'default') ->float('float', default: 0.1) ->integer('integer', default: 1) From ff145e41d0435958093b3920d9cd74b788660f1f Mon Sep 17 00:00:00 2001 From: Jonas Regner Date: Tue, 31 Mar 2026 14:07:24 +0200 Subject: [PATCH 4/6] feat(database): set char default size to 1 --- packages/database/src/QueryStatements/CreateTableStatement.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/database/src/QueryStatements/CreateTableStatement.php b/packages/database/src/QueryStatements/CreateTableStatement.php index cb0842feb..0ed01e17c 100644 --- a/packages/database/src/QueryStatements/CreateTableStatement.php +++ b/packages/database/src/QueryStatements/CreateTableStatement.php @@ -186,7 +186,7 @@ public function string(string $name, int $length = 255, bool $nullable = false, /** * Adds a `CHAR` column to the table. */ - public function char(string $name, int $size, bool $nullable = false, ?string $default = null): self + public function char(string $name, bool $nullable = false, ?string $default = null, int $size = 1): self { $this->statements[] = new CharStatement( name: $name, From 6aff931179958c8c02f5892e6752fc53f2e3f2cf Mon Sep 17 00:00:00 2001 From: Jonas Regner Date: Wed, 1 Apr 2026 09:21:53 +0200 Subject: [PATCH 5/6] test(database): add pgsql assertation --- packages/database/tests/QueryStatements/CharStatementTest.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/database/tests/QueryStatements/CharStatementTest.php b/packages/database/tests/QueryStatements/CharStatementTest.php index 869b3ecb6..deb4643aa 100644 --- a/packages/database/tests/QueryStatements/CharStatementTest.php +++ b/packages/database/tests/QueryStatements/CharStatementTest.php @@ -20,7 +20,9 @@ public function test_char(): void ); $expectedMysql = '`foo` CHAR(36) DEFAULT \'019d38a9-5504-7a16-ab9d-520bbc289ecc\' NOT NULL'; + $expectedPgsql = '"foo" CHAR(36) DEFAULT \'019d38a9-5504-7a16-ab9d-520bbc289ecc\' NOT NULL'; $this->assertSame($expectedMysql, $statement->compile(DatabaseDialect::MYSQL)); + $this->assertSame($expectedMysql, $statement->compile(DatabaseDialect::POSTGRESQL)); } } From d3c793864317fea9314d9c7363a3b8725c96dfe3 Mon Sep 17 00:00:00 2001 From: Jonas Regner Date: Wed, 1 Apr 2026 09:26:13 +0200 Subject: [PATCH 6/6] test(database): fix pgsql assertation --- packages/database/tests/QueryStatements/CharStatementTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/database/tests/QueryStatements/CharStatementTest.php b/packages/database/tests/QueryStatements/CharStatementTest.php index deb4643aa..616e99143 100644 --- a/packages/database/tests/QueryStatements/CharStatementTest.php +++ b/packages/database/tests/QueryStatements/CharStatementTest.php @@ -23,6 +23,6 @@ public function test_char(): void $expectedPgsql = '"foo" CHAR(36) DEFAULT \'019d38a9-5504-7a16-ab9d-520bbc289ecc\' NOT NULL'; $this->assertSame($expectedMysql, $statement->compile(DatabaseDialect::MYSQL)); - $this->assertSame($expectedMysql, $statement->compile(DatabaseDialect::POSTGRESQL)); + $this->assertSame($expectedPgsql, $statement->compile(DatabaseDialect::POSTGRESQL)); } }