This is an automated email from the ASF dual-hosted git repository.
sunnianjun 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 88e470bca9e Compatible with loading table names containing dots
(#33934)
88e470bca9e is described below
commit 88e470bca9e03c8b4b83512e8f8cd4e48eebc4ef
Author: Haoran Meng <[email protected]>
AuthorDate: Fri Dec 6 17:15:44 2024 +0800
Compatible with loading table names containing dots (#33934)
* Compatible with loading table names containing dots
* Add valid data node judgment for DataNode
---
.../java/org/apache/shardingsphere/infra/datanode/DataNode.java | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git
a/infra/common/src/main/java/org/apache/shardingsphere/infra/datanode/DataNode.java
b/infra/common/src/main/java/org/apache/shardingsphere/infra/datanode/DataNode.java
index 7263e85ac6c..48e89143863 100644
---
a/infra/common/src/main/java/org/apache/shardingsphere/infra/datanode/DataNode.java
+++
b/infra/common/src/main/java/org/apache/shardingsphere/infra/datanode/DataNode.java
@@ -79,13 +79,17 @@ public final class DataNode {
*/
public DataNode(final String databaseName, final DatabaseType
databaseType, final String dataNode) {
ShardingSpherePreconditions.checkState(dataNode.contains(DELIMITER),
() -> new InvalidDataNodeFormatException(dataNode));
- boolean containsSchema = isValidDataNode(dataNode, 3);
- List<String> segments = Splitter.on(DELIMITER).splitToList(dataNode);
+ boolean containsSchema = isSchemaAvailable(databaseType) &&
isValidDataNode(dataNode, 3);
+ List<String> segments = Splitter.on(DELIMITER).limit(containsSchema ?
3 : 2).splitToList(dataNode);
dataSourceName = segments.get(0);
schemaName = getSchemaName(databaseName, databaseType, containsSchema,
segments);
tableName = containsSchema ? segments.get(2).toLowerCase() :
segments.get(1).toLowerCase();
}
+ private boolean isSchemaAvailable(final DatabaseType databaseType) {
+ return new
DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData().isSchemaAvailable();
+ }
+
private String getSchemaName(final String databaseName, final DatabaseType
databaseType, final boolean containsSchema, final List<String> segments) {
DialectDatabaseMetaData dialectDatabaseMetaData = new
DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData();
if (dialectDatabaseMetaData.getDefaultSchema().isPresent()) {