From 67b04f5635301ca6953cdc3b79589cc856955ea3 Mon Sep 17 00:00:00 2001 From: zipg Date: Thu, 16 Jul 2026 17:30:34 +0800 Subject: [PATCH] fix(kingbase): omit invalid varchar length in exported DDL --- .../src/main/java/com/dbx/agent/DdlBuilder.java | 5 +++-- .../dbx/agent/kingbase/KingbaseAgentTest.java | 17 +++++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/agents/common/src/main/java/com/dbx/agent/DdlBuilder.java b/agents/common/src/main/java/com/dbx/agent/DdlBuilder.java index 537904589f..222d233a10 100644 --- a/agents/common/src/main/java/com/dbx/agent/DdlBuilder.java +++ b/agents/common/src/main/java/com/dbx/agent/DdlBuilder.java @@ -218,8 +218,9 @@ public final class DdlBuilder { private static String columnTypeSql(ColumnInfo column) { String type = column.getData_type(); String normalized = type.toLowerCase(Locale.ROOT); - if (isCharacterType(normalized) && column.getCharacter_maximum_length() != null) { - return type + "(" + column.getCharacter_maximum_length() + ")"; + Integer characterLength = column.getCharacter_maximum_length(); + if (isCharacterType(normalized) && characterLength != null && characterLength > 0) { + return type + "(" + characterLength + ")"; } if (isNumericType(normalized) && column.getNumeric_precision() != null) { if (column.getNumeric_scale() != null) { diff --git a/agents/drivers/kingbase/src/test/java/com/dbx/agent/kingbase/KingbaseAgentTest.java b/agents/drivers/kingbase/src/test/java/com/dbx/agent/kingbase/KingbaseAgentTest.java index 58ade7266f..a9b6204c10 100644 --- a/agents/drivers/kingbase/src/test/java/com/dbx/agent/kingbase/KingbaseAgentTest.java +++ b/agents/drivers/kingbase/src/test/java/com/dbx/agent/kingbase/KingbaseAgentTest.java @@ -565,6 +565,23 @@ class KingbaseAgentTest extends JdbcFakeExecutionBehaviorTest { Assertions.assertFalse(ddl.contains("unknown metadata"), ddl); } + @Test + void ddlOmitsUnknownCharacterLengthSentinel() { + ColumnInfo unlimited = new ColumnInfo("display_name", "varchar", true, null, false, null, null, null, null, -1); + + String ddl = DdlBuilder.buildTableDdl( + "public", + "accounts", + Collections.singletonList(unlimited), + Collections.emptyList(), + Collections.emptyList(), + true + ); + + Assertions.assertTrue(ddl.contains("`display_name` varchar"), ddl); + Assertions.assertFalse(ddl.contains("varchar(-1)"), ddl); + } + @Test void regularListIndexesIncludesPrimaryUniqueAndSecondaryIndexes() { List sql = new ArrayList<>();