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<>();