From 105a70a10ab7225a5ad7f26c05fd8fb5ae7728dd Mon Sep 17 00:00:00 2001 From: makssent Date: Thu, 18 Dec 2025 14:42:44 +0300 Subject: [PATCH 1/2] fix column length resolution for sharded tables --- .../metadata/data/FirebirdSizeRegistry.java | 11 ++++++++++- ...rebirdPrepareStatementCommandExecutor.java | 19 ++++++++++++++++++- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/database/connector/dialect/firebird/src/main/java/org/apache/shardingsphere/database/connector/firebird/metadata/data/FirebirdSizeRegistry.java b/database/connector/dialect/firebird/src/main/java/org/apache/shardingsphere/database/connector/firebird/metadata/data/FirebirdSizeRegistry.java index 010c5a3c4370a..ad74c0e8e764b 100644 --- a/database/connector/dialect/firebird/src/main/java/org/apache/shardingsphere/database/connector/firebird/metadata/data/FirebirdSizeRegistry.java +++ b/database/connector/dialect/firebird/src/main/java/org/apache/shardingsphere/database/connector/firebird/metadata/data/FirebirdSizeRegistry.java @@ -87,7 +87,16 @@ public static OptionalInt findColumnSize(final String schemaName, final String t private static String buildTableKey(final String schemaName, final String tableName) { String schemaKey = null == schemaName ? "" : toKey(schemaName); - return schemaKey + "." + toKey(tableName); + String logicTable = trimToLogicTableName(tableName); + return schemaKey + "." + toKey(logicTable); + } + + private static String trimToLogicTableName(final String tableName) { + int end = tableName.length() - 1; + while (end >= 0 && !Character.isLetter(tableName.charAt(end))) { + end--; + } + return end < 0 ? tableName : tableName.substring(0, end + 1); } private static String toKey(final String value) { diff --git a/proxy/frontend/dialect/firebird/src/main/java/org/apache/shardingsphere/proxy/frontend/firebird/command/query/statement/prepare/FirebirdPrepareStatementCommandExecutor.java b/proxy/frontend/dialect/firebird/src/main/java/org/apache/shardingsphere/proxy/frontend/firebird/command/query/statement/prepare/FirebirdPrepareStatementCommandExecutor.java index eed2b5347aabd..e80c774d1468e 100644 --- a/proxy/frontend/dialect/firebird/src/main/java/org/apache/shardingsphere/proxy/frontend/firebird/command/query/statement/prepare/FirebirdPrepareStatementCommandExecutor.java +++ b/proxy/frontend/dialect/firebird/src/main/java/org/apache/shardingsphere/proxy/frontend/firebird/command/query/statement/prepare/FirebirdPrepareStatementCommandExecutor.java @@ -458,7 +458,7 @@ private void processColumn(final Collection describe String tableAliasString = null == tableAlias ? table.getName() : tableAlias.getValue(); String columnAliasString = null == columnAlias ? column.getName() : columnAlias.getValue(); String owner = connectionSession.getConnectionContext().getGrantee().getUsername(); - Integer columnLength = resolveColumnLength(table, column); + Integer columnLength = (null != column && isDynamicLengthType(column.getDataType())) ? resolveColumnLength(table, column) : null; describeColumns.add(new FirebirdReturnColumnPacket(requestedItems, idx, table, column, tableAliasString, columnAliasString, owner, columnLength)); } @@ -469,4 +469,21 @@ private Integer resolveColumnLength(final ShardingSphereTable table, final Shard OptionalInt columnSize = FirebirdSizeRegistry.findColumnSize(connectionSession.getCurrentDatabaseName(), table.getName(), column.getName()); return columnSize.isPresent() ? columnSize.getAsInt() : null; } + + private boolean isDynamicLengthType(final int dataType) { + switch (dataType) { + case Types.CHAR: + case Types.NCHAR: + case Types.VARCHAR: + case Types.NVARCHAR: + case Types.LONGVARCHAR: + case Types.LONGNVARCHAR: + case Types.BINARY: + case Types.VARBINARY: + case Types.LONGVARBINARY: + return true; + default: + return false; + } + } } From a1b8e8abec314687252f5009a3481aeecfce6b56 Mon Sep 17 00:00:00 2001 From: makssent Date: Thu, 18 Dec 2025 15:39:46 +0300 Subject: [PATCH 2/2] ci trigger