From 7b162c71619878d9d96c457d220fd8e6b5cce2d4 Mon Sep 17 00:00:00 2001 From: hutiefang76 <137664623+hutiefang76@users.noreply.github.com> Date: Tue, 30 Jun 2026 23:53:44 +0800 Subject: [PATCH] fix(metadata): map PostgreSQL money to decimal --- .../metadata/convert/PostgreSqlTypeConvert.java | 6 +++--- .../metadata/driver/PostgreSqlDriverTest.java | 17 +++++++++++++++++ 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/dinky-metadata/dinky-metadata-postgresql/src/main/java/org/dinky/metadata/convert/PostgreSqlTypeConvert.java b/dinky-metadata/dinky-metadata-postgresql/src/main/java/org/dinky/metadata/convert/PostgreSqlTypeConvert.java index a0afe4cb72..b122a8ff6c 100644 --- a/dinky-metadata/dinky-metadata-postgresql/src/main/java/org/dinky/metadata/convert/PostgreSqlTypeConvert.java +++ b/dinky-metadata/dinky-metadata-postgresql/src/main/java/org/dinky/metadata/convert/PostgreSqlTypeConvert.java @@ -39,9 +39,9 @@ public ColumnType convert(Column column) { boolean isNullable = !column.isKeyFlag() && column.isNullable(); final LogicalTypeParam logicalTypeParam = LogicalTypeParam.of(isNullable, length, column.getPrecision(), column.getScale()); - if (type.contains("numeric") || type.contains("decimal")) { - int intValue = column.getPrecision().intValue(); - if (intValue > 38) { + if (type.contains("numeric") || type.contains("decimal") || type.contains("money")) { + Integer precision = column.getPrecision(); + if (Asserts.isNotNull(precision) && precision > 38) { return ColumnType.of(DataTypes.STRING, DataTypes.STRING.copyLogicalType(logicalTypeParam)); } return ColumnType.of(DataTypes.DECIMAL, DataTypes.DECIMAL.copyLogicalType(logicalTypeParam)); diff --git a/dinky-metadata/dinky-metadata-postgresql/src/test/java/org/dinky/metadata/driver/PostgreSqlDriverTest.java b/dinky-metadata/dinky-metadata-postgresql/src/test/java/org/dinky/metadata/driver/PostgreSqlDriverTest.java index 3b4ec088ca..0394e93247 100644 --- a/dinky-metadata/dinky-metadata-postgresql/src/test/java/org/dinky/metadata/driver/PostgreSqlDriverTest.java +++ b/dinky-metadata/dinky-metadata-postgresql/src/test/java/org/dinky/metadata/driver/PostgreSqlDriverTest.java @@ -23,7 +23,9 @@ import org.dinky.data.model.Column; import org.dinky.data.model.Table; +import org.dinky.data.types.ColumnType; import org.dinky.data.types.DataTypes; +import org.dinky.metadata.convert.PostgreSqlTypeConvert; import java.util.ArrayList; import java.util.List; @@ -145,4 +147,19 @@ void getCreateTableSql() { + "COMMENT ON COLUMN \"public\".\"user\".\"register_time\" IS '注册时间';\n"; assertEquals(expect, tableDDL); } + + @Test + void convertMoneyTypeToDecimal() { + Column moneyColumn = Column.builder() + .name("balance") + .type("money") + .precision(19) + .scale(2) + .isNullable(true) + .build(); + + ColumnType columnType = new PostgreSqlTypeConvert().convert(moneyColumn); + + assertEquals(DataTypes.DECIMAL, columnType.getValue()); + } }