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

Reply via email to