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;
+ }
+ }
}