Skip to content

fix(ddlmod): parse parameterized types with precision like decimal(10,2) - #245

Open
h2zi wants to merge 1 commit into
go-gorm:masterfrom
h2zi:fix-decimal-precision
Open

fix(ddlmod): parse parameterized types with precision like decimal(10,2)#245
h2zi wants to merge 1 commit into
go-gorm:masterfrom
h2zi:fix-decimal-precision

Conversation

@h2zi

@h2zi h2zi commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

Symptom

For a column declared decimal(10,2), ColumnTypes() reports ColumnType() == "decimal(10" — the type group of columnRegexp ([\w\(\)\d]+) has no comma, so the match stops inside the parameter list and the scale is lost entirely (related: #121).

Fix

  • The type group now captures the whole parenthesized parameter list: \w+(?:\([^)]*\))?.
  • Size parsing distinguishes a single length from precision+scale: varchar(10)Length() == 10 as before, decimal(10,2) (and decimal(10, 2)) → DecimalSize() == (10, 2), with DataType() == "decimal" and the full ColumnType() preserved.

Covered by TestParseDDL_TypePrecision.

🤖 Generated with Claude Code


Merge order (this batch: #241#242#243#244#245#246, plus #234 from the previous batch): all seven are functionally independent and merge cleanly in any order. Several append tests to the same test files, so whichever merges later may show a trivial append-only conflict in migrator_test.go/ddlmod_test.go — I'll rebase the remaining ones promptly after each merge, as before.

The type group of columnRegexp had no comma, so `decimal(10,2)` was
truncated to `decimal(10` in ColumnType(), and the scale was lost.
The type group now takes the whole parenthesized parameter list, and
the size parsing distinguishes a single length (varchar(10) -> Length)
from precision and scale (decimal(10,2) -> DecimalSize/Scale), spaces
after the comma included.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR fixes SQLite DDL parsing so parameterized column types that include commas (e.g. decimal(10,2)) are captured and interpreted correctly by the migrator’s ColumnTypes()/ColumnType()/size helpers.

Changes:

  • Updates columnRegexp to capture a full parenthesized type parameter list (including commas) instead of truncating at the first comma.
  • Replaces the previous numeric-suffix extraction with a dedicated typeSizeRegexp that parses either length or precision,scale.
  • Adds TestParseDDL_TypePrecision to validate decimal(10,2), decimal(10, 2), and varchar(25) behavior, including preservation of full ColumnType().

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.

File Description
ddlmod.go Improves type tokenization and parses (len) vs (precision,scale) using a dedicated regexp.
ddlmod_test.go Adds a regression test ensuring decimal precision/scale and full column type strings are preserved.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants