diff --git a/.github/workflows/mutation.yml b/.github/workflows/mutation.yml index 5f2fd11..4f33fe7 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/CHANGELOG.md b/CHANGELOG.md index bfe834c..3763e99 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 6aefed1..c3d178b 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] ?? ''; @@ -57,6 +55,31 @@ 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 + { + 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 => [], + }; } }