From 6273191274a709dd8487798fdd3bb784b651d7fb Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Wed, 26 Nov 2025 00:07:23 +0300 Subject: [PATCH 1/2] Refactor `ColumnDefinitionParser` --- CHANGELOG.md | 1 + src/Column/ColumnDefinitionParser.php | 31 +++++++++++++++++++++------ 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bfe834c3..3763e993 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -64,6 +64,7 @@ - Enh #359: Update `DMLQueryBuilder::update()` method to adapt changes in `yiisoft/db` (@rustamwin) - Enh #373: Adapt to `DQLQueryBuilderInterface::buildWithQueries()` signature changes in `yiisoft/db` package (@vjik) - Chg #378: Throw exception on "unsigned" column usage (@vjik) +- Chg #381: Refactor `ColumnDefinitionParser` (@vjik) ## 1.3.0 March 21, 2024 diff --git a/src/Column/ColumnDefinitionParser.php b/src/Column/ColumnDefinitionParser.php index 6aefed1c..abd10bb2 100644 --- a/src/Column/ColumnDefinitionParser.php +++ b/src/Column/ColumnDefinitionParser.php @@ -4,6 +4,8 @@ namespace Yiisoft\Db\Oracle\Column; +use Yiisoft\Db\Syntax\AbstractColumnDefinitionParser; + use function preg_match; use function preg_replace; use function strlen; @@ -13,7 +15,7 @@ /** * Parses column definition string. For example, `string(255)` or `int unsigned`. */ -final class ColumnDefinitionParser extends \Yiisoft\Db\Syntax\ColumnDefinitionParser +final class ColumnDefinitionParser extends AbstractColumnDefinitionParser { private const TYPE_PATTERN = '/^(' . 'timestamp\s*(?:\((\d+)\))? with(?: local)? time zone' @@ -37,11 +39,7 @@ public function parse(string $definition): array $typeDetails = $matches[6] ?? $matches[2] ?? ''; if ($typeDetails !== '') { - if ($type === 'enum') { - $info += $this->enumInfo($typeDetails); - } else { - $info += $this->sizeInfo($typeDetails); - } + $info += $this->parseSizeInfo($typeDetails); } $scale = $matches[5] ?? $matches[3] ?? ''; @@ -59,4 +57,25 @@ public function parse(string $definition): array return $info + $this->extraInfo($extra); } + + protected function parseTypeParams(string $type, string $params): array + { + return match ($type) { + 'char', + 'nchar', + 'character', + 'varchar', + 'varchar2', + 'nvarchar2', + 'raw', + 'number', + 'float', + 'timestamp', + 'timestamp with time zone', + 'timestamp with local time zone', + 'interval day to second', + 'interval year to month' => $this->parseSizeInfo($params), + default => [], + }; + } } From f875e9c10e2f1a1a8a42eecb7525c61304076c59 Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Wed, 26 Nov 2025 00:30:45 +0300 Subject: [PATCH 2/2] fix --- .github/workflows/mutation.yml | 2 +- src/Column/ColumnDefinitionParser.php | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/mutation.yml b/.github/workflows/mutation.yml index 5f2fd116..4f33fe7c 100644 --- a/.github/workflows/mutation.yml +++ b/.github/workflows/mutation.yml @@ -74,6 +74,6 @@ jobs: - name: Run infection. run: | - vendor/bin/roave-infection-static-analysis-plugin --threads=2 --ignore-msi-with-no-mutations --only-covered + vendor/bin/roave-infection-static-analysis-plugin --threads=2 --ignore-msi-with-no-mutations env: STRYKER_DASHBOARD_API_KEY: ${{ secrets.STRYKER_DASHBOARD_API_KEY }} diff --git a/src/Column/ColumnDefinitionParser.php b/src/Column/ColumnDefinitionParser.php index abd10bb2..c3d178b6 100644 --- a/src/Column/ColumnDefinitionParser.php +++ b/src/Column/ColumnDefinitionParser.php @@ -55,7 +55,11 @@ public function parse(string $definition): array $extra = substr($definition, strlen($matches[0])); - return $info + $this->extraInfo($extra); + if ($extra !== '') { + $info += $this->extraInfo($extra); + } + + return $info; } protected function parseTypeParams(string $type, string $params): array