packages/sql-fixture/tests/Unit/Platform/MySql/Schema/ColumnParserTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Platform\MySql\Schema;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\TestCase;
9use SqlFixture\Platform\MySql\Schema\ColumnParser as Subject;
10
11#[CoversClass(Subject::class)]
12#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFixture\Platform\MySql\Schema\DefaultExpression::class)]
13#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFixture\Platform\MySql\Schema\TypeParameters::class)]
14#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFixture\Schema\ColumnDefinition::class)]
15#[\PHPUnit\Framework\Attributes\UsesClass(\SqlFixture\Schema\TypeShape::class)]
16final class ColumnParserTest extends TestCase
17{
18 public function testParseColumnDefinitionPreservesFlagsAndDimensions(): void
19 {
20 $sql = 'CREATE TABLE users (id INT NOT NULL PRIMARY KEY, amount DECIMAL(8, 2) UNSIGNED DEFAULT 12.5)';
21 $parser = new \PhpMyAdmin\SqlParser\Parser($sql);
22 $statement = $parser->statements[0];
23 self::assertInstanceOf(\PhpMyAdmin\SqlParser\Statements\CreateStatement::class, $statement);
24 self::assertIsArray($statement->fields);
25 $column = (new Subject())->parseColumnDefinition($statement->fields[1], 'amount', []);
26 self::assertNotNull($column);
27 self::assertSame('DECIMAL', $column->type);
28 self::assertTrue($column->unsigned);
29 self::assertSame(8, $column->precision);
30 self::assertSame(2, $column->scale);
31 self::assertSame(12.5, $column->default);
32 }
33}
34