This is an automated email from the ASF dual-hosted git repository.

zhangliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new 49a84ba17c0 Fixed column length resolution for sharded tables (#37425)
49a84ba17c0 is described below

commit 49a84ba17c0afdbf84c3c93f5b02969a3d43f87e
Author: Maxim Sentyabrskiy <[email protected]>
AuthorDate: Sun Dec 21 07:06:37 2025 +0300

    Fixed column length resolution for sharded tables (#37425)
    
    * fix column length resolution for sharded tables
    
    * ci trigger
---
 .../firebird/metadata/data/FirebirdSizeRegistry.java  | 11 ++++++++++-
 .../FirebirdPrepareStatementCommandExecutor.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 010c5a3c437..ad74c0e8e76 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 final class FirebirdSizeRegistry {
     
     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 eed2b5347aa..e80c774d146 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 @@ public final class FirebirdPrepareStatementCommandExecutor 
implements CommandExe
         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 @@ public final class FirebirdPrepareStatementCommandExecutor 
implements CommandExe
         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;
+        }
+    }
 }

Reply via email to