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 7cb445b9bc6 Refactor impl of FromDatabaseAvailable (#35731)
7cb445b9bc6 is described below

commit 7cb445b9bc6c0558530403c3163109625d65661b
Author: Liang Zhang <zhangli...@apache.org>
AuthorDate: Tue Jun 17 12:08:31 2025 +0800

    Refactor impl of FromDatabaseAvailable (#35731)
    
    * Refactor impl of FromDatabaseAvailable
    
    * Refactor impl of FromDatabaseAvailable
    
    * Refactor impl of FromDatabaseAvailable
---
 .../core/advice/SQLParseCountAdviceTest.java       |  3 +-
 .../core/BroadcastDistSQLStatementVisitor.java     |  5 +--
 .../ShowBroadcastTableRulesStatement.java          |  6 ++--
 .../core/EncryptDistSQLStatementVisitor.java       |  6 ++--
 .../statement/ShowEncryptRulesStatement.java       |  6 ++--
 .../parser/core/MaskDistSQLStatementVisitor.java   |  5 +--
 .../distsql/statement/ShowMaskRulesStatement.java  |  6 ++--
 .../ReadwriteSplittingDistSQLStatementVisitor.java | 16 +++++----
 ...adwriteSplittingStorageUnitStatusStatement.java |  8 ++---
 .../ShowReadwriteSplittingRulesStatement.java      |  6 ++--
 ...StatusFromReadwriteSplittingRulesStatement.java |  8 ++---
 .../parser/core/ShadowDistSQLStatementVisitor.java | 15 +++++----
 .../ShowDefaultShadowAlgorithmStatement.java       |  6 ++--
 .../statement/ShowShadowAlgorithmsStatement.java   |  6 ++--
 .../statement/ShowShadowRulesStatement.java        |  6 ++--
 .../statement/ShowShadowTableRulesStatement.java   |  6 ++--
 .../core/ShardingDistSQLStatementVisitor.java      | 39 +++++++++++++---------
 .../ShowDefaultShardingStrategyStatement.java      |  6 ++--
 .../statement/ShowShardingAlgorithmsStatement.java |  6 ++--
 .../statement/ShowShardingAuditorsStatement.java   |  6 ++--
 .../ShowShardingKeyGeneratorsStatement.java        |  6 ++--
 .../statement/ShowShardingTableNodesStatement.java |  6 ++--
 .../ShowShardingTableReferenceRulesStatement.java  |  6 ++--
 .../statement/ShowShardingTableRulesStatement.java |  6 ++--
 ...owShardingTableRulesUsedAlgorithmStatement.java |  6 ++--
 ...ShowShardingTableRulesUsedAuditorStatement.java |  6 ++--
 ...hardingTableRulesUsedKeyGeneratorStatement.java |  6 ++--
 .../ShowUnusedShardingAlgorithmsStatement.java     |  6 ++--
 .../ShowUnusedShardingAuditorsStatement.java       |  6 ++--
 .../ShowUnusedShardingKeyGeneratorsStatement.java  |  6 ++--
 .../type/dal/ShowColumnsStatementContextTest.java  |  2 +-
 .../distsql/handler/util/DatabaseNameUtils.java    |  5 ++-
 .../ShowRulesUsedStorageUnitExecutorTest.java      |  6 ++--
 .../rql/resource/ShowStorageUnitExecutorTest.java  |  6 ++--
 .../handler/util/DatabaseNameUtilsTest.java        |  8 ++---
 .../parser/core/SingleDistSQLStatementVisitor.java | 21 +++++++-----
 ...ShowDefaultSingleTableStorageUnitStatement.java |  6 ++--
 .../statement/rql/ShowSingleTablesStatement.java   |  6 ++--
 .../rql/ShowUnloadedSingleTablesStatement.java     |  6 ++--
 .../core/kernel/KernelDistSQLStatementVisitor.java | 20 ++++++-----
 .../ExportDatabaseConfigurationStatement.java      | 14 ++++----
 .../queryable/show/ShowTableMetaDataStatement.java |  8 ++---
 .../rql/resource/ShowLogicalTablesStatement.java   |  6 ++--
 .../rql/resource/ShowStorageUnitsStatement.java    | 14 ++++----
 .../rql/resource/ShowTablesStatement.java          | 19 ++++-------
 .../rql/rule/database/CountRuleStatement.java      |  6 ++--
 .../rule/database/ShowDatabaseRulesStatement.java  |  8 ++---
 .../ShowRulesUsedStorageUnitStatement.java         |  6 ++--
 .../statement/type/DorisDALStatementVisitor.java   |  2 +-
 .../statement/type/MySQLDALStatementVisitor.java   |  2 +-
 .../core/segment/dal/FromDatabaseSegment.java      | 11 ++++--
 .../core/statement/FromDatabaseAvailable.java      |  4 +--
 .../distsql/DistSQLQueryBackendHandlerTest.java    |  3 +-
 .../ExportDatabaseConfigurationExecutorTest.java   |  5 +--
 .../export/ShowTableMetaDataExecutorTest.java      |  3 +-
 .../admin/executor/ShowTablesExecutorTest.java     |  2 +-
 .../ShowTableMetaDataStatementAssert.java          |  2 +-
 ...eSplittingStorageUnitStatusStatementAssert.java |  2 +-
 .../rql/impl/ShowRulesStatementAssert.java         |  2 +-
 .../rql/impl/ShowStorageUnitsStatementAssert.java  |  2 +-
 .../rql/impl/ShowTablesStatementAssert.java        |  2 +-
 61 files changed, 238 insertions(+), 202 deletions(-)

diff --git 
a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/SQLParseCountAdviceTest.java
 
b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/SQLParseCountAdviceTest.java
index c53881002f0..553099c5dec 100644
--- 
a/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/SQLParseCountAdviceTest.java
+++ 
b/agent/plugins/metrics/core/src/test/java/org/apache/shardingsphere/agent/plugin/metrics/core/advice/SQLParseCountAdviceTest.java
@@ -27,6 +27,7 @@ import 
org.apache.shardingsphere.data.pipeline.migration.distsql.statement.query
 import 
org.apache.shardingsphere.distsql.statement.rdl.resource.unit.type.RegisterStorageUnitStatement;
 import 
org.apache.shardingsphere.distsql.statement.rql.resource.ShowStorageUnitsStatement;
 import org.apache.shardingsphere.distsql.statement.rul.sql.ParseStatement;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.dal.ShowDatabasesStatement;
@@ -97,7 +98,7 @@ class SQLParseCountAdviceTest {
     
     @Test
     void assertParseRQL() {
-        assertParse(new ShowStorageUnitsStatement(new DatabaseSegment(0, 0, 
null), null), "RQL=1");
+        assertParse(new ShowStorageUnitsStatement(new FromDatabaseSegment(0, 
new DatabaseSegment(0, 0, null)), null), "RQL=1");
     }
     
     @Test
diff --git 
a/features/broadcast/distsql/parser/src/main/java/org/apache/shardingsphere/broadcast/distsql/parser/core/BroadcastDistSQLStatementVisitor.java
 
b/features/broadcast/distsql/parser/src/main/java/org/apache/shardingsphere/broadcast/distsql/parser/core/BroadcastDistSQLStatementVisitor.java
index 0545486c752..e15ba3fcae6 100644
--- 
a/features/broadcast/distsql/parser/src/main/java/org/apache/shardingsphere/broadcast/distsql/parser/core/BroadcastDistSQLStatementVisitor.java
+++ 
b/features/broadcast/distsql/parser/src/main/java/org/apache/shardingsphere/broadcast/distsql/parser/core/BroadcastDistSQLStatementVisitor.java
@@ -30,6 +30,7 @@ import 
org.apache.shardingsphere.distsql.parser.autogen.BroadcastDistSQLStatemen
 import 
org.apache.shardingsphere.distsql.statement.rql.rule.database.CountRuleStatement;
 import org.apache.shardingsphere.sql.parser.api.ASTNode;
 import org.apache.shardingsphere.sql.parser.api.visitor.SQLVisitor;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
 
@@ -54,12 +55,12 @@ public final class BroadcastDistSQLStatementVisitor extends 
BroadcastDistSQLStat
     
     @Override
     public ASTNode visitShowBroadcastTableRules(final 
ShowBroadcastTableRulesContext ctx) {
-        return new ShowBroadcastTableRulesStatement(null == ctx.databaseName() 
? null : (DatabaseSegment) visit(ctx.databaseName()));
+        return new ShowBroadcastTableRulesStatement(null == ctx.databaseName() 
? null : new FromDatabaseSegment(ctx.FROM().getSymbol().getStartIndex(), 
(DatabaseSegment) visit(ctx.databaseName())));
     }
     
     @Override
     public ASTNode visitCountBroadcastRule(final CountBroadcastRuleContext 
ctx) {
-        return new CountRuleStatement(null == ctx.databaseName() ? null : 
(DatabaseSegment) visit(ctx.databaseName()), "BROADCAST");
+        return new CountRuleStatement(null == ctx.databaseName() ? null : new 
FromDatabaseSegment(ctx.FROM().getSymbol().getStartIndex(), (DatabaseSegment) 
visit(ctx.databaseName())), "BROADCAST");
     }
     
     @Override
diff --git 
a/features/broadcast/distsql/statement/src/main/java/org/apache/shardingsphere/broadcast/distsql/statement/ShowBroadcastTableRulesStatement.java
 
b/features/broadcast/distsql/statement/src/main/java/org/apache/shardingsphere/broadcast/distsql/statement/ShowBroadcastTableRulesStatement.java
index 5b042dcd134..df18741983d 100644
--- 
a/features/broadcast/distsql/statement/src/main/java/org/apache/shardingsphere/broadcast/distsql/statement/ShowBroadcastTableRulesStatement.java
+++ 
b/features/broadcast/distsql/statement/src/main/java/org/apache/shardingsphere/broadcast/distsql/statement/ShowBroadcastTableRulesStatement.java
@@ -18,14 +18,14 @@
 package org.apache.shardingsphere.broadcast.distsql.statement;
 
 import 
org.apache.shardingsphere.distsql.statement.rql.rule.database.ShowDatabaseRulesStatement;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 
 /**
  * Show broadcast table rules statement.
  */
 public final class ShowBroadcastTableRulesStatement extends 
ShowDatabaseRulesStatement {
     
-    public ShowBroadcastTableRulesStatement(final DatabaseSegment database) {
-        super(database);
+    public ShowBroadcastTableRulesStatement(final FromDatabaseSegment 
fromDatabase) {
+        super(fromDatabase);
     }
 }
diff --git 
a/features/encrypt/distsql/parser/src/main/java/org/apache/shardingsphere/encrypt/distsql/parser/core/EncryptDistSQLStatementVisitor.java
 
b/features/encrypt/distsql/parser/src/main/java/org/apache/shardingsphere/encrypt/distsql/parser/core/EncryptDistSQLStatementVisitor.java
index 75bd81c31af..5f3cf4bc1e4 100644
--- 
a/features/encrypt/distsql/parser/src/main/java/org/apache/shardingsphere/encrypt/distsql/parser/core/EncryptDistSQLStatementVisitor.java
+++ 
b/features/encrypt/distsql/parser/src/main/java/org/apache/shardingsphere/encrypt/distsql/parser/core/EncryptDistSQLStatementVisitor.java
@@ -45,6 +45,7 @@ import 
org.apache.shardingsphere.encrypt.distsql.statement.ShowEncryptRulesState
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.enums.QuoteCharacter;
 import org.apache.shardingsphere.sql.parser.api.ASTNode;
 import org.apache.shardingsphere.sql.parser.api.visitor.SQLVisitor;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.TableNameSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
@@ -76,7 +77,8 @@ public final class EncryptDistSQLStatementVisitor extends 
EncryptDistSQLStatemen
     public ASTNode visitShowEncryptRules(final ShowEncryptRulesContext ctx) {
         return new ShowEncryptRulesStatement(null == ctx.tableRule()
                 ? null
-                : getIdentifierValue(ctx.tableRule().tableName()), null == 
ctx.databaseName() ? null : (DatabaseSegment) visit(ctx.databaseName()));
+                : getIdentifierValue(ctx.tableRule().tableName()),
+                null == ctx.databaseName() ? null : new 
FromDatabaseSegment(ctx.FROM().getSymbol().getStartIndex(), (DatabaseSegment) 
visit(ctx.databaseName())));
     }
     
     @Override
@@ -138,7 +140,7 @@ public final class EncryptDistSQLStatementVisitor extends 
EncryptDistSQLStatemen
     
     @Override
     public ASTNode visitCountEncryptRule(final CountEncryptRuleContext ctx) {
-        return new CountRuleStatement(null == ctx.databaseName() ? null : 
(DatabaseSegment) visit(ctx.databaseName()), "ENCRYPT");
+        return new CountRuleStatement(null == ctx.databaseName() ? null : new 
FromDatabaseSegment(ctx.FROM().getSymbol().getStartIndex(), (DatabaseSegment) 
visit(ctx.databaseName())), "ENCRYPT");
     }
     
     @Override
diff --git 
a/features/encrypt/distsql/statement/src/main/java/org/apache/shardingsphere/encrypt/distsql/statement/ShowEncryptRulesStatement.java
 
b/features/encrypt/distsql/statement/src/main/java/org/apache/shardingsphere/encrypt/distsql/statement/ShowEncryptRulesStatement.java
index f01ccbcd177..4411b288a95 100644
--- 
a/features/encrypt/distsql/statement/src/main/java/org/apache/shardingsphere/encrypt/distsql/statement/ShowEncryptRulesStatement.java
+++ 
b/features/encrypt/distsql/statement/src/main/java/org/apache/shardingsphere/encrypt/distsql/statement/ShowEncryptRulesStatement.java
@@ -19,7 +19,7 @@ package org.apache.shardingsphere.encrypt.distsql.statement;
 
 import lombok.Getter;
 import 
org.apache.shardingsphere.distsql.statement.rql.rule.database.ShowDatabaseRulesStatement;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 
 /**
  * Show encrypt rules statement.
@@ -29,8 +29,8 @@ public final class ShowEncryptRulesStatement extends 
ShowDatabaseRulesStatement
     
     private final String tableName;
     
-    public ShowEncryptRulesStatement(final String tableName, final 
DatabaseSegment database) {
-        super(database);
+    public ShowEncryptRulesStatement(final String tableName, final 
FromDatabaseSegment fromDatabase) {
+        super(fromDatabase);
         this.tableName = tableName;
     }
 }
diff --git 
a/features/mask/distsql/parser/src/main/java/org/apache/shardingsphere/mask/distsql/parser/core/MaskDistSQLStatementVisitor.java
 
b/features/mask/distsql/parser/src/main/java/org/apache/shardingsphere/mask/distsql/parser/core/MaskDistSQLStatementVisitor.java
index 217d10ef84b..240cbcbf13f 100644
--- 
a/features/mask/distsql/parser/src/main/java/org/apache/shardingsphere/mask/distsql/parser/core/MaskDistSQLStatementVisitor.java
+++ 
b/features/mask/distsql/parser/src/main/java/org/apache/shardingsphere/mask/distsql/parser/core/MaskDistSQLStatementVisitor.java
@@ -43,6 +43,7 @@ import 
org.apache.shardingsphere.mask.distsql.statement.DropMaskRuleStatement;
 import org.apache.shardingsphere.mask.distsql.statement.ShowMaskRulesStatement;
 import org.apache.shardingsphere.sql.parser.api.ASTNode;
 import org.apache.shardingsphere.sql.parser.api.visitor.SQLVisitor;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
 
@@ -72,12 +73,12 @@ public final class MaskDistSQLStatementVisitor extends 
MaskDistSQLStatementBaseV
     @Override
     public ASTNode visitShowMaskRules(final ShowMaskRulesContext ctx) {
         return new ShowMaskRulesStatement(null == ctx.RULE() ? null : 
getIdentifierValue(ctx.ruleName()),
-                null == ctx.databaseName() ? null : (DatabaseSegment) 
visit(ctx.databaseName()));
+                null == ctx.databaseName() ? null : new 
FromDatabaseSegment(ctx.FROM().getSymbol().getStartIndex(), (DatabaseSegment) 
visit(ctx.databaseName())));
     }
     
     @Override
     public ASTNode visitCountMaskRule(final CountMaskRuleContext ctx) {
-        return new CountRuleStatement(null == ctx.databaseName() ? null : 
(DatabaseSegment) visit(ctx.databaseName()), "MASK");
+        return new CountRuleStatement(null == ctx.databaseName() ? null : new 
FromDatabaseSegment(ctx.FROM().getSymbol().getStartIndex(), (DatabaseSegment) 
visit(ctx.databaseName())), "MASK");
     }
     
     @Override
diff --git 
a/features/mask/distsql/statement/src/main/java/org/apache/shardingsphere/mask/distsql/statement/ShowMaskRulesStatement.java
 
b/features/mask/distsql/statement/src/main/java/org/apache/shardingsphere/mask/distsql/statement/ShowMaskRulesStatement.java
index 5c229321755..c9f5062d4ff 100644
--- 
a/features/mask/distsql/statement/src/main/java/org/apache/shardingsphere/mask/distsql/statement/ShowMaskRulesStatement.java
+++ 
b/features/mask/distsql/statement/src/main/java/org/apache/shardingsphere/mask/distsql/statement/ShowMaskRulesStatement.java
@@ -19,7 +19,7 @@ package org.apache.shardingsphere.mask.distsql.statement;
 
 import lombok.Getter;
 import 
org.apache.shardingsphere.distsql.statement.rql.rule.database.ShowDatabaseRulesStatement;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 
 /**
  * Show mask rules statement.
@@ -29,8 +29,8 @@ public final class ShowMaskRulesStatement extends 
ShowDatabaseRulesStatement {
     
     private final String tableName;
     
-    public ShowMaskRulesStatement(final String tableName, final 
DatabaseSegment database) {
-        super(database);
+    public ShowMaskRulesStatement(final String tableName, final 
FromDatabaseSegment fromDatabase) {
+        super(fromDatabase);
         this.tableName = tableName;
     }
 }
diff --git 
a/features/readwrite-splitting/distsql/parser/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/parser/core/ReadwriteSplittingDistSQLStatementVisitor.java
 
b/features/readwrite-splitting/distsql/parser/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/parser/core/ReadwriteSplittingDistSQLStatementVisitor.java
index c1d1cd5878f..f84442dddce 100644
--- 
a/features/readwrite-splitting/distsql/parser/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/parser/core/ReadwriteSplittingDistSQLStatementVisitor.java
+++ 
b/features/readwrite-splitting/distsql/parser/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/parser/core/ReadwriteSplittingDistSQLStatementVisitor.java
@@ -43,6 +43,7 @@ import 
org.apache.shardingsphere.readwritesplitting.distsql.statement.ShowReadwr
 import 
org.apache.shardingsphere.readwritesplitting.distsql.statement.ShowStatusFromReadwriteSplittingRulesStatement;
 import org.apache.shardingsphere.sql.parser.api.ASTNode;
 import org.apache.shardingsphere.sql.parser.api.visitor.SQLVisitor;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
 
@@ -72,14 +73,15 @@ public final class 
ReadwriteSplittingDistSQLStatementVisitor extends ReadwriteSp
     
     @Override
     public ASTNode visitAlterReadwriteSplittingStorageUnitStatus(final 
AlterReadwriteSplittingStorageUnitStatusContext ctx) {
-        DatabaseSegment databaseSegment = null == ctx.databaseName() ? null : 
(DatabaseSegment) visit(ctx.databaseName());
-        return new 
AlterReadwriteSplittingStorageUnitStatusStatement(databaseSegment, 
getIdentifierValue(ctx.ruleName()), getIdentifierValue(ctx.storageUnitName()), 
null == ctx.DISABLE());
+        FromDatabaseSegment fromDatabase = new 
FromDatabaseSegment(ctx.FROM().getSymbol().getStartIndex(),
+                null == ctx.databaseName() ? null : (DatabaseSegment) 
visit(ctx.databaseName()));
+        return new 
AlterReadwriteSplittingStorageUnitStatusStatement(fromDatabase, 
getIdentifierValue(ctx.ruleName()), getIdentifierValue(ctx.storageUnitName()), 
null == ctx.DISABLE());
     }
     
     @Override
     public ASTNode visitShowReadwriteSplittingRules(final 
ShowReadwriteSplittingRulesContext ctx) {
         return new ShowReadwriteSplittingRulesStatement(null == ctx.ruleName() 
? null : getIdentifierValue(ctx.ruleName()),
-                null != ctx.databaseName() ? (DatabaseSegment) 
visit(ctx.databaseName()) : null);
+                null == ctx.databaseName() ? null : new 
FromDatabaseSegment(ctx.FROM().getSymbol().getStartIndex(), (DatabaseSegment) 
visit(ctx.databaseName())));
     }
     
     @Override
@@ -102,9 +104,9 @@ public final class 
ReadwriteSplittingDistSQLStatementVisitor extends ReadwriteSp
     
     @Override
     public ASTNode visitShowStatusFromReadwriteSplittingRules(final 
ShowStatusFromReadwriteSplittingRulesContext ctx) {
-        DatabaseSegment databaseSegment = null == ctx.databaseName() ? null : 
(DatabaseSegment) visit(ctx.databaseName());
+        FromDatabaseSegment fromDatabase = new 
FromDatabaseSegment(ctx.FROM().get(0).getSymbol().getStartIndex(), null == 
ctx.databaseName() ? null : (DatabaseSegment) visit(ctx.databaseName()));
         String ruleName = getIdentifierValue(ctx.ruleName());
-        return new 
ShowStatusFromReadwriteSplittingRulesStatement(databaseSegment, ruleName);
+        return new 
ShowStatusFromReadwriteSplittingRulesStatement(fromDatabase, ruleName);
     }
     
     private String getIdentifierValue(final ParseTree context) {
@@ -113,7 +115,9 @@ public final class 
ReadwriteSplittingDistSQLStatementVisitor extends ReadwriteSp
     
     @Override
     public ASTNode visitCountReadwriteSplittingRule(final 
CountReadwriteSplittingRuleContext ctx) {
-        return new CountRuleStatement(null == ctx.databaseName() ? null : 
(DatabaseSegment) visit(ctx.databaseName()), "READWRITE_SPLITTING");
+        return new CountRuleStatement(null == ctx.databaseName()
+                ? null
+                : new 
FromDatabaseSegment(ctx.FROM().getSymbol().getStartIndex(), (DatabaseSegment) 
visit(ctx.databaseName())), "READWRITE_SPLITTING");
     }
     
     private Properties getProperties(final PropertiesDefinitionContext ctx) {
diff --git 
a/features/readwrite-splitting/distsql/statement/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/statement/AlterReadwriteSplittingStorageUnitStatusStatement.java
 
b/features/readwrite-splitting/distsql/statement/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/statement/AlterReadwriteSplittingStorageUnitStatusStatement.java
index 010459d8797..7dc48fdb8b9 100644
--- 
a/features/readwrite-splitting/distsql/statement/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/statement/AlterReadwriteSplittingStorageUnitStatusStatement.java
+++ 
b/features/readwrite-splitting/distsql/statement/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/statement/AlterReadwriteSplittingStorageUnitStatusStatement.java
@@ -20,7 +20,7 @@ package 
org.apache.shardingsphere.readwritesplitting.distsql.statement;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import 
org.apache.shardingsphere.distsql.statement.ral.updatable.UpdatableRALStatement;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.FromDatabaseAvailable;
 
 import java.util.Optional;
@@ -32,7 +32,7 @@ import java.util.Optional;
 @Getter
 public final class AlterReadwriteSplittingStorageUnitStatusStatement extends 
UpdatableRALStatement implements FromDatabaseAvailable {
     
-    private final DatabaseSegment database;
+    private final FromDatabaseSegment fromDatabase;
     
     private final String ruleName;
     
@@ -41,7 +41,7 @@ public final class 
AlterReadwriteSplittingStorageUnitStatusStatement extends Upd
     private final boolean enable;
     
     @Override
-    public Optional<DatabaseSegment> getFromDatabase() {
-        return Optional.ofNullable(database);
+    public Optional<FromDatabaseSegment> getFromDatabase() {
+        return Optional.ofNullable(fromDatabase);
     }
 }
diff --git 
a/features/readwrite-splitting/distsql/statement/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/statement/ShowReadwriteSplittingRulesStatement.java
 
b/features/readwrite-splitting/distsql/statement/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/statement/ShowReadwriteSplittingRulesStatement.java
index 42c23cf1a86..e28ed10322b 100644
--- 
a/features/readwrite-splitting/distsql/statement/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/statement/ShowReadwriteSplittingRulesStatement.java
+++ 
b/features/readwrite-splitting/distsql/statement/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/statement/ShowReadwriteSplittingRulesStatement.java
@@ -19,7 +19,7 @@ package 
org.apache.shardingsphere.readwritesplitting.distsql.statement;
 
 import lombok.Getter;
 import 
org.apache.shardingsphere.distsql.statement.rql.rule.database.ShowDatabaseRulesStatement;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 
 /**
  * Show readwrite-splitting rules statement.
@@ -29,8 +29,8 @@ public final class ShowReadwriteSplittingRulesStatement 
extends ShowDatabaseRule
     
     private final String ruleName;
     
-    public ShowReadwriteSplittingRulesStatement(final String ruleName, final 
DatabaseSegment database) {
-        super(database);
+    public ShowReadwriteSplittingRulesStatement(final String ruleName, final 
FromDatabaseSegment fromDatabase) {
+        super(fromDatabase);
         this.ruleName = ruleName;
     }
 }
diff --git 
a/features/readwrite-splitting/distsql/statement/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/statement/ShowStatusFromReadwriteSplittingRulesStatement.java
 
b/features/readwrite-splitting/distsql/statement/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/statement/ShowStatusFromReadwriteSplittingRulesStatement.java
index 7b2743057bf..81d656ae551 100644
--- 
a/features/readwrite-splitting/distsql/statement/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/statement/ShowStatusFromReadwriteSplittingRulesStatement.java
+++ 
b/features/readwrite-splitting/distsql/statement/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/statement/ShowStatusFromReadwriteSplittingRulesStatement.java
@@ -19,7 +19,7 @@ package 
org.apache.shardingsphere.readwritesplitting.distsql.statement;
 
 import lombok.RequiredArgsConstructor;
 import 
org.apache.shardingsphere.distsql.statement.rql.resource.ResourceQueryStatement;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.FromDatabaseAvailable;
 
 import java.util.Optional;
@@ -30,13 +30,13 @@ import java.util.Optional;
 @RequiredArgsConstructor
 public final class ShowStatusFromReadwriteSplittingRulesStatement extends 
ResourceQueryStatement implements FromDatabaseAvailable {
     
-    private final DatabaseSegment database;
+    private final FromDatabaseSegment fromDatabase;
     
     private final String ruleName;
     
     @Override
-    public Optional<DatabaseSegment> getFromDatabase() {
-        return Optional.ofNullable(database);
+    public Optional<FromDatabaseSegment> getFromDatabase() {
+        return Optional.ofNullable(fromDatabase);
     }
     
     /**
diff --git 
a/features/shadow/distsql/parser/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/core/ShadowDistSQLStatementVisitor.java
 
b/features/shadow/distsql/parser/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/core/ShadowDistSQLStatementVisitor.java
index 31802ff6d19..cf102df0bf4 100644
--- 
a/features/shadow/distsql/parser/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/core/ShadowDistSQLStatementVisitor.java
+++ 
b/features/shadow/distsql/parser/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/core/ShadowDistSQLStatementVisitor.java
@@ -56,6 +56,7 @@ import 
org.apache.shardingsphere.shadow.distsql.statement.ShowShadowRulesStateme
 import 
org.apache.shardingsphere.shadow.distsql.statement.ShowShadowTableRulesStatement;
 import org.apache.shardingsphere.sql.parser.api.ASTNode;
 import org.apache.shardingsphere.sql.parser.api.visitor.SQLVisitor;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
 
@@ -98,12 +99,13 @@ public final class ShadowDistSQLStatementVisitor extends 
ShadowDistSQLStatementB
     
     @Override
     public ASTNode visitShowShadowAlgorithms(final ShowShadowAlgorithmsContext 
ctx) {
-        return new ShowShadowAlgorithmsStatement(null == ctx.databaseName() ? 
null : (DatabaseSegment) visit(ctx.databaseName()));
+        return new ShowShadowAlgorithmsStatement(null == ctx.databaseName() ? 
null : new FromDatabaseSegment(ctx.FROM().getSymbol().getStartIndex(), 
(DatabaseSegment) visit(ctx.databaseName())));
     }
     
     @Override
     public ASTNode visitShowDefaultShadowAlgorithm(final 
ShowDefaultShadowAlgorithmContext ctx) {
-        return new ShowDefaultShadowAlgorithmStatement(null == 
ctx.databaseName() ? null : (DatabaseSegment) visit(ctx.databaseName()));
+        return new ShowDefaultShadowAlgorithmStatement(
+                null == ctx.databaseName() ? null : new 
FromDatabaseSegment(ctx.FROM().getSymbol().getStartIndex(), (DatabaseSegment) 
visit(ctx.databaseName())));
     }
     
     @Override
@@ -149,13 +151,14 @@ public final class ShadowDistSQLStatementVisitor extends 
ShadowDistSQLStatementB
     @Override
     public ASTNode visitShowShadowRules(final ShowShadowRulesContext ctx) {
         String ruleName = null == ctx.shadowRule() ? null : 
getIdentifierValue(ctx.shadowRule().ruleName());
-        DatabaseSegment databaseSegment = null == ctx.databaseName() ? null : 
(DatabaseSegment) visit(ctx.databaseName());
-        return new ShowShadowRulesStatement(ruleName, null == 
ctx.databaseName() ? null : databaseSegment);
+        FromDatabaseSegment fromDatabase = null == ctx.databaseName() ? null : 
new FromDatabaseSegment(ctx.FROM().getSymbol().getStartIndex(), 
(DatabaseSegment) visit(ctx.databaseName()));
+        return new ShowShadowRulesStatement(ruleName, null == 
ctx.databaseName() ? null : fromDatabase);
     }
     
     @Override
     public ASTNode visitShowShadowTableRules(final ShowShadowTableRulesContext 
ctx) {
-        return new ShowShadowTableRulesStatement(null == ctx.databaseName() ? 
null : (DatabaseSegment) visit(ctx.databaseName()), ctx.TABLE().getText());
+        return new ShowShadowTableRulesStatement(null == ctx.databaseName() ? 
null : new FromDatabaseSegment(ctx.FROM().getSymbol().getStartIndex(), 
(DatabaseSegment) visit(ctx.databaseName())),
+                ctx.TABLE().getText());
     }
     
     private String getIdentifierValue(final ParserRuleContext ctx) {
@@ -173,7 +176,7 @@ public final class ShadowDistSQLStatementVisitor extends 
ShadowDistSQLStatementB
     
     @Override
     public ASTNode visitCountShadowRule(final CountShadowRuleContext ctx) {
-        return new CountRuleStatement(null == ctx.databaseName() ? null : 
(DatabaseSegment) visit(ctx.databaseName()), "SHADOW");
+        return new CountRuleStatement(null == ctx.databaseName() ? null : new 
FromDatabaseSegment(ctx.FROM().getSymbol().getStartIndex(), (DatabaseSegment) 
visit(ctx.databaseName())), "SHADOW");
     }
     
     private Collection<ShadowRuleSegment> autoCreateAlgorithmName(final 
Collection<ShadowRuleSegment> shadowRuleSegments) {
diff --git 
a/features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/statement/ShowDefaultShadowAlgorithmStatement.java
 
b/features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/statement/ShowDefaultShadowAlgorithmStatement.java
index ed27b796087..203292d805b 100644
--- 
a/features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/statement/ShowDefaultShadowAlgorithmStatement.java
+++ 
b/features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/statement/ShowDefaultShadowAlgorithmStatement.java
@@ -19,7 +19,7 @@ package org.apache.shardingsphere.shadow.distsql.statement;
 
 import lombok.Getter;
 import 
org.apache.shardingsphere.distsql.statement.rql.rule.database.ShowDatabaseRulesStatement;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 
 /**
  * Show default shadow algorithm statement.
@@ -27,7 +27,7 @@ import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.Datab
 @Getter
 public final class ShowDefaultShadowAlgorithmStatement extends 
ShowDatabaseRulesStatement {
     
-    public ShowDefaultShadowAlgorithmStatement(final DatabaseSegment database) 
{
-        super(database);
+    public ShowDefaultShadowAlgorithmStatement(final FromDatabaseSegment 
fromDatabase) {
+        super(fromDatabase);
     }
 }
diff --git 
a/features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/statement/ShowShadowAlgorithmsStatement.java
 
b/features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/statement/ShowShadowAlgorithmsStatement.java
index a03503ba692..cad402300c8 100644
--- 
a/features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/statement/ShowShadowAlgorithmsStatement.java
+++ 
b/features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/statement/ShowShadowAlgorithmsStatement.java
@@ -19,7 +19,7 @@ package org.apache.shardingsphere.shadow.distsql.statement;
 
 import lombok.Getter;
 import 
org.apache.shardingsphere.distsql.statement.rql.rule.database.ShowDatabaseRulesStatement;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 
 /**
  * Show shadow algorithms statement.
@@ -27,7 +27,7 @@ import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.Datab
 @Getter
 public final class ShowShadowAlgorithmsStatement extends 
ShowDatabaseRulesStatement {
     
-    public ShowShadowAlgorithmsStatement(final DatabaseSegment database) {
-        super(database);
+    public ShowShadowAlgorithmsStatement(final FromDatabaseSegment 
fromDatabase) {
+        super(fromDatabase);
     }
 }
diff --git 
a/features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/statement/ShowShadowRulesStatement.java
 
b/features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/statement/ShowShadowRulesStatement.java
index f87b8d27021..2bf538ef4df 100644
--- 
a/features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/statement/ShowShadowRulesStatement.java
+++ 
b/features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/statement/ShowShadowRulesStatement.java
@@ -19,7 +19,7 @@ package org.apache.shardingsphere.shadow.distsql.statement;
 
 import lombok.Getter;
 import 
org.apache.shardingsphere.distsql.statement.rql.rule.database.ShowDatabaseRulesStatement;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 
 /**
  * Show shadow rules statement.
@@ -29,8 +29,8 @@ public final class ShowShadowRulesStatement extends 
ShowDatabaseRulesStatement {
     
     private final String ruleName;
     
-    public ShowShadowRulesStatement(final String ruleName, final 
DatabaseSegment database) {
-        super(database);
+    public ShowShadowRulesStatement(final String ruleName, final 
FromDatabaseSegment fromDatabase) {
+        super(fromDatabase);
         this.ruleName = ruleName;
     }
 }
diff --git 
a/features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/statement/ShowShadowTableRulesStatement.java
 
b/features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/statement/ShowShadowTableRulesStatement.java
index 6302f5e827c..6c244b50cd8 100644
--- 
a/features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/statement/ShowShadowTableRulesStatement.java
+++ 
b/features/shadow/distsql/statement/src/main/java/org/apache/shardingsphere/shadow/distsql/statement/ShowShadowTableRulesStatement.java
@@ -19,7 +19,7 @@ package org.apache.shardingsphere.shadow.distsql.statement;
 
 import lombok.Getter;
 import 
org.apache.shardingsphere.distsql.statement.rql.rule.database.ShowDatabaseRulesStatement;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 
 /**
  * Show shadow table rules statement.
@@ -29,8 +29,8 @@ public final class ShowShadowTableRulesStatement extends 
ShowDatabaseRulesStatem
     
     private final String tableName;
     
-    public ShowShadowTableRulesStatement(final DatabaseSegment database, final 
String tableName) {
-        super(database);
+    public ShowShadowTableRulesStatement(final FromDatabaseSegment 
fromDatabase, final String tableName) {
+        super(fromDatabase);
         this.tableName = tableName;
     }
 }
diff --git 
a/features/sharding/distsql/parser/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/core/ShardingDistSQLStatementVisitor.java
 
b/features/sharding/distsql/parser/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/core/ShardingDistSQLStatementVisitor.java
index 89d077f8565..252ee7410cc 100644
--- 
a/features/sharding/distsql/parser/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/core/ShardingDistSQLStatementVisitor.java
+++ 
b/features/sharding/distsql/parser/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/core/ShardingDistSQLStatementVisitor.java
@@ -102,6 +102,7 @@ import 
org.apache.shardingsphere.sharding.distsql.statement.ShowUnusedShardingAu
 import 
org.apache.shardingsphere.sharding.distsql.statement.ShowUnusedShardingKeyGeneratorsStatement;
 import org.apache.shardingsphere.sql.parser.api.ASTNode;
 import org.apache.shardingsphere.sql.parser.api.visitor.SQLVisitor;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.TableNameSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
@@ -205,12 +206,12 @@ public final class ShardingDistSQLStatementVisitor 
extends ShardingDistSQLStatem
     @Override
     public ASTNode visitShowShardingTableRules(final 
ShowShardingTableRulesContext ctx) {
         return new ShowShardingTableRulesStatement(null == ctx.tableRule() ? 
null : getIdentifierValue(ctx.tableRule().tableName()),
-                null == ctx.databaseName() ? null : (DatabaseSegment) 
visit(ctx.databaseName()));
+                null == ctx.databaseName() ? null : new 
FromDatabaseSegment(ctx.FROM().getSymbol().getStartIndex(), (DatabaseSegment) 
visit(ctx.databaseName())));
     }
     
     @Override
     public ASTNode visitShowShardingAlgorithms(final 
ShowShardingAlgorithmsContext ctx) {
-        return new ShowShardingAlgorithmsStatement(null == ctx.databaseName() 
? null : (DatabaseSegment) visit(ctx.databaseName()));
+        return new ShowShardingAlgorithmsStatement(null == ctx.databaseName() 
? null : new FromDatabaseSegment(ctx.FROM().getSymbol().getStartIndex(), 
(DatabaseSegment) visit(ctx.databaseName())));
     }
     
     @Override
@@ -251,7 +252,7 @@ public final class ShardingDistSQLStatementVisitor extends 
ShardingDistSQLStatem
     @Override
     public ASTNode visitShowShardingTableNodes(final 
ShowShardingTableNodesContext ctx) {
         return new ShowShardingTableNodesStatement(null == ctx.tableName() ? 
null : getIdentifierValue(ctx.tableName()),
-                null == ctx.databaseName() ? null : (DatabaseSegment) 
visit(ctx.databaseName()));
+                null == ctx.databaseName() ? null : new 
FromDatabaseSegment(ctx.FROM().getSymbol().getStartIndex(), (DatabaseSegment) 
visit(ctx.databaseName())));
     }
     
     @Override
@@ -325,7 +326,7 @@ public final class ShardingDistSQLStatementVisitor extends 
ShardingDistSQLStatem
     @Override
     public ASTNode visitShowShardingTableReferenceRules(final 
ShowShardingTableReferenceRulesContext ctx) {
         return new ShowShardingTableReferenceRulesStatement(null == 
ctx.ruleName() ? null : getIdentifierValue(ctx.ruleName()),
-                null == ctx.databaseName() ? null : (DatabaseSegment) 
visit(ctx.databaseName()));
+                null == ctx.databaseName() ? null : new 
FromDatabaseSegment(ctx.FROM().getSymbol().getStartIndex(), (DatabaseSegment) 
visit(ctx.databaseName())));
     }
     
     @Override
@@ -335,7 +336,8 @@ public final class ShardingDistSQLStatementVisitor extends 
ShardingDistSQLStatem
     
     @Override
     public ASTNode visitShowShardingKeyGenerators(final 
ShowShardingKeyGeneratorsContext ctx) {
-        return new ShowShardingKeyGeneratorsStatement(null == 
ctx.databaseName() ? null : (DatabaseSegment) visit(ctx.databaseName()));
+        return new ShowShardingKeyGeneratorsStatement(
+                null == ctx.databaseName() ? null : new 
FromDatabaseSegment(ctx.FROM().getSymbol().getStartIndex(), (DatabaseSegment) 
visit(ctx.databaseName())));
     }
     
     @Override
@@ -350,17 +352,20 @@ public final class ShardingDistSQLStatementVisitor 
extends ShardingDistSQLStatem
     
     @Override
     public ASTNode visitShowShardingAuditors(final ShowShardingAuditorsContext 
ctx) {
-        return new ShowShardingAuditorsStatement(null == ctx.databaseName() ? 
null : (DatabaseSegment) visit(ctx.databaseName()));
+        return new ShowShardingAuditorsStatement(null == ctx.databaseName() ? 
null : new FromDatabaseSegment(ctx.FROM().getSymbol().getStartIndex(), 
(DatabaseSegment) visit(ctx.databaseName())));
     }
     
     @Override
     public ASTNode visitShowDefaultShardingStrategy(final 
ShowDefaultShardingStrategyContext ctx) {
-        return new ShowDefaultShardingStrategyStatement(null == 
ctx.databaseName() ? null : (DatabaseSegment) visit(ctx.databaseName()));
+        return new ShowDefaultShardingStrategyStatement(null == 
ctx.databaseName()
+                ? null
+                : new 
FromDatabaseSegment(ctx.FROM().getSymbol().getStartIndex(), (DatabaseSegment) 
visit(ctx.databaseName())));
     }
     
     @Override
     public ASTNode visitShowUnusedShardingAlgorithms(final 
ShowUnusedShardingAlgorithmsContext ctx) {
-        return new ShowUnusedShardingAlgorithmsStatement(null == 
ctx.databaseName() ? null : (DatabaseSegment) visit(ctx.databaseName()));
+        return new ShowUnusedShardingAlgorithmsStatement(
+                null == ctx.databaseName() ? null : new 
FromDatabaseSegment(ctx.FROM().getSymbol().getStartIndex(), (DatabaseSegment) 
visit(ctx.databaseName())));
     }
     
     private String buildShardingColumn(final 
AutoShardingColumnDefinitionContext ctx) {
@@ -375,33 +380,37 @@ public final class ShardingDistSQLStatementVisitor 
extends ShardingDistSQLStatem
     
     @Override
     public ASTNode visitShowUnusedShardingKeyGenerators(final 
ShowUnusedShardingKeyGeneratorsContext ctx) {
-        return new ShowUnusedShardingKeyGeneratorsStatement(null == 
ctx.databaseName() ? null : (DatabaseSegment) visit(ctx.databaseName()));
+        return new ShowUnusedShardingKeyGeneratorsStatement(
+                null == ctx.databaseName() ? null : new 
FromDatabaseSegment(ctx.FROM().getSymbol().getStartIndex(), (DatabaseSegment) 
visit(ctx.databaseName())));
     }
     
     @Override
     public ASTNode visitShowUnusedShardingAuditors(final 
ShowUnusedShardingAuditorsContext ctx) {
-        return new ShowUnusedShardingAuditorsStatement(null == 
ctx.databaseName() ? null : (DatabaseSegment) visit(ctx.databaseName()));
+        return new ShowUnusedShardingAuditorsStatement(
+                null == ctx.databaseName() ? null : new 
FromDatabaseSegment(ctx.FROM().getSymbol().getStartIndex(), (DatabaseSegment) 
visit(ctx.databaseName())));
     }
     
     @Override
     public ASTNode visitShowShardingTableRulesUsedAlgorithm(final 
ShowShardingTableRulesUsedAlgorithmContext ctx) {
-        return new ShowShardingTableRulesUsedAlgorithmStatement(
-                getIdentifierValue(ctx.shardingAlgorithmName()), null == 
ctx.databaseName() ? null : (DatabaseSegment) visit(ctx.databaseName()));
+        return new 
ShowShardingTableRulesUsedAlgorithmStatement(getIdentifierValue(ctx.shardingAlgorithmName()),
+                null == ctx.databaseName() ? null : new 
FromDatabaseSegment(ctx.FROM().getSymbol().getStartIndex(), (DatabaseSegment) 
visit(ctx.databaseName())));
     }
     
     @Override
     public ASTNode visitShowShardingTableRulesUsedKeyGenerator(final 
ShowShardingTableRulesUsedKeyGeneratorContext ctx) {
-        return new 
ShowShardingTableRulesUsedKeyGeneratorStatement(getIdentifierValue(ctx.keyGeneratorName()),
 null == ctx.databaseName() ? null : (DatabaseSegment) 
visit(ctx.databaseName()));
+        return new 
ShowShardingTableRulesUsedKeyGeneratorStatement(getIdentifierValue(ctx.keyGeneratorName()),
+                null == ctx.databaseName() ? null : new 
FromDatabaseSegment(ctx.FROM().getSymbol().getStartIndex(), (DatabaseSegment) 
visit(ctx.databaseName())));
     }
     
     @Override
     public ASTNode visitShowShardingTableRulesUsedAuditor(final 
ShowShardingTableRulesUsedAuditorContext ctx) {
-        return new 
ShowShardingTableRulesUsedAuditorStatement(getIdentifierValue(ctx.auditorName()),
 null == ctx.databaseName() ? null : (DatabaseSegment) 
visit(ctx.databaseName()));
+        return new 
ShowShardingTableRulesUsedAuditorStatement(getIdentifierValue(ctx.auditorName()),
+                null == ctx.databaseName() ? null : new 
FromDatabaseSegment(ctx.FROM().getSymbol().getStartIndex(), (DatabaseSegment) 
visit(ctx.databaseName())));
     }
     
     @Override
     public ASTNode visitCountShardingRule(final CountShardingRuleContext ctx) {
-        return new CountRuleStatement(null == ctx.databaseName() ? null : 
(DatabaseSegment) visit(ctx.databaseName()), "SHARDING");
+        return new CountRuleStatement(null == ctx.databaseName() ? null : new 
FromDatabaseSegment(ctx.FROM().getSymbol().getStartIndex(), (DatabaseSegment) 
visit(ctx.databaseName())), "SHARDING");
     }
     
     @Override
diff --git 
a/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowDefaultShardingStrategyStatement.java
 
b/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowDefaultShardingStrategyStatement.java
index 268a7da6fbd..8f63d0169f5 100644
--- 
a/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowDefaultShardingStrategyStatement.java
+++ 
b/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowDefaultShardingStrategyStatement.java
@@ -18,14 +18,14 @@
 package org.apache.shardingsphere.sharding.distsql.statement;
 
 import 
org.apache.shardingsphere.distsql.statement.rql.rule.database.ShowDatabaseRulesStatement;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 
 /**
  * Show default sharding strategy statement.
  */
 public final class ShowDefaultShardingStrategyStatement extends 
ShowDatabaseRulesStatement {
     
-    public ShowDefaultShardingStrategyStatement(final DatabaseSegment 
database) {
-        super(database);
+    public ShowDefaultShardingStrategyStatement(final FromDatabaseSegment 
fromDatabase) {
+        super(fromDatabase);
     }
 }
diff --git 
a/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowShardingAlgorithmsStatement.java
 
b/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowShardingAlgorithmsStatement.java
index b14355d8b79..d68ad5e84f4 100644
--- 
a/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowShardingAlgorithmsStatement.java
+++ 
b/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowShardingAlgorithmsStatement.java
@@ -18,14 +18,14 @@
 package org.apache.shardingsphere.sharding.distsql.statement;
 
 import 
org.apache.shardingsphere.distsql.statement.rql.rule.database.ShowDatabaseRulesStatement;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 
 /**
  * Show sharding algorithms statement.
  */
 public final class ShowShardingAlgorithmsStatement extends 
ShowDatabaseRulesStatement {
     
-    public ShowShardingAlgorithmsStatement(final DatabaseSegment database) {
-        super(database);
+    public ShowShardingAlgorithmsStatement(final FromDatabaseSegment 
fromDatabase) {
+        super(fromDatabase);
     }
 }
diff --git 
a/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowShardingAuditorsStatement.java
 
b/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowShardingAuditorsStatement.java
index 74d80b5d4dd..ff120942a4f 100644
--- 
a/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowShardingAuditorsStatement.java
+++ 
b/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowShardingAuditorsStatement.java
@@ -18,14 +18,14 @@
 package org.apache.shardingsphere.sharding.distsql.statement;
 
 import 
org.apache.shardingsphere.distsql.statement.rql.rule.database.ShowDatabaseRulesStatement;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 
 /**
  * Show sharding audit algorithms statement.
  */
 public final class ShowShardingAuditorsStatement extends 
ShowDatabaseRulesStatement {
     
-    public ShowShardingAuditorsStatement(final DatabaseSegment database) {
-        super(database);
+    public ShowShardingAuditorsStatement(final FromDatabaseSegment 
fromDatabase) {
+        super(fromDatabase);
     }
 }
diff --git 
a/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowShardingKeyGeneratorsStatement.java
 
b/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowShardingKeyGeneratorsStatement.java
index e5488d4f0ea..d2c87eb6400 100644
--- 
a/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowShardingKeyGeneratorsStatement.java
+++ 
b/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowShardingKeyGeneratorsStatement.java
@@ -18,14 +18,14 @@
 package org.apache.shardingsphere.sharding.distsql.statement;
 
 import 
org.apache.shardingsphere.distsql.statement.rql.rule.database.ShowDatabaseRulesStatement;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 
 /**
  * Show sharding key generators statement.
  */
 public final class ShowShardingKeyGeneratorsStatement extends 
ShowDatabaseRulesStatement {
     
-    public ShowShardingKeyGeneratorsStatement(final DatabaseSegment database) {
-        super(database);
+    public ShowShardingKeyGeneratorsStatement(final FromDatabaseSegment 
fromDatabase) {
+        super(fromDatabase);
     }
 }
diff --git 
a/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowShardingTableNodesStatement.java
 
b/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowShardingTableNodesStatement.java
index 8d1d75088ae..15c486f6e86 100644
--- 
a/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowShardingTableNodesStatement.java
+++ 
b/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowShardingTableNodesStatement.java
@@ -19,7 +19,7 @@ package org.apache.shardingsphere.sharding.distsql.statement;
 
 import lombok.Getter;
 import 
org.apache.shardingsphere.distsql.statement.rql.rule.database.ShowDatabaseRulesStatement;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 
 /**
  * Show sharding table nodes statement.
@@ -29,8 +29,8 @@ public final class ShowShardingTableNodesStatement extends 
ShowDatabaseRulesStat
     
     private final String tableName;
     
-    public ShowShardingTableNodesStatement(final String tableName, final 
DatabaseSegment database) {
-        super(database);
+    public ShowShardingTableNodesStatement(final String tableName, final 
FromDatabaseSegment fromDatabase) {
+        super(fromDatabase);
         this.tableName = tableName;
     }
 }
diff --git 
a/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowShardingTableReferenceRulesStatement.java
 
b/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowShardingTableReferenceRulesStatement.java
index 58bdf6f9a96..86902877945 100644
--- 
a/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowShardingTableReferenceRulesStatement.java
+++ 
b/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowShardingTableReferenceRulesStatement.java
@@ -19,7 +19,7 @@ package org.apache.shardingsphere.sharding.distsql.statement;
 
 import lombok.Getter;
 import 
org.apache.shardingsphere.distsql.statement.rql.rule.database.ShowDatabaseRulesStatement;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 
 /**
  * Show sharding table reference rules statement.
@@ -29,8 +29,8 @@ public final class ShowShardingTableReferenceRulesStatement 
extends ShowDatabase
     
     private final String ruleName;
     
-    public ShowShardingTableReferenceRulesStatement(final String ruleName, 
final DatabaseSegment database) {
-        super(database);
+    public ShowShardingTableReferenceRulesStatement(final String ruleName, 
final FromDatabaseSegment fromDatabase) {
+        super(fromDatabase);
         this.ruleName = ruleName;
     }
 }
diff --git 
a/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowShardingTableRulesStatement.java
 
b/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowShardingTableRulesStatement.java
index 0d4920c1354..ba0aab234ef 100644
--- 
a/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowShardingTableRulesStatement.java
+++ 
b/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowShardingTableRulesStatement.java
@@ -19,7 +19,7 @@ package org.apache.shardingsphere.sharding.distsql.statement;
 
 import lombok.Getter;
 import 
org.apache.shardingsphere.distsql.statement.rql.rule.database.ShowDatabaseRulesStatement;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 
 /**
  * Show sharding table rules statement.
@@ -29,8 +29,8 @@ public final class ShowShardingTableRulesStatement extends 
ShowDatabaseRulesStat
     
     private final String tableName;
     
-    public ShowShardingTableRulesStatement(final String tableName, final 
DatabaseSegment database) {
-        super(database);
+    public ShowShardingTableRulesStatement(final String tableName, final 
FromDatabaseSegment fromDatabase) {
+        super(fromDatabase);
         this.tableName = tableName;
     }
 }
diff --git 
a/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowShardingTableRulesUsedAlgorithmStatement.java
 
b/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowShardingTableRulesUsedAlgorithmStatement.java
index 3ef58db5a97..521490693c3 100644
--- 
a/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowShardingTableRulesUsedAlgorithmStatement.java
+++ 
b/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowShardingTableRulesUsedAlgorithmStatement.java
@@ -18,7 +18,7 @@
 package org.apache.shardingsphere.sharding.distsql.statement;
 
 import 
org.apache.shardingsphere.distsql.statement.rql.rule.database.ShowDatabaseRulesStatement;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 
 import java.util.Optional;
 
@@ -29,8 +29,8 @@ public final class 
ShowShardingTableRulesUsedAlgorithmStatement extends ShowData
     
     private final String shardingAlgorithmName;
     
-    public ShowShardingTableRulesUsedAlgorithmStatement(final String 
shardingAlgorithmName, final DatabaseSegment database) {
-        super(database);
+    public ShowShardingTableRulesUsedAlgorithmStatement(final String 
shardingAlgorithmName, final FromDatabaseSegment fromDatabase) {
+        super(fromDatabase);
         this.shardingAlgorithmName = shardingAlgorithmName;
     }
     
diff --git 
a/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowShardingTableRulesUsedAuditorStatement.java
 
b/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowShardingTableRulesUsedAuditorStatement.java
index f93ccd5a3e3..5ddb30c1ed3 100644
--- 
a/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowShardingTableRulesUsedAuditorStatement.java
+++ 
b/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowShardingTableRulesUsedAuditorStatement.java
@@ -18,7 +18,7 @@
 package org.apache.shardingsphere.sharding.distsql.statement;
 
 import 
org.apache.shardingsphere.distsql.statement.rql.rule.database.ShowDatabaseRulesStatement;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 
 import java.util.Optional;
 
@@ -29,8 +29,8 @@ public final class ShowShardingTableRulesUsedAuditorStatement 
extends ShowDataba
     
     private final String auditorName;
     
-    public ShowShardingTableRulesUsedAuditorStatement(final String 
auditorName, final DatabaseSegment database) {
-        super(database);
+    public ShowShardingTableRulesUsedAuditorStatement(final String 
auditorName, final FromDatabaseSegment fromDatabase) {
+        super(fromDatabase);
         this.auditorName = auditorName;
     }
     
diff --git 
a/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowShardingTableRulesUsedKeyGeneratorStatement.java
 
b/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowShardingTableRulesUsedKeyGeneratorStatement.java
index 5e5c3cb2c0c..5bd680750ec 100644
--- 
a/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowShardingTableRulesUsedKeyGeneratorStatement.java
+++ 
b/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowShardingTableRulesUsedKeyGeneratorStatement.java
@@ -18,7 +18,7 @@
 package org.apache.shardingsphere.sharding.distsql.statement;
 
 import 
org.apache.shardingsphere.distsql.statement.rql.rule.database.ShowDatabaseRulesStatement;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 
 import java.util.Optional;
 
@@ -29,8 +29,8 @@ public final class 
ShowShardingTableRulesUsedKeyGeneratorStatement extends ShowD
     
     private final String keyGeneratorName;
     
-    public ShowShardingTableRulesUsedKeyGeneratorStatement(final String 
keyGeneratorName, final DatabaseSegment database) {
-        super(database);
+    public ShowShardingTableRulesUsedKeyGeneratorStatement(final String 
keyGeneratorName, final FromDatabaseSegment fromDatabase) {
+        super(fromDatabase);
         this.keyGeneratorName = keyGeneratorName;
     }
     
diff --git 
a/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowUnusedShardingAlgorithmsStatement.java
 
b/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowUnusedShardingAlgorithmsStatement.java
index 16e5c764d2c..a9fc85a3916 100644
--- 
a/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowUnusedShardingAlgorithmsStatement.java
+++ 
b/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowUnusedShardingAlgorithmsStatement.java
@@ -18,14 +18,14 @@
 package org.apache.shardingsphere.sharding.distsql.statement;
 
 import 
org.apache.shardingsphere.distsql.statement.rql.rule.database.ShowDatabaseRulesStatement;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 
 /**
  * Show unused sharding algorithms statement.
  */
 public final class ShowUnusedShardingAlgorithmsStatement extends 
ShowDatabaseRulesStatement {
     
-    public ShowUnusedShardingAlgorithmsStatement(final DatabaseSegment 
database) {
-        super(database);
+    public ShowUnusedShardingAlgorithmsStatement(final FromDatabaseSegment 
fromDatabase) {
+        super(fromDatabase);
     }
 }
diff --git 
a/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowUnusedShardingAuditorsStatement.java
 
b/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowUnusedShardingAuditorsStatement.java
index 719d1d1ef81..d2be1d570cf 100644
--- 
a/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowUnusedShardingAuditorsStatement.java
+++ 
b/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowUnusedShardingAuditorsStatement.java
@@ -18,14 +18,14 @@
 package org.apache.shardingsphere.sharding.distsql.statement;
 
 import 
org.apache.shardingsphere.distsql.statement.rql.rule.database.ShowDatabaseRulesStatement;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 
 /**
  * Show unused sharding auditors statement.
  */
 public final class ShowUnusedShardingAuditorsStatement extends 
ShowDatabaseRulesStatement {
     
-    public ShowUnusedShardingAuditorsStatement(final DatabaseSegment database) 
{
-        super(database);
+    public ShowUnusedShardingAuditorsStatement(final FromDatabaseSegment 
fromDatabase) {
+        super(fromDatabase);
     }
 }
diff --git 
a/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowUnusedShardingKeyGeneratorsStatement.java
 
b/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowUnusedShardingKeyGeneratorsStatement.java
index 93c6d15135c..cf49b868f27 100644
--- 
a/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowUnusedShardingKeyGeneratorsStatement.java
+++ 
b/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/statement/ShowUnusedShardingKeyGeneratorsStatement.java
@@ -18,14 +18,14 @@
 package org.apache.shardingsphere.sharding.distsql.statement;
 
 import 
org.apache.shardingsphere.distsql.statement.rql.rule.database.ShowDatabaseRulesStatement;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 
 /**
  * Show unused sharding key generators statement.
  */
 public final class ShowUnusedShardingKeyGeneratorsStatement extends 
ShowDatabaseRulesStatement {
     
-    public ShowUnusedShardingKeyGeneratorsStatement(final DatabaseSegment 
database) {
-        super(database);
+    public ShowUnusedShardingKeyGeneratorsStatement(final FromDatabaseSegment 
fromDatabase) {
+        super(fromDatabase);
     }
 }
diff --git 
a/infra/binder/core/src/test/java/org/apache/shardingsphere/infra/binder/context/statement/type/dal/ShowColumnsStatementContextTest.java
 
b/infra/binder/core/src/test/java/org/apache/shardingsphere/infra/binder/context/statement/type/dal/ShowColumnsStatementContextTest.java
index f84be8be10c..7bc292d2185 100644
--- 
a/infra/binder/core/src/test/java/org/apache/shardingsphere/infra/binder/context/statement/type/dal/ShowColumnsStatementContextTest.java
+++ 
b/infra/binder/core/src/test/java/org/apache/shardingsphere/infra/binder/context/statement/type/dal/ShowColumnsStatementContextTest.java
@@ -43,7 +43,7 @@ class ShowColumnsStatementContextTest {
         TableNameSegment tableNameSegment = new TableNameSegment(0, 0, new 
IdentifierValue("foo_tbl"));
         tableNameSegment.setTableBoundInfo(new TableSegmentBoundInfo(new 
IdentifierValue("foo_db"), new IdentifierValue("foo_schema")));
         when(sqlStatement.getTable()).thenReturn(new 
SimpleTableSegment(tableNameSegment));
-        FromDatabaseSegment fromDatabase = new FromDatabaseSegment(0, 0, new 
DatabaseSegment(0, 0, new IdentifierValue("foo_db")));
+        FromDatabaseSegment fromDatabase = new FromDatabaseSegment(0, new 
DatabaseSegment(0, 0, new IdentifierValue("foo_db")));
         
when(sqlStatement.getFromDatabase()).thenReturn(Optional.of(fromDatabase));
         ShowColumnsStatementContext actual = new 
ShowColumnsStatementContext(mock(), sqlStatement);
         assertThat(actual.getSqlStatement(), is(sqlStatement));
diff --git 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/util/DatabaseNameUtils.java
 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/util/DatabaseNameUtils.java
index b958c5dc554..35ae0f4280c 100644
--- 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/util/DatabaseNameUtils.java
+++ 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/util/DatabaseNameUtils.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.distsql.handler.util;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.FromDatabaseAvailable;
@@ -39,7 +40,9 @@ public final class DatabaseNameUtils {
      * @return database name
      */
     public static String getDatabaseName(final SQLStatement sqlStatement, 
final String currentDatabaseName) {
-        Optional<DatabaseSegment> databaseSegment = sqlStatement instanceof 
FromDatabaseAvailable ? ((FromDatabaseAvailable) 
sqlStatement).getFromDatabase() : Optional.empty();
+        Optional<DatabaseSegment> databaseSegment = sqlStatement instanceof 
FromDatabaseAvailable
+                ? ((FromDatabaseAvailable) 
sqlStatement).getFromDatabase().map(FromDatabaseSegment::getDatabase)
+                : Optional.empty();
         return databaseSegment.map(optional -> 
optional.getIdentifier().getValue()).orElse(currentDatabaseName);
     }
 }
diff --git 
a/infra/distsql-handler/src/test/java/org/apache/shardingsphere/distsql/handler/executor/rql/resource/ShowRulesUsedStorageUnitExecutorTest.java
 
b/infra/distsql-handler/src/test/java/org/apache/shardingsphere/distsql/handler/executor/rql/resource/ShowRulesUsedStorageUnitExecutorTest.java
index 0cce299de71..3fffaaa85c4 100644
--- 
a/infra/distsql-handler/src/test/java/org/apache/shardingsphere/distsql/handler/executor/rql/resource/ShowRulesUsedStorageUnitExecutorTest.java
+++ 
b/infra/distsql-handler/src/test/java/org/apache/shardingsphere/distsql/handler/executor/rql/resource/ShowRulesUsedStorageUnitExecutorTest.java
@@ -24,7 +24,7 @@ import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.mode.manager.ContextManager;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 import org.apache.shardingsphere.test.fixture.jdbc.MockedDataSource;
 import org.junit.jupiter.api.Test;
 
@@ -45,7 +45,7 @@ class ShowRulesUsedStorageUnitExecutorTest {
     @Test
     void assertGetRowData() {
         executor.setDatabase(mockDatabase());
-        ShowRulesUsedStorageUnitStatement sqlStatement = new 
ShowRulesUsedStorageUnitStatement("foo_ds", mock(DatabaseSegment.class));
+        ShowRulesUsedStorageUnitStatement sqlStatement = new 
ShowRulesUsedStorageUnitStatement("foo_ds", mock(FromDatabaseSegment.class));
         Collection<LocalDataQueryResultRow> rowData = 
executor.getRows(sqlStatement, mock(ContextManager.class));
         assertThat(rowData.size(), is(1));
         Iterator<LocalDataQueryResultRow> actual = rowData.iterator();
@@ -64,7 +64,7 @@ class ShowRulesUsedStorageUnitExecutorTest {
     @Test
     void assertGetEmptyRowData() {
         executor.setDatabase(mockEmptyDatabase());
-        ShowRulesUsedStorageUnitStatement sqlStatement = new 
ShowRulesUsedStorageUnitStatement("empty_ds", mock(DatabaseSegment.class));
+        ShowRulesUsedStorageUnitStatement sqlStatement = new 
ShowRulesUsedStorageUnitStatement("empty_ds", mock(FromDatabaseSegment.class));
         assertTrue(executor.getRows(sqlStatement, 
mock(ContextManager.class)).isEmpty());
     }
     
diff --git 
a/infra/distsql-handler/src/test/java/org/apache/shardingsphere/distsql/handler/executor/rql/resource/ShowStorageUnitExecutorTest.java
 
b/infra/distsql-handler/src/test/java/org/apache/shardingsphere/distsql/handler/executor/rql/resource/ShowStorageUnitExecutorTest.java
index 395e8032e79..2d4d7d0a4de 100644
--- 
a/infra/distsql-handler/src/test/java/org/apache/shardingsphere/distsql/handler/executor/rql/resource/ShowStorageUnitExecutorTest.java
+++ 
b/infra/distsql-handler/src/test/java/org/apache/shardingsphere/distsql/handler/executor/rql/resource/ShowStorageUnitExecutorTest.java
@@ -23,7 +23,7 @@ import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryRes
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
 import org.apache.shardingsphere.mode.manager.ContextManager;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 import org.apache.shardingsphere.test.fixture.jdbc.MockedDataSource;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
@@ -70,7 +70,7 @@ class ShowStorageUnitExecutorTest {
     @Test
     void assertGetRowsWithAllStorageUnits() {
         Map<Integer, String> storageUnitNames = Maps.of(0, "ds_2", 1, "ds_1", 
2, "ds_0");
-        Collection<LocalDataQueryResultRow> actual = executor.getRows(new 
ShowStorageUnitsStatement(mock(DatabaseSegment.class), null), 
mock(ContextManager.class));
+        Collection<LocalDataQueryResultRow> actual = executor.getRows(new 
ShowStorageUnitsStatement(mock(FromDatabaseSegment.class), null), 
mock(ContextManager.class));
         assertThat(actual.size(), is(3));
         Iterator<LocalDataQueryResultRow> iterator = actual.iterator();
         int index = 0;
@@ -94,7 +94,7 @@ class ShowStorageUnitExecutorTest {
     
     @Test
     void assertGetRowsWithLikePattern() {
-        Collection<LocalDataQueryResultRow> actual = executor.getRows(new 
ShowStorageUnitsStatement(mock(DatabaseSegment.class), "%_0"), 
mock(ContextManager.class));
+        Collection<LocalDataQueryResultRow> actual = executor.getRows(new 
ShowStorageUnitsStatement(mock(FromDatabaseSegment.class), "%_0"), 
mock(ContextManager.class));
         assertThat(actual.size(), is(1));
         LocalDataQueryResultRow row = actual.iterator().next();
         assertThat(row.getCell(1), is("ds_0"));
diff --git 
a/infra/distsql-handler/src/test/java/org/apache/shardingsphere/distsql/handler/util/DatabaseNameUtilsTest.java
 
b/infra/distsql-handler/src/test/java/org/apache/shardingsphere/distsql/handler/util/DatabaseNameUtilsTest.java
index fd098355277..c2be6024ec4 100644
--- 
a/infra/distsql-handler/src/test/java/org/apache/shardingsphere/distsql/handler/util/DatabaseNameUtilsTest.java
+++ 
b/infra/distsql-handler/src/test/java/org/apache/shardingsphere/distsql/handler/util/DatabaseNameUtilsTest.java
@@ -17,9 +17,9 @@
 
 package org.apache.shardingsphere.distsql.handler.util;
 
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
-import 
org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.FromDatabaseAvailable;
+import 
org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement;
 import org.junit.jupiter.api.Test;
 
 import java.util.Optional;
@@ -36,8 +36,8 @@ class DatabaseNameUtilsTest {
     @Test
     void assertDatabaseNameWhenAvailableInSQLStatement() {
         FromDatabaseAvailable sqlStatement = mock(FromDatabaseAvailable.class, 
withSettings().extraInterfaces(SQLStatement.class));
-        DatabaseSegment databaseSegment = mock(DatabaseSegment.class, 
RETURNS_DEEP_STUBS);
-        when(databaseSegment.getIdentifier().getValue()).thenReturn("bar_db");
+        FromDatabaseSegment databaseSegment = mock(FromDatabaseSegment.class, 
RETURNS_DEEP_STUBS);
+        
when(databaseSegment.getDatabase().getIdentifier().getValue()).thenReturn("bar_db");
         
when(sqlStatement.getFromDatabase()).thenReturn(Optional.of(databaseSegment));
         assertThat(DatabaseNameUtils.getDatabaseName((SQLStatement) 
sqlStatement, "foo_db"), is("bar_db"));
     }
diff --git 
a/kernel/single/distsql/parser/src/main/java/org/apache/shardingsphere/single/distsql/parser/core/SingleDistSQLStatementVisitor.java
 
b/kernel/single/distsql/parser/src/main/java/org/apache/shardingsphere/single/distsql/parser/core/SingleDistSQLStatementVisitor.java
index 391e17e261e..8fdbc52d634 100644
--- 
a/kernel/single/distsql/parser/src/main/java/org/apache/shardingsphere/single/distsql/parser/core/SingleDistSQLStatementVisitor.java
+++ 
b/kernel/single/distsql/parser/src/main/java/org/apache/shardingsphere/single/distsql/parser/core/SingleDistSQLStatementVisitor.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.single.distsql.parser.core;
 
 import org.antlr.v4.runtime.tree.ParseTree;
+import org.antlr.v4.runtime.tree.TerminalNode;
 import 
org.apache.shardingsphere.distsql.parser.autogen.SingleDistSQLStatementBaseVisitor;
 import 
org.apache.shardingsphere.distsql.parser.autogen.SingleDistSQLStatementParser.AllSchamesAndTablesFromStorageUnitContext;
 import 
org.apache.shardingsphere.distsql.parser.autogen.SingleDistSQLStatementParser.AllTablesContext;
@@ -45,6 +46,7 @@ import 
org.apache.shardingsphere.single.distsql.statement.rql.ShowSingleTablesSt
 import 
org.apache.shardingsphere.single.distsql.statement.rql.ShowUnloadedSingleTablesStatement;
 import org.apache.shardingsphere.sql.parser.api.ASTNode;
 import org.apache.shardingsphere.sql.parser.api.visitor.SQLVisitor;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
 
@@ -59,7 +61,7 @@ public final class SingleDistSQLStatementVisitor extends 
SingleDistSQLStatementB
     
     @Override
     public ASTNode visitCountSingleTable(final CountSingleTableContext ctx) {
-        return new CountRuleStatement(null == ctx.databaseName() ? null : 
(DatabaseSegment) visit(ctx.databaseName()), "SINGLE");
+        return new CountRuleStatement(null == ctx.databaseName() ? null : new 
FromDatabaseSegment(ctx.FROM().getSymbol().getStartIndex(), (DatabaseSegment) 
visit(ctx.databaseName())), "SINGLE");
     }
     
     @Override
@@ -69,13 +71,14 @@ public final class SingleDistSQLStatementVisitor extends 
SingleDistSQLStatementB
     
     @Override
     public ASTNode visitShowDefaultSingleTableStorageUnit(final 
ShowDefaultSingleTableStorageUnitContext ctx) {
-        return new ShowDefaultSingleTableStorageUnitStatement(null == 
ctx.databaseName() ? null : (DatabaseSegment) visit(ctx.databaseName()));
+        return new ShowDefaultSingleTableStorageUnitStatement(
+                null == ctx.databaseName() ? null : new 
FromDatabaseSegment(ctx.FROM().getSymbol().getStartIndex(), (DatabaseSegment) 
visit(ctx.databaseName())));
     }
     
     @Override
     public ASTNode visitShowSingleTables(final ShowSingleTablesContext ctx) {
-        return new ShowSingleTablesStatement(null == ctx.databaseName() ? null 
: (DatabaseSegment) visit(ctx.databaseName()),
-                null == ctx.showLike() ? null : 
getIdentifierValue(ctx.showLike().likePattern()));
+        FromDatabaseSegment fromDatabase = null == ctx.databaseName() ? null : 
new FromDatabaseSegment(ctx.FROM().getSymbol().getStartIndex(), 
(DatabaseSegment) visit(ctx.databaseName()));
+        return new ShowSingleTablesStatement(fromDatabase, null == 
ctx.showLike() ? null : getIdentifierValue(ctx.showLike().likePattern()));
     }
     
     @Override
@@ -119,13 +122,13 @@ public final class SingleDistSQLStatementVisitor extends 
SingleDistSQLStatementB
     
     @Override
     public ASTNode visitShowUnloadedSingleTables(final 
ShowUnloadedSingleTablesContext ctx) {
-        return null == ctx.fromClause() ? new 
ShowUnloadedSingleTablesStatement(null, null, null) : 
visitShowUnloadedSingleTablesWithFromClause(ctx.fromClause());
+        return null == ctx.fromClause() ? new 
ShowUnloadedSingleTablesStatement(null, null, null) : 
visitShowUnloadedSingleTablesWithFromClause(ctx.FROM(), ctx.fromClause());
     }
     
-    private ASTNode visitShowUnloadedSingleTablesWithFromClause(final 
FromClauseContext ctx) {
-        return new ShowUnloadedSingleTablesStatement(null == 
ctx.databaseName() ? null : (DatabaseSegment) visit(ctx.databaseName()),
-                null == ctx.storageUnitName() ? null : 
getIdentifierValue(ctx.storageUnitName()),
-                null == ctx.schemaName() ? null : 
getIdentifierValue(ctx.schemaName()));
+    private ASTNode visitShowUnloadedSingleTablesWithFromClause(final 
TerminalNode fromCtx, final FromClauseContext ctx) {
+        FromDatabaseSegment fromDatabase = null == ctx.databaseName() ? null : 
new FromDatabaseSegment(fromCtx.getSymbol().getStartIndex(), (DatabaseSegment) 
visit(ctx.databaseName()));
+        return new ShowUnloadedSingleTablesStatement(fromDatabase,
+                null == ctx.storageUnitName() ? null : 
getIdentifierValue(ctx.storageUnitName()), null == ctx.schemaName() ? null : 
getIdentifierValue(ctx.schemaName()));
     }
     
     @Override
diff --git 
a/kernel/single/distsql/statement/src/main/java/org/apache/shardingsphere/single/distsql/statement/rql/ShowDefaultSingleTableStorageUnitStatement.java
 
b/kernel/single/distsql/statement/src/main/java/org/apache/shardingsphere/single/distsql/statement/rql/ShowDefaultSingleTableStorageUnitStatement.java
index 42c01cbce8f..7ec4a75573e 100644
--- 
a/kernel/single/distsql/statement/src/main/java/org/apache/shardingsphere/single/distsql/statement/rql/ShowDefaultSingleTableStorageUnitStatement.java
+++ 
b/kernel/single/distsql/statement/src/main/java/org/apache/shardingsphere/single/distsql/statement/rql/ShowDefaultSingleTableStorageUnitStatement.java
@@ -19,7 +19,7 @@ package 
org.apache.shardingsphere.single.distsql.statement.rql;
 
 import lombok.Getter;
 import 
org.apache.shardingsphere.distsql.statement.rql.rule.database.ShowDatabaseRulesStatement;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 
 /**
  * Show default single table storage unit statement.
@@ -27,7 +27,7 @@ import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.Datab
 @Getter
 public final class ShowDefaultSingleTableStorageUnitStatement extends 
ShowDatabaseRulesStatement {
     
-    public ShowDefaultSingleTableStorageUnitStatement(final DatabaseSegment 
database) {
-        super(database);
+    public ShowDefaultSingleTableStorageUnitStatement(final 
FromDatabaseSegment fromDatabase) {
+        super(fromDatabase);
     }
 }
diff --git 
a/kernel/single/distsql/statement/src/main/java/org/apache/shardingsphere/single/distsql/statement/rql/ShowSingleTablesStatement.java
 
b/kernel/single/distsql/statement/src/main/java/org/apache/shardingsphere/single/distsql/statement/rql/ShowSingleTablesStatement.java
index 1d2c378b0ce..d35a5f2ed01 100644
--- 
a/kernel/single/distsql/statement/src/main/java/org/apache/shardingsphere/single/distsql/statement/rql/ShowSingleTablesStatement.java
+++ 
b/kernel/single/distsql/statement/src/main/java/org/apache/shardingsphere/single/distsql/statement/rql/ShowSingleTablesStatement.java
@@ -18,14 +18,14 @@
 package org.apache.shardingsphere.single.distsql.statement.rql;
 
 import 
org.apache.shardingsphere.distsql.statement.rql.resource.ShowTablesStatement;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 
 /**
  * Show single tables statement.
  */
 public final class ShowSingleTablesStatement extends ShowTablesStatement {
     
-    public ShowSingleTablesStatement(final DatabaseSegment database, final 
String likePattern) {
-        super(database, likePattern);
+    public ShowSingleTablesStatement(final FromDatabaseSegment fromDatabase, 
final String likePattern) {
+        super(fromDatabase, likePattern);
     }
 }
diff --git 
a/kernel/single/distsql/statement/src/main/java/org/apache/shardingsphere/single/distsql/statement/rql/ShowUnloadedSingleTablesStatement.java
 
b/kernel/single/distsql/statement/src/main/java/org/apache/shardingsphere/single/distsql/statement/rql/ShowUnloadedSingleTablesStatement.java
index ec83ce3e556..fee1cfa36ba 100644
--- 
a/kernel/single/distsql/statement/src/main/java/org/apache/shardingsphere/single/distsql/statement/rql/ShowUnloadedSingleTablesStatement.java
+++ 
b/kernel/single/distsql/statement/src/main/java/org/apache/shardingsphere/single/distsql/statement/rql/ShowUnloadedSingleTablesStatement.java
@@ -18,7 +18,7 @@
 package org.apache.shardingsphere.single.distsql.statement.rql;
 
 import 
org.apache.shardingsphere.distsql.statement.rql.resource.ShowTablesStatement;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 
 import java.util.Optional;
 
@@ -31,9 +31,9 @@ public final class ShowUnloadedSingleTablesStatement extends 
ShowTablesStatement
     
     private final String schemaName;
     
-    public ShowUnloadedSingleTablesStatement(final DatabaseSegment database, 
final String storageUnitName, final String schemaName) {
+    public ShowUnloadedSingleTablesStatement(final FromDatabaseSegment 
fromDatabase, final String storageUnitName, final String schemaName) {
         // TODO support like later
-        super(database, null);
+        super(fromDatabase, null);
         this.storageUnitName = storageUnitName;
         this.schemaName = schemaName;
     }
diff --git 
a/parser/distsql/engine/src/main/java/org/apache/shardingsphere/distsql/parser/core/kernel/KernelDistSQLStatementVisitor.java
 
b/parser/distsql/engine/src/main/java/org/apache/shardingsphere/distsql/parser/core/kernel/KernelDistSQLStatementVisitor.java
index c725b1e642c..31645c1ce5a 100644
--- 
a/parser/distsql/engine/src/main/java/org/apache/shardingsphere/distsql/parser/core/kernel/KernelDistSQLStatementVisitor.java
+++ 
b/parser/distsql/engine/src/main/java/org/apache/shardingsphere/distsql/parser/core/kernel/KernelDistSQLStatementVisitor.java
@@ -98,6 +98,7 @@ import 
org.apache.shardingsphere.distsql.statement.rql.rule.database.ShowRulesUs
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.enums.QuoteCharacter;
 import org.apache.shardingsphere.sql.parser.api.ASTNode;
 import org.apache.shardingsphere.sql.parser.api.visitor.SQLVisitor;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
 import 
org.apache.shardingsphere.sql.parser.statement.core.value.literal.impl.StringLiteralValue;
@@ -134,7 +135,9 @@ public final class KernelDistSQLStatementVisitor extends 
KernelDistSQLStatementB
     @Override
     public ASTNode visitShowTableMetadata(final ShowTableMetadataContext ctx) {
         Collection<String> tableNames = 
ctx.tableName().stream().map(this::getIdentifierValue).collect(Collectors.toSet());
-        return new ShowTableMetaDataStatement(tableNames, null == 
ctx.databaseName() ? null : (DatabaseSegment) visit(ctx.databaseName()));
+        return new ShowTableMetaDataStatement(tableNames, null == 
ctx.databaseName()
+                ? null
+                : new 
FromDatabaseSegment(ctx.FROM().getSymbol().getStartIndex(), (DatabaseSegment) 
visit(ctx.databaseName())));
     }
     
     @Override
@@ -216,9 +219,9 @@ public final class KernelDistSQLStatementVisitor extends 
KernelDistSQLStatementB
     
     @Override
     public ASTNode visitShowStorageUnits(final ShowStorageUnitsContext ctx) {
-        DatabaseSegment database = null == ctx.databaseName() ? null : 
(DatabaseSegment) visit(ctx.databaseName());
+        FromDatabaseSegment fromDatabase = null == ctx.databaseName() ? null : 
new FromDatabaseSegment(ctx.FROM().getSymbol().getStartIndex(), 
(DatabaseSegment) visit(ctx.databaseName()));
         String likePattern = null == ctx.showLike() ? null : 
getIdentifierValue(ctx.showLike().likePattern());
-        return new ShowStorageUnitsStatement(database, likePattern);
+        return new ShowStorageUnitsStatement(fromDatabase, likePattern);
     }
     
     @Override
@@ -233,9 +236,8 @@ public final class KernelDistSQLStatementVisitor extends 
KernelDistSQLStatementB
     
     @Override
     public ASTNode visitShowLogicalTables(final ShowLogicalTablesContext ctx) {
-        return new ShowLogicalTablesStatement(null != ctx.FULL(),
-                null == ctx.databaseName() ? null : (DatabaseSegment) 
visit(ctx.databaseName()),
-                null == ctx.showLike() ? null : 
getIdentifierValue(ctx.showLike().likePattern()));
+        FromDatabaseSegment fromDatabase = null == ctx.databaseName() ? null : 
new FromDatabaseSegment(ctx.FROM().getSymbol().getStartIndex(), 
(DatabaseSegment) visit(ctx.databaseName()));
+        return new ShowLogicalTablesStatement(null != ctx.FULL(), 
fromDatabase, null == ctx.showLike() ? null : 
getIdentifierValue(ctx.showLike().likePattern()));
     }
     
     @Override
@@ -271,7 +273,8 @@ public final class KernelDistSQLStatementVisitor extends 
KernelDistSQLStatementB
     
     @Override
     public ASTNode visitExportDatabaseConfiguration(final 
ExportDatabaseConfigurationContext ctx) {
-        return new ExportDatabaseConfigurationStatement(null == 
ctx.databaseName() ? null : (DatabaseSegment) visit(ctx.databaseName()), 
getIdentifierValue(ctx.filePath()));
+        return new 
ExportDatabaseConfigurationStatement(getIdentifierValue(ctx.filePath()),
+                null == ctx.databaseName() ? null : new 
FromDatabaseSegment(ctx.FROM().getSymbol().getStartIndex(), (DatabaseSegment) 
visit(ctx.databaseName())));
     }
     
     @Override
@@ -291,7 +294,8 @@ public final class KernelDistSQLStatementVisitor extends 
KernelDistSQLStatementB
     
     @Override
     public ASTNode visitShowRulesUsedStorageUnit(final 
ShowRulesUsedStorageUnitContext ctx) {
-        return new 
ShowRulesUsedStorageUnitStatement(getIdentifierValue(ctx.storageUnitName()), 
null == ctx.databaseName() ? null : (DatabaseSegment) 
visit(ctx.databaseName()));
+        return new 
ShowRulesUsedStorageUnitStatement(getIdentifierValue(ctx.storageUnitName()),
+                null == ctx.databaseName() ? null : new 
FromDatabaseSegment(ctx.FROM().getSymbol().getStartIndex(), (DatabaseSegment) 
visit(ctx.databaseName())));
     }
     
     @Override
diff --git 
a/parser/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/statement/ral/queryable/export/ExportDatabaseConfigurationStatement.java
 
b/parser/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/statement/ral/queryable/export/ExportDatabaseConfigurationStatement.java
index be6493131ae..bfe81446df9 100644
--- 
a/parser/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/statement/ral/queryable/export/ExportDatabaseConfigurationStatement.java
+++ 
b/parser/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/statement/ral/queryable/export/ExportDatabaseConfigurationStatement.java
@@ -19,7 +19,7 @@ package 
org.apache.shardingsphere.distsql.statement.ral.queryable.export;
 
 import lombok.RequiredArgsConstructor;
 import 
org.apache.shardingsphere.distsql.statement.ral.queryable.QueryableRALStatement;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.FromDatabaseAvailable;
 
 import java.util.Optional;
@@ -30,14 +30,9 @@ import java.util.Optional;
 @RequiredArgsConstructor
 public final class ExportDatabaseConfigurationStatement extends 
QueryableRALStatement implements FromDatabaseAvailable {
     
-    private final DatabaseSegment database;
-    
     private final String filePath;
     
-    @Override
-    public Optional<DatabaseSegment> getFromDatabase() {
-        return Optional.ofNullable(database);
-    }
+    private final FromDatabaseSegment fromDatabase;
     
     /**
      * Get file path.
@@ -47,4 +42,9 @@ public final class ExportDatabaseConfigurationStatement 
extends QueryableRALStat
     public Optional<String> getFilePath() {
         return Optional.ofNullable(filePath);
     }
+    
+    @Override
+    public Optional<FromDatabaseSegment> getFromDatabase() {
+        return Optional.ofNullable(fromDatabase);
+    }
 }
diff --git 
a/parser/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/statement/ral/queryable/show/ShowTableMetaDataStatement.java
 
b/parser/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/statement/ral/queryable/show/ShowTableMetaDataStatement.java
index b52169826e9..f02fa0fecbe 100644
--- 
a/parser/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/statement/ral/queryable/show/ShowTableMetaDataStatement.java
+++ 
b/parser/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/statement/ral/queryable/show/ShowTableMetaDataStatement.java
@@ -20,7 +20,7 @@ package 
org.apache.shardingsphere.distsql.statement.ral.queryable.show;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import 
org.apache.shardingsphere.distsql.statement.ral.queryable.QueryableRALStatement;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.FromDatabaseAvailable;
 
 import java.util.Collection;
@@ -35,10 +35,10 @@ public final class ShowTableMetaDataStatement extends 
QueryableRALStatement impl
     @Getter
     private final Collection<String> tableNames;
     
-    private final DatabaseSegment database;
+    private final FromDatabaseSegment fromDatabase;
     
     @Override
-    public Optional<DatabaseSegment> getFromDatabase() {
-        return Optional.ofNullable(database);
+    public Optional<FromDatabaseSegment> getFromDatabase() {
+        return Optional.ofNullable(fromDatabase);
     }
 }
diff --git 
a/parser/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/statement/rql/resource/ShowLogicalTablesStatement.java
 
b/parser/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/statement/rql/resource/ShowLogicalTablesStatement.java
index 6144ecab3d9..06a2313fe5c 100644
--- 
a/parser/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/statement/rql/resource/ShowLogicalTablesStatement.java
+++ 
b/parser/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/statement/rql/resource/ShowLogicalTablesStatement.java
@@ -18,7 +18,7 @@
 package org.apache.shardingsphere.distsql.statement.rql.resource;
 
 import lombok.Getter;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 
 /**
  * Show logical tables statement.
@@ -28,8 +28,8 @@ public final class ShowLogicalTablesStatement extends 
ShowTablesStatement {
     
     private final boolean containsFull;
     
-    public ShowLogicalTablesStatement(final boolean containsFull, final 
DatabaseSegment database, final String likePattern) {
-        super(database, likePattern);
+    public ShowLogicalTablesStatement(final boolean containsFull, final 
FromDatabaseSegment fromDatabase, final String likePattern) {
+        super(fromDatabase, likePattern);
         this.containsFull = containsFull;
     }
 }
diff --git 
a/parser/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/statement/rql/resource/ShowStorageUnitsStatement.java
 
b/parser/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/statement/rql/resource/ShowStorageUnitsStatement.java
index 52d40284766..e369af52f1d 100644
--- 
a/parser/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/statement/rql/resource/ShowStorageUnitsStatement.java
+++ 
b/parser/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/statement/rql/resource/ShowStorageUnitsStatement.java
@@ -19,7 +19,7 @@ package 
org.apache.shardingsphere.distsql.statement.rql.resource;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.FromDatabaseAvailable;
 
 import java.util.Optional;
@@ -31,15 +31,10 @@ import java.util.Optional;
 @RequiredArgsConstructor
 public final class ShowStorageUnitsStatement extends ResourceQueryStatement 
implements FromDatabaseAvailable {
     
-    private final DatabaseSegment database;
+    private final FromDatabaseSegment fromDatabase;
     
     private final String likePattern;
     
-    @Override
-    public Optional<DatabaseSegment> getFromDatabase() {
-        return Optional.ofNullable(database);
-    }
-    
     /**
      * Get like pattern.
      *
@@ -48,4 +43,9 @@ public final class ShowStorageUnitsStatement extends 
ResourceQueryStatement impl
     public Optional<String> getLikePattern() {
         return Optional.ofNullable(likePattern);
     }
+    
+    @Override
+    public Optional<FromDatabaseSegment> getFromDatabase() {
+        return Optional.ofNullable(fromDatabase);
+    }
 }
diff --git 
a/parser/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/statement/rql/resource/ShowTablesStatement.java
 
b/parser/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/statement/rql/resource/ShowTablesStatement.java
index 0eacd1642ce..cce51692741 100644
--- 
a/parser/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/statement/rql/resource/ShowTablesStatement.java
+++ 
b/parser/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/statement/rql/resource/ShowTablesStatement.java
@@ -18,7 +18,7 @@
 package org.apache.shardingsphere.distsql.statement.rql.resource;
 
 import lombok.RequiredArgsConstructor;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.FromDatabaseAvailable;
 
 import java.util.Optional;
@@ -29,20 +29,10 @@ import java.util.Optional;
 @RequiredArgsConstructor
 public abstract class ShowTablesStatement extends ResourceQueryStatement 
implements FromDatabaseAvailable {
     
-    private final DatabaseSegment database;
+    private final FromDatabaseSegment fromDatabase;
     
     private final String likePattern;
     
-    /**
-     * Get database.
-     *
-     * @return database
-     */
-    @Override
-    public final Optional<DatabaseSegment> getFromDatabase() {
-        return Optional.ofNullable(database);
-    }
-    
     /**
      * Get like pattern.
      *
@@ -51,4 +41,9 @@ public abstract class ShowTablesStatement extends 
ResourceQueryStatement impleme
     public Optional<String> getLikePattern() {
         return Optional.ofNullable(likePattern);
     }
+    
+    @Override
+    public final Optional<FromDatabaseSegment> getFromDatabase() {
+        return Optional.ofNullable(fromDatabase);
+    }
 }
diff --git 
a/parser/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/statement/rql/rule/database/CountRuleStatement.java
 
b/parser/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/statement/rql/rule/database/CountRuleStatement.java
index 9a0f2cfca3d..e7555f31723 100644
--- 
a/parser/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/statement/rql/rule/database/CountRuleStatement.java
+++ 
b/parser/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/statement/rql/rule/database/CountRuleStatement.java
@@ -18,7 +18,7 @@
 package org.apache.shardingsphere.distsql.statement.rql.rule.database;
 
 import lombok.Getter;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 
 /**
  * Count rule statement.
@@ -28,8 +28,8 @@ public final class CountRuleStatement extends 
ShowDatabaseRulesStatement {
     
     private final String type;
     
-    public CountRuleStatement(final DatabaseSegment database, final String 
type) {
-        super(database);
+    public CountRuleStatement(final FromDatabaseSegment fromDatabase, final 
String type) {
+        super(fromDatabase);
         this.type = type;
     }
 }
diff --git 
a/parser/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/statement/rql/rule/database/ShowDatabaseRulesStatement.java
 
b/parser/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/statement/rql/rule/database/ShowDatabaseRulesStatement.java
index d3ed05218fd..591ffea8b78 100644
--- 
a/parser/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/statement/rql/rule/database/ShowDatabaseRulesStatement.java
+++ 
b/parser/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/statement/rql/rule/database/ShowDatabaseRulesStatement.java
@@ -19,7 +19,7 @@ package 
org.apache.shardingsphere.distsql.statement.rql.rule.database;
 
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.distsql.statement.rql.rule.RuleQueryStatement;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.FromDatabaseAvailable;
 
 import java.util.Optional;
@@ -30,10 +30,10 @@ import java.util.Optional;
 @RequiredArgsConstructor
 public abstract class ShowDatabaseRulesStatement extends RuleQueryStatement 
implements FromDatabaseAvailable {
     
-    private final DatabaseSegment database;
+    private final FromDatabaseSegment fromDatabase;
     
     @Override
-    public final Optional<DatabaseSegment> getFromDatabase() {
-        return Optional.ofNullable(database);
+    public final Optional<FromDatabaseSegment> getFromDatabase() {
+        return Optional.ofNullable(fromDatabase);
     }
 }
diff --git 
a/parser/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/statement/rql/rule/database/ShowRulesUsedStorageUnitStatement.java
 
b/parser/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/statement/rql/rule/database/ShowRulesUsedStorageUnitStatement.java
index 30a355bf9d2..48981e8d511 100644
--- 
a/parser/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/statement/rql/rule/database/ShowRulesUsedStorageUnitStatement.java
+++ 
b/parser/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/statement/rql/rule/database/ShowRulesUsedStorageUnitStatement.java
@@ -18,7 +18,7 @@
 package org.apache.shardingsphere.distsql.statement.rql.rule.database;
 
 import lombok.Getter;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 
 /**
  * Show rules used storage unit statement.
@@ -28,8 +28,8 @@ public final class ShowRulesUsedStorageUnitStatement extends 
ShowDatabaseRulesSt
     
     private final String storageUnitName;
     
-    public ShowRulesUsedStorageUnitStatement(final String storageUnitName, 
final DatabaseSegment database) {
-        super(database);
+    public ShowRulesUsedStorageUnitStatement(final String storageUnitName, 
final FromDatabaseSegment fromDatabase) {
+        super(fromDatabase);
         this.storageUnitName = storageUnitName;
     }
 }
diff --git 
a/parser/sql/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/doris/visitor/statement/type/DorisDALStatementVisitor.java
 
b/parser/sql/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/doris/visitor/statement/type/DorisDALStatementVisitor.java
index 72671e94743..833d5433ce5 100644
--- 
a/parser/sql/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/doris/visitor/statement/type/DorisDALStatementVisitor.java
+++ 
b/parser/sql/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/doris/visitor/statement/type/DorisDALStatementVisitor.java
@@ -841,7 +841,7 @@ public final class DorisDALStatementVisitor extends 
DorisStatementVisitor implem
     
     @Override
     public ASTNode visitFromDatabase(final FromDatabaseContext ctx) {
-        return new FromDatabaseSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), (DatabaseSegment) visit(ctx.databaseName()));
+        return new FromDatabaseSegment(ctx.getStart().getStartIndex(), 
(DatabaseSegment) visit(ctx.databaseName()));
     }
     
     @Override
diff --git 
a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDALStatementVisitor.java
 
b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDALStatementVisitor.java
index 3b3b3842234..f29f96f9e06 100644
--- 
a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDALStatementVisitor.java
+++ 
b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDALStatementVisitor.java
@@ -852,7 +852,7 @@ public final class MySQLDALStatementVisitor extends 
MySQLStatementVisitor implem
     
     @Override
     public ASTNode visitFromDatabase(final FromDatabaseContext ctx) {
-        return new FromDatabaseSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), (DatabaseSegment) visit(ctx.databaseName()));
+        return new FromDatabaseSegment(ctx.getStart().getStartIndex(), 
(DatabaseSegment) visit(ctx.databaseName()));
     }
     
     @Override
diff --git 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/dal/FromDatabaseSegment.java
 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/dal/FromDatabaseSegment.java
index f69227831df..22887fd8eff 100644
--- 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/dal/FromDatabaseSegment.java
+++ 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/dal/FromDatabaseSegment.java
@@ -31,7 +31,14 @@ public final class FromDatabaseSegment implements SQLSegment 
{
     
     private final int startIndex;
     
-    private final int stopIndex;
-    
     private final DatabaseSegment database;
+    
+    /**
+     * Get stop index.
+     *
+     * @return stop index
+     */
+    public int getStopIndex() {
+        return database.getStopIndex();
+    }
 }
diff --git 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/FromDatabaseAvailable.java
 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/FromDatabaseAvailable.java
index a242069a163..3721247a70d 100644
--- 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/FromDatabaseAvailable.java
+++ 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/statement/FromDatabaseAvailable.java
@@ -17,7 +17,7 @@
 
 package org.apache.shardingsphere.sql.parser.statement.core.statement;
 
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 
 import java.util.Optional;
 
@@ -31,5 +31,5 @@ public interface FromDatabaseAvailable {
      *
      * @return from database
      */
-    Optional<DatabaseSegment> getFromDatabase();
+    Optional<FromDatabaseSegment> getFromDatabase();
 }
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/DistSQLQueryBackendHandlerTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/DistSQLQueryBackendHandlerTest.java
index 2da05658bdd..c52140ad318 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/DistSQLQueryBackendHandlerTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/DistSQLQueryBackendHandlerTest.java
@@ -39,6 +39,7 @@ import 
org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 import org.apache.shardingsphere.mode.spi.repository.PersistRepository;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
 import org.apache.shardingsphere.test.mock.AutoMockExtension;
@@ -100,6 +101,6 @@ class DistSQLQueryBackendHandlerTest {
     }
     
     private ShowTableMetaDataStatement createSqlStatement() {
-        return new 
ShowTableMetaDataStatement(Collections.singleton("t_order"), new 
DatabaseSegment(0, 0, new IdentifierValue("foo_db")));
+        return new 
ShowTableMetaDataStatement(Collections.singleton("t_order"), new 
FromDatabaseSegment(0, new DatabaseSegment(0, 0, new 
IdentifierValue("foo_db"))));
     }
 }
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/export/ExportDatabaseConfigurationExecutorTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/export/ExportDatabaseConfigurationExecutorTest.java
index c3066f7953f..d81fd8085f9 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/export/ExportDatabaseConfigurationExecutorTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/export/ExportDatabaseConfigurationExecutorTest.java
@@ -31,6 +31,7 @@ import 
org.apache.shardingsphere.sharding.api.config.rule.ShardingTableRuleConfi
 import 
org.apache.shardingsphere.sharding.api.config.strategy.keygen.KeyGenerateStrategyConfiguration;
 import 
org.apache.shardingsphere.sharding.api.config.strategy.sharding.NoneShardingStrategyConfiguration;
 import 
org.apache.shardingsphere.sharding.api.config.strategy.sharding.StandardShardingStrategyConfiguration;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
 import org.apache.shardingsphere.test.fixture.jdbc.MockedDataSource;
@@ -70,7 +71,7 @@ class ExportDatabaseConfigurationExecutorTest {
         
when(database.getRuleMetaData().getConfigurations()).thenReturn(Collections.singleton(createShardingRuleConfiguration()));
         ExportDatabaseConfigurationExecutor executor = new 
ExportDatabaseConfigurationExecutor();
         executor.setDatabase(database);
-        Collection<LocalDataQueryResultRow> actual = executor.getRows(new 
ExportDatabaseConfigurationStatement(mock(DatabaseSegment.class), null), 
mock(ContextManager.class));
+        Collection<LocalDataQueryResultRow> actual = executor.getRows(new 
ExportDatabaseConfigurationStatement(null, mock(FromDatabaseSegment.class)), 
mock(ContextManager.class));
         assertThat(actual.size(), is(1));
         LocalDataQueryResultRow row = actual.iterator().next();
         assertThat(row.getCell(1), is(loadExpectedRow()));
@@ -94,7 +95,7 @@ class ExportDatabaseConfigurationExecutorTest {
         when(database.getName()).thenReturn("empty_db");
         
when(database.getResourceMetaData().getStorageUnits()).thenReturn(Collections.emptyMap());
         
when(database.getRuleMetaData().getConfigurations()).thenReturn(Collections.emptyList());
-        ExportDatabaseConfigurationStatement sqlStatement = new 
ExportDatabaseConfigurationStatement(new DatabaseSegment(0, 0, new 
IdentifierValue("empty_db")), null);
+        ExportDatabaseConfigurationStatement sqlStatement = new 
ExportDatabaseConfigurationStatement(null, new FromDatabaseSegment(0, new 
DatabaseSegment(0, 0, new IdentifierValue("empty_db"))));
         ExportDatabaseConfigurationExecutor executor = new 
ExportDatabaseConfigurationExecutor();
         executor.setDatabase(database);
         Collection<LocalDataQueryResultRow> actual = 
executor.getRows(sqlStatement, mock(ContextManager.class));
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/export/ShowTableMetaDataExecutorTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/export/ShowTableMetaDataExecutorTest.java
index b8fbba53d3a..0b1ef244fb5 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/export/ShowTableMetaDataExecutorTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/export/ShowTableMetaDataExecutorTest.java
@@ -28,6 +28,7 @@ import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSp
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.DatabaseSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
 import org.apache.shardingsphere.test.mock.AutoMockExtension;
@@ -87,6 +88,6 @@ class ShowTableMetaDataExecutorTest {
     }
     
     private ShowTableMetaDataStatement createSqlStatement() {
-        return new 
ShowTableMetaDataStatement(Collections.singleton("t_order"), new 
DatabaseSegment(0, 0, new IdentifierValue("foo_db")));
+        return new 
ShowTableMetaDataStatement(Collections.singleton("t_order"), new 
FromDatabaseSegment(0, new DatabaseSegment(0, 0, new 
IdentifierValue("foo_db"))));
     }
 }
diff --git 
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowTablesExecutorTest.java
 
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowTablesExecutorTest.java
index b3f2a6e6f67..ef8b7ceb764 100644
--- 
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowTablesExecutorTest.java
+++ 
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowTablesExecutorTest.java
@@ -173,7 +173,7 @@ class ShowTablesExecutorTest {
     
     @Test
     void assertShowTableFromUncompletedDatabase() throws SQLException {
-        ShowTablesStatement showTablesStatement = new ShowTablesStatement(new 
FromDatabaseSegment(0, 0, new DatabaseSegment(0, 0, new 
IdentifierValue("uncompleted"))), null, false);
+        ShowTablesStatement showTablesStatement = new ShowTablesStatement(new 
FromDatabaseSegment(0, new DatabaseSegment(0, 0, new 
IdentifierValue("uncompleted"))), null, false);
         ShowTablesExecutor executor = new 
ShowTablesExecutor(showTablesStatement, databaseType);
         ContextManager contextManager = mockContextManager(mockDatabases());
         
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ral/impl/queryable/ShowTableMetaDataStatementAssert.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ral/impl/queryable/ShowTableMetaDataStatementAssert.java
index adb3d8a3e80..0e5b6fea22c 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ral/impl/queryable/ShowTableMetaDataStatementAssert.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ral/impl/queryable/ShowTableMetaDataStatementAssert.java
@@ -45,7 +45,7 @@ public final class ShowTableMetaDataStatementAssert {
     public static void assertIs(final SQLCaseAssertContext assertContext, 
final ShowTableMetaDataStatement actual, final 
ShowTableMetaDataStatementTestCase expected) {
         if (ExistingAssert.assertIs(assertContext, actual, expected)) {
             assertTrue(actual.getFromDatabase().isPresent());
-            DatabaseAssert.assertIs(assertContext, 
actual.getFromDatabase().get(), expected.getDatabase());
+            DatabaseAssert.assertIs(assertContext, 
actual.getFromDatabase().get().getDatabase(), expected.getDatabase());
             assertThat(assertContext.getText("Table assertion error:"), 
actual.getTableNames(), is(expected.getTableNames()));
         }
     }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ral/impl/updatable/AlterReadwriteSplittingStorageUnitStatusStatementAssert.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ral/impl/updatable/AlterReadwriteSplittingStorageUnitStatusStatementAssert.java
index 6a48a351ea1..2280a035306 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ral/impl/updatable/AlterReadwriteSplittingStorageUnitStatusStatementAssert.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ral/impl/updatable/AlterReadwriteSplittingStorageUnitStatusStatementAssert.java
@@ -56,7 +56,7 @@ public final class 
AlterReadwriteSplittingStorageUnitStatusStatementAssert {
             assertFalse(actual.getFromDatabase().isPresent(), 
assertContext.getText("Actual database should not exist."));
         } else {
             assertTrue(actual.getFromDatabase().isPresent(), 
assertContext.getText("Actual database should exist."));
-            DatabaseAssert.assertIs(assertContext, 
actual.getFromDatabase().get(), expected.getDatabase());
+            DatabaseAssert.assertIs(assertContext, 
actual.getFromDatabase().get().getDatabase(), expected.getDatabase());
         }
     }
 }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rql/impl/ShowRulesStatementAssert.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rql/impl/ShowRulesStatementAssert.java
index 31eefbbc83e..2eb496277da 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rql/impl/ShowRulesStatementAssert.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rql/impl/ShowRulesStatementAssert.java
@@ -53,7 +53,7 @@ public final class ShowRulesStatementAssert {
             assertFalse(actual.getFromDatabase().isPresent(), 
assertContext.getText("Actual database should not exist."));
         } else {
             assertTrue(actual.getFromDatabase().isPresent(), 
assertContext.getText("Actual database should exist."));
-            DatabaseAssert.assertIs(assertContext, 
actual.getFromDatabase().get(), expected.getDatabase());
+            DatabaseAssert.assertIs(assertContext, 
actual.getFromDatabase().get().getDatabase(), expected.getDatabase());
         }
     }
 }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rql/impl/ShowStorageUnitsStatementAssert.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rql/impl/ShowStorageUnitsStatementAssert.java
index 5ddadc9a2db..ba368ae3eee 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rql/impl/ShowStorageUnitsStatementAssert.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rql/impl/ShowStorageUnitsStatementAssert.java
@@ -54,7 +54,7 @@ public final class ShowStorageUnitsStatementAssert {
             assertFalse(actual.getFromDatabase().isPresent(), 
assertContext.getText("Actual database should not exist."));
         } else {
             assertTrue(actual.getFromDatabase().isPresent(), 
assertContext.getText("Actual database should exist."));
-            DatabaseAssert.assertIs(assertContext, 
actual.getFromDatabase().get(), expected.getDatabase());
+            DatabaseAssert.assertIs(assertContext, 
actual.getFromDatabase().get().getDatabase(), expected.getDatabase());
         }
         if (null == expected.getLikePattern()) {
             assertFalse(actual.getLikePattern().isPresent(), 
assertContext.getText("Actual like pattern should not exist."));
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rql/impl/ShowTablesStatementAssert.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rql/impl/ShowTablesStatementAssert.java
index 58480a16591..5d67cbca684 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rql/impl/ShowTablesStatementAssert.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rql/impl/ShowTablesStatementAssert.java
@@ -54,7 +54,7 @@ public final class ShowTablesStatementAssert {
             assertFalse(actual.getFromDatabase().isPresent(), 
assertContext.getText("Actual database should not exist."));
         } else {
             assertTrue(actual.getFromDatabase().isPresent(), 
assertContext.getText("Actual database should exist."));
-            DatabaseAssert.assertIs(assertContext, 
actual.getFromDatabase().get(), expected.getDatabase());
+            DatabaseAssert.assertIs(assertContext, 
actual.getFromDatabase().get().getDatabase(), expected.getDatabase());
         }
         if (null == expected.getLikePattern()) {
             assertFalse(actual.getLikePattern().isPresent(), 
assertContext.getText("Actual like pattern should not exist."));

Reply via email to