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

zhaojinchao 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 07971527941 Pass inheritedTables into SelectStatementContext to 
support subquery find table metadata by column (#31626)
07971527941 is described below

commit 07971527941ef0f050ddf5aad3227c526d605bdc
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Tue Jun 11 11:48:52 2024 +0800

    Pass inheritedTables into SelectStatementContext to support subquery find 
table metadata by column (#31626)
    
    * Pass inheritedTables into SelectStatementContext to support subquery find 
table metadata by column
    
    * fix unit test
    
    * fix unit test
---
 .../merge/ShardingResultMergerEngineTest.java      |  2 +-
 .../common/IteratorStreamMergedResultTest.java     |  2 +-
 .../merge/ddl/ShardingDDLResultMergerTest.java     |  2 +-
 .../merge/dql/ShardingDQLResultMergerTest.java     | 45 ++++++++++++----------
 .../dql/groupby/GroupByMemoryMergedResultTest.java |  4 +-
 .../dql/groupby/GroupByRowComparatorTest.java      | 12 +++---
 .../dql/groupby/GroupByStreamMergedResultTest.java |  2 +-
 .../dql/orderby/OrderByStreamMergedResultTest.java |  2 +-
 .../merge/dql/orderby/OrderByValueTest.java        |  6 +--
 .../pagination/LimitDecoratorMergedResultTest.java |  9 +++--
 .../RowNumberDecoratorMergedResultTest.java        |  8 ++--
 .../TopAndRowNumberDecoratorMergedResultTest.java  | 14 ++++---
 .../ShardingRemoveTokenGeneratorTest.java          |  2 +-
 .../context/segment/table/TablesContext.java       |  1 -
 .../statement/SQLStatementContextFactory.java      | 29 +++++++-------
 .../statement/ddl/CursorStatementContext.java      |  3 +-
 .../statement/dml/InsertStatementContext.java      |  2 +-
 .../statement/dml/SelectStatementContext.java      | 37 ++++++++++++++----
 .../select/pagination/PaginationContextTest.java   |  4 +-
 .../engine/ProjectionsContextEngineTest.java       |  2 +-
 .../statement/dml/SelectStatementContextTest.java  | 35 ++++++++++-------
 .../metadata/generator/PipelineDDLGenerator.java   |  2 +-
 .../traffic/rule/TrafficRuleTest.java              |  2 +-
 .../sql/common/extractor/TableExtractor.java       | 20 +++-------
 .../backend/connector/ProxySQLExecutorTest.java    |  2 +-
 ...enGaussSystemCatalogAdminQueryExecutorTest.java |  8 ++--
 .../prepare/MySQLComStmtPrepareExecutorTest.java   |  1 +
 .../atomic/storage/impl/MySQLContainer.java        |  2 +-
 .../test/e2e/cases/dataset/row/DataSetRow.java     |  5 ++-
 29 files changed, 150 insertions(+), 115 deletions(-)

diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/ShardingResultMergerEngineTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/ShardingResultMergerEngineTest.java
index 569f877957f..39ab5826964 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/ShardingResultMergerEngineTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/ShardingResultMergerEngineTest.java
@@ -93,7 +93,7 @@ class ShardingResultMergerEngineTest {
         
when(database.getSchema(DefaultDatabase.LOGIC_NAME)).thenReturn(mock(ShardingSphereSchema.class));
         selectStatement.setProjections(new ProjectionsSegment(0, 0));
         SelectStatementContext sqlStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database),
-                Collections.emptyList(), selectStatement, 
DefaultDatabase.LOGIC_NAME);
+                Collections.emptyList(), selectStatement, 
DefaultDatabase.LOGIC_NAME, Collections.emptyList());
         assertThat(new 
ShardingResultMergerEngine().newInstance(DefaultDatabase.LOGIC_NAME, 
TypedSPILoader.getService(DatabaseType.class, "MySQL"), null, props,
                 sqlStatementContext), 
instanceOf(ShardingDQLResultMerger.class));
     }
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/common/IteratorStreamMergedResultTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/common/IteratorStreamMergedResultTest.java
index dec8f5523c7..782a3d6f45e 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/common/IteratorStreamMergedResultTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/common/IteratorStreamMergedResultTest.java
@@ -60,7 +60,7 @@ class IteratorStreamMergedResultTest {
     void setUp() {
         MySQLSelectStatement selectStatement = new MySQLSelectStatement();
         selectStatement.setProjections(new ProjectionsSegment(0, 0));
-        selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(), Collections.emptyList(), 
selectStatement, DefaultDatabase.LOGIC_NAME);
+        selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(), Collections.emptyList(), 
selectStatement, DefaultDatabase.LOGIC_NAME, Collections.emptyList());
     }
     
     private ShardingSphereMetaData createShardingSphereMetaData() {
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/ddl/ShardingDDLResultMergerTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/ddl/ShardingDDLResultMergerTest.java
index 223429de7e5..06ee983fd69 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/ddl/ShardingDDLResultMergerTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/ddl/ShardingDDLResultMergerTest.java
@@ -94,7 +94,7 @@ class ShardingDDLResultMergerTest {
         SelectStatement selectStatement = createSelectStatement();
         selectStatement.setProjections(new ProjectionsSegment(0, 0));
         SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(),
-                selectStatement, DefaultDatabase.LOGIC_NAME);
+                selectStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
         
when(result.getSelectStatementContext()).thenReturn(selectStatementContext);
         when(result.getSqlStatement().getSelect()).thenReturn(selectStatement);
         return result;
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/ShardingDQLResultMergerTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/ShardingDQLResultMergerTest.java
index 5b19ea85923..c6c0870c643 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/ShardingDQLResultMergerTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/ShardingDQLResultMergerTest.java
@@ -88,7 +88,7 @@ class ShardingDQLResultMergerTest {
         SelectStatement selectStatement = buildSelectStatement(new 
MySQLSelectStatement());
         selectStatement.setProjections(new ProjectionsSegment(0, 0));
         SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(),
-                selectStatement, DefaultDatabase.LOGIC_NAME);
+                selectStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
         assertThat(resultMerger.merge(createQueryResults(), 
selectStatementContext, createDatabase(), mock(ConnectionContext.class)), 
instanceOf(IteratorStreamMergedResult.class));
     }
     
@@ -100,7 +100,8 @@ class ShardingDQLResultMergerTest {
         MySQLSelectStatement selectStatement = (MySQLSelectStatement) 
buildSelectStatement(new MySQLSelectStatement());
         selectStatement.setProjections(new ProjectionsSegment(0, 0));
         selectStatement.setLimit(new LimitSegment(0, 0, new 
NumberLiteralLimitValueSegment(0, 0, 1L), null));
-        SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(), selectStatement, DefaultDatabase.LOGIC_NAME);
+        SelectStatementContext selectStatementContext =
+                new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(), selectStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
         
assertThat(resultMerger.merge(Collections.singletonList(createQueryResult()), 
selectStatementContext, createDatabase(), mock(ConnectionContext.class)),
                 instanceOf(IteratorStreamMergedResult.class));
     }
@@ -113,7 +114,8 @@ class ShardingDQLResultMergerTest {
         MySQLSelectStatement selectStatement = (MySQLSelectStatement) 
buildSelectStatement(new MySQLSelectStatement());
         selectStatement.setProjections(new ProjectionsSegment(0, 0));
         selectStatement.setLimit(new LimitSegment(0, 0, new 
NumberLiteralLimitValueSegment(0, 0, 1L), null));
-        SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(), selectStatement, DefaultDatabase.LOGIC_NAME);
+        SelectStatementContext selectStatementContext =
+                new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(), selectStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
         MergedResult actual = resultMerger.merge(createQueryResults(), 
selectStatementContext, createDatabase(), mock(ConnectionContext.class));
         assertThat(actual, instanceOf(LimitDecoratorMergedResult.class));
         assertThat(((LimitDecoratorMergedResult) actual).getMergedResult(), 
instanceOf(IteratorStreamMergedResult.class));
@@ -143,7 +145,7 @@ class ShardingDQLResultMergerTest {
         when(subqueryTableSegment.getSubquery()).thenReturn(subquerySegment);
         selectStatement.setFrom(subqueryTableSegment);
         selectStatement.setWhere(whereSegment);
-        SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), null, 
selectStatement, DefaultDatabase.LOGIC_NAME);
+        SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), null, 
selectStatement, DefaultDatabase.LOGIC_NAME, Collections.emptyList());
         MergedResult actual = resultMerger.merge(createQueryResults(), 
selectStatementContext, createDatabase(), mock(ConnectionContext.class));
         assertThat(actual, instanceOf(RowNumberDecoratorMergedResult.class));
         assertThat(((RowNumberDecoratorMergedResult) 
actual).getMergedResult(), instanceOf(IteratorStreamMergedResult.class));
@@ -157,7 +159,8 @@ class ShardingDQLResultMergerTest {
         SQLServerSelectStatement selectStatement = (SQLServerSelectStatement) 
buildSelectStatement(new SQLServerSelectStatement());
         selectStatement.setProjections(new ProjectionsSegment(0, 0));
         selectStatement.setLimit(new LimitSegment(0, 0, new 
NumberLiteralLimitValueSegment(0, 0, 1L), null));
-        SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(), selectStatement, DefaultDatabase.LOGIC_NAME);
+        SelectStatementContext selectStatementContext =
+                new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(), selectStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
         MergedResult actual = resultMerger.merge(createQueryResults(), 
selectStatementContext, createSQLServerDatabase(), 
mock(ConnectionContext.class));
         assertThat(actual, 
instanceOf(TopAndRowNumberDecoratorMergedResult.class));
         assertThat(((TopAndRowNumberDecoratorMergedResult) 
actual).getMergedResult(), instanceOf(IteratorStreamMergedResult.class));
@@ -172,7 +175,7 @@ class ShardingDQLResultMergerTest {
         selectStatement.setOrderBy(new OrderBySegment(0, 0, 
Collections.singletonList(new IndexOrderByItemSegment(0, 0, 1, 
OrderDirection.DESC, NullsOrderType.FIRST))));
         selectStatement.setProjections(new ProjectionsSegment(0, 0));
         SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(),
-                selectStatement, DefaultDatabase.LOGIC_NAME);
+                selectStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
         assertThat(resultMerger.merge(createQueryResults(), 
selectStatementContext, createDatabase(), mock(ConnectionContext.class)), 
instanceOf(OrderByStreamMergedResult.class));
     }
     
@@ -186,7 +189,7 @@ class ShardingDQLResultMergerTest {
         selectStatement.setProjections(new ProjectionsSegment(0, 0));
         selectStatement.setLimit(new LimitSegment(0, 0, new 
NumberLiteralLimitValueSegment(0, 0, 1L), null));
         SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(),
-                selectStatement, DefaultDatabase.LOGIC_NAME);
+                selectStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
         MergedResult actual = resultMerger.merge(createQueryResults(), 
selectStatementContext, createDatabase(), mock(ConnectionContext.class));
         assertThat(actual, instanceOf(LimitDecoratorMergedResult.class));
         assertThat(((LimitDecoratorMergedResult) actual).getMergedResult(), 
instanceOf(OrderByStreamMergedResult.class));
@@ -218,7 +221,7 @@ class ShardingDQLResultMergerTest {
         selectStatement.setFrom(subqueryTableSegment);
         selectStatement.setWhere(whereSegment);
         SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), null,
-                selectStatement, DefaultDatabase.LOGIC_NAME);
+                selectStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
         MergedResult actual = resultMerger.merge(createQueryResults(), 
selectStatementContext, createDatabase(), mock(ConnectionContext.class));
         assertThat(actual, instanceOf(RowNumberDecoratorMergedResult.class));
         assertThat(((RowNumberDecoratorMergedResult) 
actual).getMergedResult(), instanceOf(OrderByStreamMergedResult.class));
@@ -234,7 +237,7 @@ class ShardingDQLResultMergerTest {
         selectStatement.setProjections(new ProjectionsSegment(0, 0));
         selectStatement.setLimit(new LimitSegment(0, 0, new 
NumberLiteralRowNumberValueSegment(0, 0, 1L, true), null));
         SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(),
-                selectStatement, DefaultDatabase.LOGIC_NAME);
+                selectStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
         MergedResult actual = resultMerger.merge(createQueryResults(), 
selectStatementContext, createSQLServerDatabase(), 
mock(ConnectionContext.class));
         assertThat(actual, 
instanceOf(TopAndRowNumberDecoratorMergedResult.class));
         assertThat(((TopAndRowNumberDecoratorMergedResult) 
actual).getMergedResult(), instanceOf(OrderByStreamMergedResult.class));
@@ -250,7 +253,7 @@ class ShardingDQLResultMergerTest {
         selectStatement.setOrderBy(new OrderBySegment(0, 0, 
Collections.singletonList(new IndexOrderByItemSegment(0, 0, 1, 
OrderDirection.DESC, NullsOrderType.FIRST))));
         selectStatement.setProjections(new ProjectionsSegment(0, 0));
         SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(),
-                selectStatement, DefaultDatabase.LOGIC_NAME);
+                selectStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
         assertThat(resultMerger.merge(createQueryResults(), 
selectStatementContext, createDatabase(), mock(ConnectionContext.class)), 
instanceOf(GroupByStreamMergedResult.class));
     }
     
@@ -265,7 +268,7 @@ class ShardingDQLResultMergerTest {
         selectStatement.setProjections(new ProjectionsSegment(0, 0));
         selectStatement.setLimit(new LimitSegment(0, 0, new 
NumberLiteralLimitValueSegment(0, 0, 1L), null));
         SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(),
-                selectStatement, DefaultDatabase.LOGIC_NAME);
+                selectStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
         MergedResult actual = resultMerger.merge(createQueryResults(), 
selectStatementContext, createDatabase(), mock(ConnectionContext.class));
         assertThat(actual, instanceOf(LimitDecoratorMergedResult.class));
         assertThat(((LimitDecoratorMergedResult) actual).getMergedResult(), 
instanceOf(GroupByStreamMergedResult.class));
@@ -298,7 +301,7 @@ class ShardingDQLResultMergerTest {
         selectStatement.setFrom(subqueryTableSegment);
         selectStatement.setWhere(whereSegment);
         SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), null,
-                selectStatement, DefaultDatabase.LOGIC_NAME);
+                selectStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
         MergedResult actual = resultMerger.merge(createQueryResults(), 
selectStatementContext, createDatabase(), mock(ConnectionContext.class));
         assertThat(actual, instanceOf(RowNumberDecoratorMergedResult.class));
         assertThat(((RowNumberDecoratorMergedResult) 
actual).getMergedResult(), instanceOf(GroupByStreamMergedResult.class));
@@ -315,7 +318,7 @@ class ShardingDQLResultMergerTest {
         selectStatement.setProjections(new ProjectionsSegment(0, 0));
         selectStatement.setLimit(new LimitSegment(0, 0, new 
NumberLiteralRowNumberValueSegment(0, 0, 1L, true), null));
         SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(),
-                selectStatement, DefaultDatabase.LOGIC_NAME);
+                selectStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
         MergedResult actual = resultMerger.merge(createQueryResults(), 
selectStatementContext, createSQLServerDatabase(), 
mock(ConnectionContext.class));
         assertThat(actual, 
instanceOf(TopAndRowNumberDecoratorMergedResult.class));
         assertThat(((TopAndRowNumberDecoratorMergedResult) 
actual).getMergedResult(), instanceOf(GroupByStreamMergedResult.class));
@@ -330,7 +333,7 @@ class ShardingDQLResultMergerTest {
         selectStatement.setGroupBy(new GroupBySegment(0, 0, 
Collections.singletonList(new IndexOrderByItemSegment(0, 0, 1, 
OrderDirection.DESC, NullsOrderType.FIRST))));
         selectStatement.setProjections(new ProjectionsSegment(0, 0));
         SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(),
-                selectStatement, DefaultDatabase.LOGIC_NAME);
+                selectStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
         assertThat(resultMerger.merge(createQueryResults(), 
selectStatementContext, createDatabase(), mock(ConnectionContext.class)), 
instanceOf(GroupByStreamMergedResult.class));
     }
     
@@ -344,7 +347,7 @@ class ShardingDQLResultMergerTest {
         selectStatement.setProjections(new ProjectionsSegment(0, 0));
         selectStatement.setLimit(new LimitSegment(0, 0, new 
NumberLiteralLimitValueSegment(0, 0, 1L), null));
         SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(),
-                selectStatement, DefaultDatabase.LOGIC_NAME);
+                selectStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
         MergedResult actual = resultMerger.merge(createQueryResults(), 
selectStatementContext, createDatabase(), mock(ConnectionContext.class));
         assertThat(actual, instanceOf(LimitDecoratorMergedResult.class));
         assertThat(((LimitDecoratorMergedResult) actual).getMergedResult(), 
instanceOf(GroupByStreamMergedResult.class));
@@ -376,7 +379,7 @@ class ShardingDQLResultMergerTest {
         selectStatement.setProjections(new ProjectionsSegment(0, 0));
         selectStatement.setFrom(subqueryTableSegment);
         selectStatement.setWhere(whereSegment);
-        SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), null, 
selectStatement, DefaultDatabase.LOGIC_NAME);
+        SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), null, 
selectStatement, DefaultDatabase.LOGIC_NAME, Collections.emptyList());
         MergedResult actual = resultMerger.merge(createQueryResults(), 
selectStatementContext, createDatabase(), mock(ConnectionContext.class));
         assertThat(actual, instanceOf(RowNumberDecoratorMergedResult.class));
         assertThat(((RowNumberDecoratorMergedResult) 
actual).getMergedResult(), instanceOf(GroupByStreamMergedResult.class));
@@ -394,7 +397,7 @@ class ShardingDQLResultMergerTest {
         selectStatement.setOrderBy(new OrderBySegment(0, 0, 
Collections.singletonList(new IndexOrderByItemSegment(0, 0, 1, 
OrderDirection.ASC, NullsOrderType.FIRST))));
         selectStatement.setLimit(new LimitSegment(0, 0, new 
NumberLiteralRowNumberValueSegment(0, 0, 1L, true), null));
         SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(),
-                selectStatement, DefaultDatabase.LOGIC_NAME);
+                selectStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
         MergedResult actual = resultMerger.merge(createQueryResults(), 
selectStatementContext, createSQLServerDatabase(), 
mock(ConnectionContext.class));
         assertThat(actual, 
instanceOf(TopAndRowNumberDecoratorMergedResult.class));
         assertThat(((TopAndRowNumberDecoratorMergedResult) 
actual).getMergedResult(), instanceOf(GroupByMemoryMergedResult.class));
@@ -410,7 +413,7 @@ class ShardingDQLResultMergerTest {
         projectionsSegment.getProjections().add(new 
AggregationProjectionSegment(0, 0, AggregationType.COUNT, "COUNT(*)"));
         selectStatement.setProjections(projectionsSegment);
         SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(),
-                selectStatement, DefaultDatabase.LOGIC_NAME);
+                selectStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
         assertThat(resultMerger.merge(createQueryResults(), 
selectStatementContext, createDatabase(), mock(ConnectionContext.class)), 
instanceOf(GroupByMemoryMergedResult.class));
     }
     
@@ -424,7 +427,7 @@ class ShardingDQLResultMergerTest {
         selectStatement.setProjections(projectionsSegment);
         selectStatement.setLimit(new LimitSegment(0, 0, new 
NumberLiteralLimitValueSegment(0, 0, 1L), null));
         SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(),
-                selectStatement, DefaultDatabase.LOGIC_NAME);
+                selectStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
         DatabaseType databaseType = 
TypedSPILoader.getService(DatabaseType.class, "MySQL");
         ShardingDQLResultMerger resultMerger = new 
ShardingDQLResultMerger(databaseType);
         MergedResult actual = resultMerger.merge(createQueryResults(), 
selectStatementContext, createDatabase(), mock(ConnectionContext.class));
@@ -459,7 +462,7 @@ class ShardingDQLResultMergerTest {
         selectStatement.setFrom(subqueryTableSegment);
         selectStatement.setWhere(whereSegment);
         SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), null,
-                selectStatement, DefaultDatabase.LOGIC_NAME);
+                selectStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
         MergedResult actual = resultMerger.merge(createQueryResults(), 
selectStatementContext, createDatabase(), mock(ConnectionContext.class));
         assertThat(actual, instanceOf(RowNumberDecoratorMergedResult.class));
         assertThat(((RowNumberDecoratorMergedResult) 
actual).getMergedResult(), instanceOf(GroupByMemoryMergedResult.class));
@@ -476,7 +479,7 @@ class ShardingDQLResultMergerTest {
         selectStatement.setProjections(projectionsSegment);
         selectStatement.setLimit(new LimitSegment(0, 0, new 
NumberLiteralRowNumberValueSegment(0, 0, 1L, true), null));
         SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(),
-                selectStatement, DefaultDatabase.LOGIC_NAME);
+                selectStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
         MergedResult actual = resultMerger.merge(createQueryResults(), 
selectStatementContext, createSQLServerDatabase(), 
mock(ConnectionContext.class));
         assertThat(actual, 
instanceOf(TopAndRowNumberDecoratorMergedResult.class));
         assertThat(((TopAndRowNumberDecoratorMergedResult) 
actual).getMergedResult(), instanceOf(GroupByMemoryMergedResult.class));
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/groupby/GroupByMemoryMergedResultTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/groupby/GroupByMemoryMergedResultTest.java
index c1c1a69a6d1..528d18ac82d 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/groupby/GroupByMemoryMergedResultTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/groupby/GroupByMemoryMergedResultTest.java
@@ -132,7 +132,7 @@ class GroupByMemoryMergedResultTest {
         selectStatement.setProjections(projectionsSegment);
         ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
         
when(database.getSchema(DefaultDatabase.LOGIC_NAME)).thenReturn(mock(ShardingSphereSchema.class));
-        return new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(), selectStatement, DefaultDatabase.LOGIC_NAME);
+        return new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(), selectStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
     }
     
     private SelectStatementContext createSelectStatementContext(final 
ShardingSphereDatabase database) {
@@ -144,7 +144,7 @@ class GroupByMemoryMergedResultTest {
         selectStatement.setOrderBy(new OrderBySegment(0, 0, 
Collections.singletonList(new IndexOrderByItemSegment(0, 0, 3, 
OrderDirection.DESC, NullsOrderType.FIRST))));
         selectStatement.setFrom(new SimpleTableSegment(new TableNameSegment(0, 
0, new IdentifierValue("t_order"))));
         selectStatement.setProjections(projectionsSegment);
-        return new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(), selectStatement, DefaultDatabase.LOGIC_NAME);
+        return new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(), selectStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
     }
     
     private ShardingSphereMetaData createShardingSphereMetaData(final 
ShardingSphereDatabase database) {
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/groupby/GroupByRowComparatorTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/groupby/GroupByRowComparatorTest.java
index 0a9d8442c06..e9b4404edfc 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/groupby/GroupByRowComparatorTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/groupby/GroupByRowComparatorTest.java
@@ -95,7 +95,7 @@ class GroupByRowComparatorTest {
                 new IndexOrderByItemSegment(0, 0, 2, OrderDirection.ASC, 
NullsOrderType.FIRST))));
         selectStatement.setProjections(new ProjectionsSegment(0, 0));
         SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(),
-                selectStatement, DefaultDatabase.LOGIC_NAME);
+                selectStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
         GroupByRowComparator groupByRowComparator = new 
GroupByRowComparator(selectStatementContext, caseSensitives);
         MemoryQueryResultRow o1 = new 
MemoryQueryResultRow(mockQueryResult("1", "2"));
         MemoryQueryResultRow o2 = new 
MemoryQueryResultRow(mockQueryResult("3", "4"));
@@ -138,7 +138,7 @@ class GroupByRowComparatorTest {
                 new IndexOrderByItemSegment(0, 0, 2, OrderDirection.DESC, 
NullsOrderType.FIRST))));
         selectStatement.setProjections(new ProjectionsSegment(0, 0));
         SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(),
-                selectStatement, DefaultDatabase.LOGIC_NAME);
+                selectStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
         GroupByRowComparator groupByRowComparator = new 
GroupByRowComparator(selectStatementContext, caseSensitives);
         MemoryQueryResultRow o1 = new 
MemoryQueryResultRow(mockQueryResult("1", "2"));
         MemoryQueryResultRow o2 = new 
MemoryQueryResultRow(mockQueryResult("3", "4"));
@@ -181,7 +181,7 @@ class GroupByRowComparatorTest {
                 new IndexOrderByItemSegment(0, 0, 2, OrderDirection.DESC, 
NullsOrderType.FIRST))));
         selectStatement.setProjections(new ProjectionsSegment(0, 0));
         SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(),
-                selectStatement, DefaultDatabase.LOGIC_NAME);
+                selectStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
         GroupByRowComparator groupByRowComparator = new 
GroupByRowComparator(selectStatementContext, caseSensitives);
         MemoryQueryResultRow o1 = new 
MemoryQueryResultRow(mockQueryResult("1", "2"));
         MemoryQueryResultRow o2 = new 
MemoryQueryResultRow(mockQueryResult("1", "2"));
@@ -222,7 +222,7 @@ class GroupByRowComparatorTest {
         selectStatement.setOrderBy(new OrderBySegment(0, 0, 
Collections.emptyList()));
         selectStatement.setProjections(new ProjectionsSegment(0, 0));
         SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(),
-                selectStatement, DefaultDatabase.LOGIC_NAME);
+                selectStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
         GroupByRowComparator groupByRowComparator = new 
GroupByRowComparator(selectStatementContext, caseSensitives);
         MemoryQueryResultRow o1 = new 
MemoryQueryResultRow(mockQueryResult("1", "2"));
         MemoryQueryResultRow o2 = new 
MemoryQueryResultRow(mockQueryResult("3", "4"));
@@ -263,7 +263,7 @@ class GroupByRowComparatorTest {
         selectStatement.setOrderBy(new OrderBySegment(0, 0, 
Collections.emptyList()));
         selectStatement.setProjections(new ProjectionsSegment(0, 0));
         SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(),
-                selectStatement, DefaultDatabase.LOGIC_NAME);
+                selectStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
         GroupByRowComparator groupByRowComparator = new 
GroupByRowComparator(selectStatementContext, caseSensitives);
         MemoryQueryResultRow o1 = new 
MemoryQueryResultRow(mockQueryResult("1", "2"));
         MemoryQueryResultRow o2 = new 
MemoryQueryResultRow(mockQueryResult("3", "4"));
@@ -309,7 +309,7 @@ class GroupByRowComparatorTest {
         selectStatement.setOrderBy(new OrderBySegment(0, 0, 
Collections.emptyList()));
         selectStatement.setProjections(new ProjectionsSegment(0, 0));
         SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(),
-                selectStatement, DefaultDatabase.LOGIC_NAME);
+                selectStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
         GroupByRowComparator groupByRowComparator = new 
GroupByRowComparator(selectStatementContext, caseSensitives);
         MemoryQueryResultRow o1 = new 
MemoryQueryResultRow(mockQueryResult("1", "2"));
         MemoryQueryResultRow o2 = new 
MemoryQueryResultRow(mockQueryResult("1", "2"));
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/groupby/GroupByStreamMergedResultTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/groupby/GroupByStreamMergedResultTest.java
index aff5448b17b..322bae10575 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/groupby/GroupByStreamMergedResultTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/groupby/GroupByStreamMergedResultTest.java
@@ -174,7 +174,7 @@ class GroupByStreamMergedResultTest {
         selectStatement.setProjections(projectionsSegment);
         selectStatement.setGroupBy(new GroupBySegment(0, 0, 
Collections.singletonList(new IndexOrderByItemSegment(0, 0, 3, 
OrderDirection.ASC, NullsOrderType.FIRST))));
         selectStatement.setOrderBy(new OrderBySegment(0, 0, 
Collections.singletonList(new IndexOrderByItemSegment(0, 0, 3, 
OrderDirection.ASC, NullsOrderType.FIRST))));
-        return new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(), selectStatement, DefaultDatabase.LOGIC_NAME);
+        return new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(), selectStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
     }
     
     private static ShardingSphereMetaData createShardingSphereMetaData(final 
ShardingSphereDatabase database) {
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/orderby/OrderByStreamMergedResultTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/orderby/OrderByStreamMergedResultTest.java
index 67761426394..1fc498ab892 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/orderby/OrderByStreamMergedResultTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/orderby/OrderByStreamMergedResultTest.java
@@ -74,7 +74,7 @@ class OrderByStreamMergedResultTest {
                 new IndexOrderByItemSegment(0, 0, 1, OrderDirection.ASC, 
NullsOrderType.FIRST),
                 new IndexOrderByItemSegment(0, 0, 2, OrderDirection.ASC, 
NullsOrderType.FIRST))));
         selectStatement.setProjections(new ProjectionsSegment(0, 0));
-        selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(), Collections.emptyList(), 
selectStatement, DefaultDatabase.LOGIC_NAME);
+        selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(), Collections.emptyList(), 
selectStatement, DefaultDatabase.LOGIC_NAME, Collections.emptyList());
     }
     
     private ShardingSphereMetaData createShardingSphereMetaData() {
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/orderby/OrderByValueTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/orderby/OrderByValueTest.java
index 746941bb19c..cf9228aafbd 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/orderby/OrderByValueTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/orderby/OrderByValueTest.java
@@ -91,7 +91,7 @@ class OrderByValueTest {
         selectStatement.setProjections(projectionsSegment);
         selectStatement.setOrderBy(createOrderBySegment());
         SelectStatementContext selectStatementContext = new 
SelectStatementContext(
-                createShardingSphereMetaData(), Collections.emptyList(), 
selectStatement, DefaultDatabase.LOGIC_NAME);
+                createShardingSphereMetaData(), Collections.emptyList(), 
selectStatement, DefaultDatabase.LOGIC_NAME, Collections.emptyList());
         ShardingSphereSchema schema = mock(ShardingSphereSchema.class);
         QueryResult queryResult1 = createQueryResult("1", "2");
         OrderByValue orderByValue1 = new OrderByValue(queryResult1, 
Arrays.asList(
@@ -148,7 +148,7 @@ class OrderByValueTest {
         selectStatement.setProjections(projectionsSegment);
         selectStatement.setOrderBy(createOrderBySegment());
         SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(),
-                Collections.emptyList(), selectStatement, 
DefaultDatabase.LOGIC_NAME);
+                Collections.emptyList(), selectStatement, 
DefaultDatabase.LOGIC_NAME, Collections.emptyList());
         ShardingSphereSchema schema = mock(ShardingSphereSchema.class);
         when(schema.getTable("table")).thenReturn(new ShardingSphereTable());
         QueryResult queryResult1 = createQueryResult("1", "2");
@@ -201,7 +201,7 @@ class OrderByValueTest {
         selectStatement.setProjections(projectionsSegment);
         selectStatement.setOrderBy(createOrderBySegment());
         SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(),
-                Collections.emptyList(), selectStatement, 
DefaultDatabase.LOGIC_NAME);
+                Collections.emptyList(), selectStatement, 
DefaultDatabase.LOGIC_NAME, Collections.emptyList());
         ShardingSphereSchema schema = mock(ShardingSphereSchema.class);
         QueryResult queryResult1 = createQueryResult("1", "2");
         OrderByValue orderByValue1 = new OrderByValue(queryResult1, 
Arrays.asList(
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/pagination/LimitDecoratorMergedResultTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/pagination/LimitDecoratorMergedResultTest.java
index ad953389321..c81e165bf69 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/pagination/LimitDecoratorMergedResultTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/pagination/LimitDecoratorMergedResultTest.java
@@ -54,7 +54,8 @@ class LimitDecoratorMergedResultTest {
         MySQLSelectStatement selectStatement = new MySQLSelectStatement();
         selectStatement.setProjections(new ProjectionsSegment(0, 0));
         selectStatement.setLimit(new LimitSegment(0, 0, new 
NumberLiteralLimitValueSegment(0, 0, Integer.MAX_VALUE), null));
-        SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(), selectStatement, DefaultDatabase.LOGIC_NAME);
+        SelectStatementContext selectStatementContext =
+                new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(), selectStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
         when(database.getName()).thenReturn(DefaultDatabase.LOGIC_NAME);
         ShardingDQLResultMerger resultMerger = new 
ShardingDQLResultMerger(TypedSPILoader.getService(DatabaseType.class, "MySQL"));
         MergedResult actual = 
resultMerger.merge(Arrays.asList(mockQueryResult(), mockQueryResult(), 
mockQueryResult(), mockQueryResult()), selectStatementContext, database,
@@ -68,7 +69,8 @@ class LimitDecoratorMergedResultTest {
         MySQLSelectStatement selectStatement = new MySQLSelectStatement();
         selectStatement.setProjections(new ProjectionsSegment(0, 0));
         selectStatement.setLimit(new LimitSegment(0, 0, new 
NumberLiteralLimitValueSegment(0, 0, 2L), null));
-        SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(), selectStatement, DefaultDatabase.LOGIC_NAME);
+        SelectStatementContext selectStatementContext =
+                new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(), selectStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
         when(database.getName()).thenReturn(DefaultDatabase.LOGIC_NAME);
         ShardingDQLResultMerger resultMerger = new 
ShardingDQLResultMerger(TypedSPILoader.getService(DatabaseType.class, "MySQL"));
         MergedResult actual = 
resultMerger.merge(Arrays.asList(mockQueryResult(), mockQueryResult(), 
mockQueryResult(), mockQueryResult()), selectStatementContext, database,
@@ -85,7 +87,8 @@ class LimitDecoratorMergedResultTest {
         MySQLSelectStatement selectStatement = new MySQLSelectStatement();
         selectStatement.setProjections(new ProjectionsSegment(0, 0));
         selectStatement.setLimit(new LimitSegment(0, 0, new 
NumberLiteralLimitValueSegment(0, 0, 2L), new NumberLiteralLimitValueSegment(0, 
0, 2L)));
-        SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(), selectStatement, DefaultDatabase.LOGIC_NAME);
+        SelectStatementContext selectStatementContext =
+                new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(), selectStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
         when(database.getName()).thenReturn(DefaultDatabase.LOGIC_NAME);
         ShardingDQLResultMerger resultMerger = new 
ShardingDQLResultMerger(TypedSPILoader.getService(DatabaseType.class, "MySQL"));
         MergedResult actual = 
resultMerger.merge(Arrays.asList(mockQueryResult(), mockQueryResult(), 
mockQueryResult(), mockQueryResult()), selectStatementContext, database,
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/pagination/RowNumberDecoratorMergedResultTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/pagination/RowNumberDecoratorMergedResultTest.java
index b7cb50d2b72..33025647670 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/pagination/RowNumberDecoratorMergedResultTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/pagination/RowNumberDecoratorMergedResultTest.java
@@ -81,7 +81,7 @@ class RowNumberDecoratorMergedResultTest {
         selectStatement.setWhere(whereSegment);
         ShardingDQLResultMerger resultMerger = new 
ShardingDQLResultMerger(TypedSPILoader.getService(DatabaseType.class, 
"Oracle"));
         ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
-        SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), null, 
selectStatement, DefaultDatabase.LOGIC_NAME);
+        SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), null, 
selectStatement, DefaultDatabase.LOGIC_NAME, Collections.emptyList());
         when(database.getName()).thenReturn(DefaultDatabase.LOGIC_NAME);
         MergedResult actual = 
resultMerger.merge(Arrays.asList(mockQueryResult(), mockQueryResult(), 
mockQueryResult(), mockQueryResult()), selectStatementContext, database,
                 mock(ConnectionContext.class));
@@ -94,7 +94,7 @@ class RowNumberDecoratorMergedResultTest {
         ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
         OracleSelectStatement selectStatement = new OracleSelectStatement();
         selectStatement.setProjections(new ProjectionsSegment(0, 0));
-        SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), null, 
selectStatement, DefaultDatabase.LOGIC_NAME);
+        SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), null, 
selectStatement, DefaultDatabase.LOGIC_NAME, Collections.emptyList());
         when(database.getName()).thenReturn(DefaultDatabase.LOGIC_NAME);
         MergedResult actual = 
resultMerger.merge(Arrays.asList(mockQueryResult(), mockQueryResult(), 
mockQueryResult(), mockQueryResult()), selectStatementContext, database,
                 mock(ConnectionContext.class));
@@ -129,7 +129,7 @@ class RowNumberDecoratorMergedResultTest {
         selectStatement.setWhere(whereSegment);
         ShardingDQLResultMerger resultMerger = new 
ShardingDQLResultMerger(TypedSPILoader.getService(DatabaseType.class, 
"Oracle"));
         ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
-        SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), null, 
selectStatement, DefaultDatabase.LOGIC_NAME);
+        SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), null, 
selectStatement, DefaultDatabase.LOGIC_NAME, Collections.emptyList());
         when(database.getName()).thenReturn(DefaultDatabase.LOGIC_NAME);
         MergedResult actual = 
resultMerger.merge(Arrays.asList(mockQueryResult(), mockQueryResult(), 
mockQueryResult(), mockQueryResult()), selectStatementContext, database,
                 mock(ConnectionContext.class));
@@ -163,7 +163,7 @@ class RowNumberDecoratorMergedResultTest {
         selectStatement.setWhere(whereSegment);
         ShardingDQLResultMerger resultMerger = new 
ShardingDQLResultMerger(TypedSPILoader.getService(DatabaseType.class, 
"Oracle"));
         ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
-        SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), null, 
selectStatement, DefaultDatabase.LOGIC_NAME);
+        SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), null, 
selectStatement, DefaultDatabase.LOGIC_NAME, Collections.emptyList());
         when(database.getName()).thenReturn(DefaultDatabase.LOGIC_NAME);
         MergedResult actual = 
resultMerger.merge(Arrays.asList(mockQueryResult(), mockQueryResult(), 
mockQueryResult(), mockQueryResult()), selectStatementContext, database,
                 mock(ConnectionContext.class));
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/pagination/TopAndRowNumberDecoratorMergedResultTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/pagination/TopAndRowNumberDecoratorMergedResultTest.java
index e4d71bb1237..4ae51f3e6b6 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/pagination/TopAndRowNumberDecoratorMergedResultTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dql/pagination/TopAndRowNumberDecoratorMergedResultTest.java
@@ -65,7 +65,8 @@ class TopAndRowNumberDecoratorMergedResultTest {
         SQLServerSelectStatement sqlStatement = new SQLServerSelectStatement();
         sqlStatement.setProjections(new ProjectionsSegment(0, 0));
         sqlStatement.setLimit(new LimitSegment(0, 0, new 
NumberLiteralRowNumberValueSegment(0, 0, Integer.MAX_VALUE, true), null));
-        SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(), sqlStatement, DefaultDatabase.LOGIC_NAME);
+        SelectStatementContext selectStatementContext =
+                new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(), sqlStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
         ShardingDQLResultMerger resultMerger = new 
ShardingDQLResultMerger(TypedSPILoader.getService(DatabaseType.class, 
"SQLServer"));
         MergedResult actual = 
resultMerger.merge(Arrays.asList(mockQueryResult(), mockQueryResult(),
                 mockQueryResult(), mockQueryResult()), selectStatementContext, 
mockShardingSphereDatabase(), mock(ConnectionContext.class));
@@ -80,7 +81,8 @@ class TopAndRowNumberDecoratorMergedResultTest {
         SQLServerSelectStatement sqlStatement = new SQLServerSelectStatement();
         sqlStatement.setProjections(new ProjectionsSegment(0, 0));
         sqlStatement.setLimit(new LimitSegment(0, 0, null, new 
NumberLiteralLimitValueSegment(0, 0, 5L)));
-        SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(), sqlStatement, DefaultDatabase.LOGIC_NAME);
+        SelectStatementContext selectStatementContext =
+                new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(), sqlStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
         MergedResult actual = 
resultMerger.merge(Arrays.asList(mockQueryResult(), mockQueryResult(),
                 mockQueryResult(), mockQueryResult()), selectStatementContext, 
mockShardingSphereDatabase(), mock(ConnectionContext.class));
         for (int i = 0; i < 5; i++) {
@@ -96,7 +98,8 @@ class TopAndRowNumberDecoratorMergedResultTest {
         SQLServerSelectStatement sqlStatement = new SQLServerSelectStatement();
         sqlStatement.setProjections(new ProjectionsSegment(0, 0));
         sqlStatement.setLimit(new LimitSegment(0, 0, new 
NumberLiteralRowNumberValueSegment(0, 0, 2L, true), null));
-        SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(), sqlStatement, DefaultDatabase.LOGIC_NAME);
+        SelectStatementContext selectStatementContext =
+                new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(), sqlStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
         ShardingDQLResultMerger resultMerger = new 
ShardingDQLResultMerger(TypedSPILoader.getService(DatabaseType.class, 
"SQLServer"));
         MergedResult actual = 
resultMerger.merge(Arrays.asList(mockQueryResult(), mockQueryResult(),
                 mockQueryResult(), mockQueryResult()), selectStatementContext, 
mockShardingSphereDatabase(), mock(ConnectionContext.class));
@@ -114,7 +117,8 @@ class TopAndRowNumberDecoratorMergedResultTest {
         SQLServerSelectStatement sqlStatement = new SQLServerSelectStatement();
         sqlStatement.setProjections(new ProjectionsSegment(0, 0));
         sqlStatement.setLimit(new LimitSegment(0, 0, new 
NumberLiteralRowNumberValueSegment(0, 0, 2L, false), new 
NumberLiteralLimitValueSegment(0, 0, 4L)));
-        SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(), sqlStatement, DefaultDatabase.LOGIC_NAME);
+        SelectStatementContext selectStatementContext =
+                new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(), sqlStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
         MergedResult actual = 
resultMerger.merge(Arrays.asList(mockQueryResult(), mockQueryResult(),
                 mockQueryResult(), mockQueryResult()), selectStatementContext, 
mockShardingSphereDatabase(), mock(ConnectionContext.class));
         assertTrue(actual.next());
@@ -131,7 +135,7 @@ class TopAndRowNumberDecoratorMergedResultTest {
         sqlStatement.setProjections(new ProjectionsSegment(0, 0));
         sqlStatement.setLimit(new LimitSegment(0, 0, new 
NumberLiteralRowNumberValueSegment(0, 0, 2L, true), new 
NumberLiteralLimitValueSegment(0, 0, 4L)));
         SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database),
-                Collections.emptyList(), sqlStatement, 
DefaultDatabase.LOGIC_NAME);
+                Collections.emptyList(), sqlStatement, 
DefaultDatabase.LOGIC_NAME, Collections.emptyList());
         MergedResult actual = 
resultMerger.merge(Arrays.asList(mockQueryResult(), mockQueryResult(),
                 mockQueryResult(), mockQueryResult()), selectStatementContext, 
mockShardingSphereDatabase(), mock(ConnectionContext.class));
         assertTrue(actual.next());
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rewrite/token/generator/ShardingRemoveTokenGeneratorTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rewrite/token/generator/ShardingRemoveTokenGeneratorTest.java
index 4ed6b0c70a8..d02dc6c2767 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rewrite/token/generator/ShardingRemoveTokenGeneratorTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rewrite/token/generator/ShardingRemoveTokenGeneratorTest.java
@@ -86,7 +86,7 @@ class ShardingRemoveTokenGeneratorTest {
         selectStatement.setGroupBy(new GroupBySegment(0, 0, 
Collections.singletonList(new IndexOrderByItemSegment(0, 0, 1, 
OrderDirection.ASC, NullsOrderType.FIRST))));
         selectStatement.setProjections(createProjectionsSegment());
         return new SelectStatementContext(
-                
createShardingSphereMetaData(mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS)), Collections.emptyList(), selectStatement, 
DefaultDatabase.LOGIC_NAME);
+                
createShardingSphereMetaData(mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS)), Collections.emptyList(), selectStatement, 
DefaultDatabase.LOGIC_NAME, Collections.emptyList());
     }
     
     private ShardingSphereMetaData createShardingSphereMetaData(final 
ShardingSphereDatabase database) {
diff --git 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/table/TablesContext.java
 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/table/TablesContext.java
index 48e960f3bfb..513bb5234b6 100644
--- 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/table/TablesContext.java
+++ 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/table/TablesContext.java
@@ -62,7 +62,6 @@ public final class TablesContext {
     
     private final Collection<String> schemaNames = new CaseInsensitiveSet<>();
     
-    @Getter(AccessLevel.NONE)
     private final Collection<String> databaseNames = new 
CaseInsensitiveSet<>();
     
     @Getter(AccessLevel.NONE)
diff --git 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/SQLStatementContextFactory.java
 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/SQLStatementContextFactory.java
index 0f44909c89c..68b3b088492 100644
--- 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/SQLStatementContextFactory.java
+++ 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/SQLStatementContextFactory.java
@@ -19,6 +19,17 @@ package 
org.apache.shardingsphere.infra.binder.context.statement;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
+import 
org.apache.shardingsphere.infra.binder.context.statement.dal.AnalyzeTableStatementContext;
+import 
org.apache.shardingsphere.infra.binder.context.statement.dal.ExplainStatementContext;
+import 
org.apache.shardingsphere.infra.binder.context.statement.dal.FlushStatementContext;
+import 
org.apache.shardingsphere.infra.binder.context.statement.dal.KillStatementContext;
+import 
org.apache.shardingsphere.infra.binder.context.statement.dal.OptimizeTableStatementContext;
+import 
org.apache.shardingsphere.infra.binder.context.statement.dal.ShowColumnsStatementContext;
+import 
org.apache.shardingsphere.infra.binder.context.statement.dal.ShowCreateTableStatementContext;
+import 
org.apache.shardingsphere.infra.binder.context.statement.dal.ShowIndexStatementContext;
+import 
org.apache.shardingsphere.infra.binder.context.statement.dal.ShowTableStatusStatementContext;
+import 
org.apache.shardingsphere.infra.binder.context.statement.dal.ShowTablesStatementContext;
+import 
org.apache.shardingsphere.infra.binder.context.statement.dcl.DenyUserStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.dcl.GrantStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.dcl.RevokeStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.ddl.AlterIndexStatementContext;
@@ -48,22 +59,11 @@ import 
org.apache.shardingsphere.infra.binder.context.statement.dml.DoStatementC
 import 
org.apache.shardingsphere.infra.binder.context.statement.dml.InsertStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.dml.LoadDataStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.dml.LoadXMLStatementContext;
-import 
org.apache.shardingsphere.infra.binder.context.statement.dml.UpdateStatementContext;
-import 
org.apache.shardingsphere.infra.binder.context.statement.dal.AnalyzeTableStatementContext;
-import 
org.apache.shardingsphere.infra.binder.context.statement.dal.ExplainStatementContext;
-import 
org.apache.shardingsphere.infra.binder.context.statement.dal.FlushStatementContext;
-import 
org.apache.shardingsphere.infra.binder.context.statement.dal.KillStatementContext;
-import 
org.apache.shardingsphere.infra.binder.context.statement.dal.OptimizeTableStatementContext;
-import 
org.apache.shardingsphere.infra.binder.context.statement.dal.ShowColumnsStatementContext;
-import 
org.apache.shardingsphere.infra.binder.context.statement.dal.ShowCreateTableStatementContext;
-import 
org.apache.shardingsphere.infra.binder.context.statement.dal.ShowIndexStatementContext;
-import 
org.apache.shardingsphere.infra.binder.context.statement.dal.ShowTableStatusStatementContext;
-import 
org.apache.shardingsphere.infra.binder.context.statement.dal.ShowTablesStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.dml.MergeStatementContext;
-import 
org.apache.shardingsphere.infra.binder.context.statement.dcl.DenyUserStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatementContext;
-import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import 
org.apache.shardingsphere.infra.binder.context.statement.dml.UpdateStatementContext;
 import 
org.apache.shardingsphere.infra.exception.generic.UnsupportedSQLOperationException;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dal.AnalyzeTableStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dal.DALStatement;
@@ -113,6 +113,7 @@ import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.opengauss.ddl.
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.dml.OracleMergeStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.dcl.SQLServerDenyUserStatement;
 
+import java.util.Collections;
 import java.util.List;
 
 /**
@@ -149,7 +150,7 @@ public final class SQLStatementContextFactory {
     private static SQLStatementContext getDMLStatementContext(final 
ShardingSphereMetaData metaData,
                                                               final 
List<Object> params, final DMLStatement sqlStatement, final String 
defaultDatabaseName) {
         if (sqlStatement instanceof SelectStatement) {
-            return new SelectStatementContext(metaData, params, 
(SelectStatement) sqlStatement, defaultDatabaseName);
+            return new SelectStatementContext(metaData, params, 
(SelectStatement) sqlStatement, defaultDatabaseName, Collections.emptyList());
         }
         if (sqlStatement instanceof UpdateStatement) {
             return new UpdateStatementContext((UpdateStatement) sqlStatement);
diff --git 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/ddl/CursorStatementContext.java
 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/ddl/CursorStatementContext.java
index 719efa5856f..ced9462ea91 100644
--- 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/ddl/CursorStatementContext.java
+++ 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/ddl/CursorStatementContext.java
@@ -35,6 +35,7 @@ import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.Sim
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.opengauss.ddl.OpenGaussCursorStatement;
 
 import java.util.Collection;
+import java.util.Collections;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Optional;
@@ -59,7 +60,7 @@ public final class CursorStatementContext extends 
CommonSQLStatementContext impl
                                   final OpenGaussCursorStatement sqlStatement, 
final String defaultDatabaseName) {
         super(sqlStatement);
         tablesContext = new TablesContext(getSimpleTableSegments(), 
getDatabaseType());
-        selectStatementContext = new SelectStatementContext(metaData, params, 
sqlStatement.getSelect(), defaultDatabaseName);
+        selectStatementContext = new SelectStatementContext(metaData, params, 
sqlStatement.getSelect(), defaultDatabaseName, Collections.emptyList());
         whereSegments.addAll(selectStatementContext.getWhereSegments());
         columnSegments.addAll(selectStatementContext.getColumnSegments());
         joinConditions.addAll(selectStatementContext.getJoinConditions());
diff --git 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/InsertStatementContext.java
 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/InsertStatementContext.java
index 8f804668ca5..32e87e4c01b 100644
--- 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/InsertStatementContext.java
+++ 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/InsertStatementContext.java
@@ -130,7 +130,7 @@ public final class InsertStatementContext extends 
CommonSQLStatementContext impl
             return Optional.empty();
         }
         SubquerySegment insertSelectSegment = 
getSqlStatement().getInsertSelect().get();
-        SelectStatementContext selectStatementContext = new 
SelectStatementContext(metaData, params, insertSelectSegment.getSelect(), 
defaultDatabaseName);
+        SelectStatementContext selectStatementContext = new 
SelectStatementContext(metaData, params, insertSelectSegment.getSelect(), 
defaultDatabaseName, Collections.emptyList());
         
selectStatementContext.setSubqueryType(SubqueryType.INSERT_SELECT_SUBQUERY);
         InsertSelectContext insertSelectContext = new 
InsertSelectContext(selectStatementContext, params, paramsOffset.get());
         paramsOffset.addAndGet(insertSelectContext.getParameterCount());
diff --git 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/SelectStatementContext.java
 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/SelectStatementContext.java
index 63538559d48..3a07257f467 100644
--- 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/SelectStatementContext.java
+++ 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/SelectStatementContext.java
@@ -61,6 +61,7 @@ import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.order.item.Or
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.order.item.TextOrderByItemSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.WhereSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.JoinTableSegment;
+import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SubqueryTableSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.TableSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
@@ -111,19 +112,29 @@ public final class SelectStatementContext extends 
CommonSQLStatementContext impl
     
     private PaginationContext paginationContext;
     
-    public SelectStatementContext(final ShardingSphereMetaData metaData, final 
List<Object> params, final SelectStatement sqlStatement, final String 
defaultDatabaseName) {
+    public SelectStatementContext(final ShardingSphereMetaData metaData, final 
List<Object> params, final SelectStatement sqlStatement, final String 
defaultDatabaseName,
+                                  final Collection<TableSegment> 
inheritedTables) {
         super(sqlStatement);
         extractWhereSegments(whereSegments, sqlStatement);
         ColumnExtractor.extractColumnSegments(columnSegments, whereSegments);
+        Collection<TableSegment> tableSegments = 
getAllTableSegments(inheritedTables);
         ExpressionExtractUtils.extractJoinConditions(joinConditions, 
whereSegments);
-        subqueryContexts = createSubqueryContexts(metaData, params, 
defaultDatabaseName);
-        tablesContext = new TablesContext(getAllTableSegments(), 
subqueryContexts, getDatabaseType());
+        subqueryContexts = createSubqueryContexts(metaData, params, 
defaultDatabaseName, tableSegments);
+        tablesContext = new TablesContext(tableSegments, subqueryContexts, 
getDatabaseType());
         groupByContext = new 
GroupByContextEngine().createGroupByContext(sqlStatement);
         orderByContext = new 
OrderByContextEngine().createOrderBy(sqlStatement, groupByContext);
         projectionsContext = new 
ProjectionsContextEngine(getDatabaseType()).createProjectionsContext(getSqlStatement().getProjections(),
 groupByContext, orderByContext);
         paginationContext = new 
PaginationContextEngine(getDatabaseType()).createPaginationContext(sqlStatement,
 projectionsContext, params, whereSegments);
-        String databaseName = 
tablesContext.getDatabaseName().orElse(defaultDatabaseName);
-        containsEnhancedTable = isContainsEnhancedTable(metaData, 
databaseName, getTablesContext().getTableNames());
+        containsEnhancedTable = isContainsEnhancedTable(metaData, 
tablesContext.getDatabaseNames(), defaultDatabaseName);
+    }
+    
+    private boolean isContainsEnhancedTable(final ShardingSphereMetaData 
metaData, final Collection<String> databaseNames, final String 
defaultDatabaseName) {
+        for (String each : databaseNames) {
+            if (isContainsEnhancedTable(metaData, each, 
getTablesContext().getTableNames())) {
+                return true;
+            }
+        }
+        return isContainsEnhancedTable(metaData, defaultDatabaseName, 
getTablesContext().getTableNames());
     }
     
     private boolean isContainsEnhancedTable(final ShardingSphereMetaData 
metaData, final String databaseName, final Collection<String> tableNames) {
@@ -147,11 +158,12 @@ public final class SelectStatementContext extends 
CommonSQLStatementContext impl
         return 
database.getRuleMetaData().getAttributes(TableMapperRuleAttribute.class);
     }
     
-    private Map<Integer, SelectStatementContext> createSubqueryContexts(final 
ShardingSphereMetaData metaData, final List<Object> params, final String 
defaultDatabaseName) {
+    private Map<Integer, SelectStatementContext> createSubqueryContexts(final 
ShardingSphereMetaData metaData, final List<Object> params, final String 
defaultDatabaseName,
+                                                                        final 
Collection<TableSegment> tableSegments) {
         Collection<SubquerySegment> subquerySegments = 
SubqueryExtractUtils.getSubquerySegments(getSqlStatement());
         Map<Integer, SelectStatementContext> result = new 
HashMap<>(subquerySegments.size(), 1F);
         for (SubquerySegment each : subquerySegments) {
-            SelectStatementContext subqueryContext = new 
SelectStatementContext(metaData, params, each.getSelect(), defaultDatabaseName);
+            SelectStatementContext subqueryContext = new 
SelectStatementContext(metaData, params, each.getSelect(), defaultDatabaseName, 
tableSegments);
             subqueryContext.setSubqueryType(each.getSubqueryType());
             result.put(each.getStartIndex(), subqueryContext);
         }
@@ -364,8 +376,9 @@ public final class SelectStatementContext extends 
CommonSQLStatementContext impl
         
whereSegments.addAll(WhereExtractUtils.getJoinWhereSegments(selectStatement));
     }
     
-    private Collection<TableSegment> getAllTableSegments() {
+    private Collection<TableSegment> getAllTableSegments(final 
Collection<TableSegment> inheritedTables) {
         TableExtractor tableExtractor = new TableExtractor();
+        appendInheritedSimpleTables(inheritedTables, tableExtractor);
         tableExtractor.extractTablesFromSelect(getSqlStatement());
         Collection<TableSegment> result = new 
LinkedList<>(tableExtractor.getRewriteTables());
         for (TableSegment each : tableExtractor.getTableContext()) {
@@ -376,6 +389,14 @@ public final class SelectStatementContext extends 
CommonSQLStatementContext impl
         return result;
     }
     
+    private void appendInheritedSimpleTables(final Collection<TableSegment> 
inheritedTables, final TableExtractor tableExtractor) {
+        for (TableSegment each : inheritedTables) {
+            if (each instanceof SimpleTableSegment) {
+                tableExtractor.getTableContext().add(each);
+            }
+        }
+    }
+    
     /**
      * Judge whether sql statement contains table subquery segment or not.
      *
diff --git 
a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/context/segment/select/pagination/PaginationContextTest.java
 
b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/context/segment/select/pagination/PaginationContextTest.java
index df4a9ef7667..426fbed0187 100644
--- 
a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/context/segment/select/pagination/PaginationContextTest.java
+++ 
b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/context/segment/select/pagination/PaginationContextTest.java
@@ -170,7 +170,7 @@ class PaginationContextTest {
         Map<String, ShardingSphereDatabase> databases = 
Collections.singletonMap(DefaultDatabase.LOGIC_NAME, 
mock(ShardingSphereDatabase.class, RETURNS_DEEP_STUBS));
         ShardingSphereMetaData metaData = new 
ShardingSphereMetaData(databases, mock(ResourceMetaData.class),
                 mock(RuleMetaData.class), mock(ConfigurationProperties.class));
-        SelectStatementContext selectStatementContext = new 
SelectStatementContext(metaData, Collections.emptyList(), selectStatement, 
DefaultDatabase.LOGIC_NAME);
+        SelectStatementContext selectStatementContext = new 
SelectStatementContext(metaData, Collections.emptyList(), selectStatement, 
DefaultDatabase.LOGIC_NAME, Collections.emptyList());
         assertThat(new PaginationContext(getOffsetSegment(), 
getRowCountSegment(), 
getParameters()).getRevisedRowCount(selectStatementContext), is(50L));
     }
     
@@ -206,7 +206,7 @@ class PaginationContextTest {
         Map<String, ShardingSphereDatabase> databases = 
Collections.singletonMap(DefaultDatabase.LOGIC_NAME, 
mock(ShardingSphereDatabase.class, RETURNS_DEEP_STUBS));
         ShardingSphereMetaData metaData =
                 new ShardingSphereMetaData(databases, 
mock(ResourceMetaData.class), mock(RuleMetaData.class), 
mock(ConfigurationProperties.class));
-        SelectStatementContext selectStatementContext = new 
SelectStatementContext(metaData, Collections.emptyList(), selectStatement, 
DefaultDatabase.LOGIC_NAME);
+        SelectStatementContext selectStatementContext = new 
SelectStatementContext(metaData, Collections.emptyList(), selectStatement, 
DefaultDatabase.LOGIC_NAME, Collections.emptyList());
         assertThat(new PaginationContext(getOffsetSegment(), 
getRowCountSegment(), 
getParameters()).getRevisedRowCount(selectStatementContext), is((long) 
Integer.MAX_VALUE));
     }
 }
diff --git 
a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/context/segment/select/projection/engine/ProjectionsContextEngineTest.java
 
b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/context/segment/select/projection/engine/ProjectionsContextEngineTest.java
index de8c931930e..82282f27d7a 100644
--- 
a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/context/segment/select/projection/engine/ProjectionsContextEngineTest.java
+++ 
b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/context/segment/select/projection/engine/ProjectionsContextEngineTest.java
@@ -223,7 +223,7 @@ class ProjectionsContextEngineTest {
     private SelectStatementContext createSelectStatementContext(final 
SelectStatement selectStatement) {
         Map<String, ShardingSphereDatabase> databases = 
Collections.singletonMap(DefaultDatabase.LOGIC_NAME, 
mock(ShardingSphereDatabase.class, RETURNS_DEEP_STUBS));
         ShardingSphereMetaData metaData = new 
ShardingSphereMetaData(databases, mock(ResourceMetaData.class), 
mock(RuleMetaData.class), mock(ConfigurationProperties.class));
-        return new SelectStatementContext(metaData, Collections.emptyList(), 
selectStatement, DefaultDatabase.LOGIC_NAME);
+        return new SelectStatementContext(metaData, Collections.emptyList(), 
selectStatement, DefaultDatabase.LOGIC_NAME, Collections.emptyList());
     }
     
     @Test
diff --git 
a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/context/statement/dml/SelectStatementContextTest.java
 
b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/context/statement/dml/SelectStatementContextTest.java
index 576ba073e47..de61f15108c 100644
--- 
a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/context/statement/dml/SelectStatementContextTest.java
+++ 
b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/context/statement/dml/SelectStatementContextTest.java
@@ -113,7 +113,8 @@ class SelectStatementContextTest {
         selectStatement.setOrderBy(new OrderBySegment(0, 0, 
Collections.singletonList(createOrderByItemSegment(INDEX_ORDER_BY))));
         selectStatement.setProjections(createProjectionsSegment());
         selectStatement.setFrom(new SimpleTableSegment(new TableNameSegment(0, 
0, new IdentifierValue("table"))));
-        SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(), selectStatement, DefaultDatabase.LOGIC_NAME);
+        SelectStatementContext selectStatementContext =
+                new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(), selectStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
         selectStatementContext.setIndexes(Collections.emptyMap());
         
assertThat(selectStatementContext.getOrderByContext().getItems().iterator().next().getIndex(),
 is(4));
     }
@@ -158,7 +159,8 @@ class SelectStatementContextTest {
         tableSegment.setOwner(new OwnerSegment(0, 0, new 
IdentifierValue(DefaultDatabase.LOGIC_NAME.toUpperCase())));
         selectStatement.setFrom(tableSegment);
         ShardingSphereDatabase database = mockDatabase();
-        SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(), selectStatement, DefaultDatabase.LOGIC_NAME);
+        SelectStatementContext selectStatementContext =
+                new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(), selectStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
         selectStatementContext.setIndexes(Collections.emptyMap());
         
assertThat(selectStatementContext.getOrderByContext().getItems().iterator().next().getIndex(),
 is(1));
     }
@@ -192,7 +194,8 @@ class SelectStatementContextTest {
         ShardingSphereDatabase database = mockDatabase();
         selectStatement.setOrderBy(new OrderBySegment(0, 0, 
Collections.singletonList(createOrderByItemSegment(COLUMN_ORDER_BY_WITH_ALIAS))));
         selectStatement.setProjections(createProjectionsSegment());
-        SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(), selectStatement, DefaultDatabase.LOGIC_NAME);
+        SelectStatementContext selectStatementContext =
+                new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(), selectStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
         selectStatementContext.setIndexes(Collections.singletonMap("n", 2));
         
assertThat(selectStatementContext.getOrderByContext().getItems().iterator().next().getIndex(),
 is(2));
     }
@@ -226,7 +229,8 @@ class SelectStatementContextTest {
         ShardingSphereDatabase database = mockDatabase();
         selectStatement.setOrderBy(new OrderBySegment(0, 0, 
Collections.singletonList(createOrderByItemSegment(COLUMN_ORDER_BY_WITHOUT_OWNER_ALIAS))));
         selectStatement.setProjections(createProjectionsSegment());
-        SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(), selectStatement, DefaultDatabase.LOGIC_NAME);
+        SelectStatementContext selectStatementContext =
+                new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(), selectStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
         selectStatementContext.setIndexes(Collections.singletonMap("id", 3));
         
assertThat(selectStatementContext.getOrderByContext().getItems().iterator().next().getIndex(),
 is(3));
     }
@@ -267,7 +271,7 @@ class SelectStatementContextTest {
     private SelectStatementContext createSelectStatementContext(final 
SelectStatement selectStatement) {
         ShardingSphereMetaData metaData = new 
ShardingSphereMetaData(Collections.singletonMap(DefaultDatabase.LOGIC_NAME, 
mockDatabase()), mock(ResourceMetaData.class),
                 mock(RuleMetaData.class), mock(ConfigurationProperties.class));
-        return new SelectStatementContext(metaData, Collections.emptyList(), 
selectStatement, DefaultDatabase.LOGIC_NAME);
+        return new SelectStatementContext(metaData, Collections.emptyList(), 
selectStatement, DefaultDatabase.LOGIC_NAME, Collections.emptyList());
     }
     
     @Test
@@ -367,7 +371,8 @@ class SelectStatementContextTest {
         projectionsSegment.getProjections().add(aggregationProjectionSegment);
         selectStatement.setProjections(projectionsSegment);
         ShardingSphereDatabase database = mockDatabase();
-        SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(), selectStatement, DefaultDatabase.LOGIC_NAME);
+        SelectStatementContext selectStatementContext =
+                new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(), selectStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
         selectStatementContext.setIndexes(Collections.singletonMap("id", 3));
         
assertThat(selectStatementContext.getOrderByContext().getItems().iterator().next().getIndex(),
 is(3));
     }
@@ -402,7 +407,8 @@ class SelectStatementContextTest {
         selectStatement.setWhere(whereSegment);
         ShardingSphereDatabase database = mockDatabase();
         selectStatement.setProjections(new ProjectionsSegment(0, 0));
-        SelectStatementContext actual = new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(), selectStatement, DefaultDatabase.LOGIC_NAME);
+        SelectStatementContext actual =
+                new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(), selectStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
         assertThat(actual.getTablesContext().getTableNames(), 
is(Collections.emptySet()));
         assertThat(actual.getTablesContext().getSimpleTables(), 
is(Collections.emptyList()));
         assertThat(actual.getGroupByContext().getItems(), 
is(Collections.emptyList()));
@@ -446,7 +452,8 @@ class SelectStatementContextTest {
         projectionsSegment.getProjections().add(subqueryProjectionSegment);
         selectStatement.setProjections(projectionsSegment);
         ShardingSphereDatabase database = mockDatabase();
-        assertTrue(new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(), selectStatement, 
DefaultDatabase.LOGIC_NAME).isContainsSubquery());
+        assertTrue(
+                new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(), selectStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList()).isContainsSubquery());
     }
     
     @Test
@@ -494,7 +501,7 @@ class SelectStatementContextTest {
         selectStatement.setProjections(projectionsSegment);
         ShardingSphereMetaData metaData = new 
ShardingSphereMetaData(Collections.singletonMap(DefaultDatabase.LOGIC_NAME, 
mockDatabase()), mock(ResourceMetaData.class),
                 mock(RuleMetaData.class), mock(ConfigurationProperties.class));
-        assertTrue(new SelectStatementContext(metaData, 
Collections.emptyList(), selectStatement, 
DefaultDatabase.LOGIC_NAME).isContainsSubquery());
+        assertTrue(new SelectStatementContext(metaData, 
Collections.emptyList(), selectStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList()).isContainsSubquery());
     }
     
     @Test
@@ -528,13 +535,13 @@ class SelectStatementContextTest {
         selectStatement.setProjections(projectionsSegment);
         ShardingSphereMetaData metaData = new 
ShardingSphereMetaData(Collections.singletonMap(DefaultDatabase.LOGIC_NAME, 
mockDatabase()), mock(ResourceMetaData.class),
                 mock(RuleMetaData.class), mock(ConfigurationProperties.class));
-        SelectStatementContext selectStatementContext = new 
SelectStatementContext(metaData, Collections.emptyList(), selectStatement, 
DefaultDatabase.LOGIC_NAME);
+        SelectStatementContext selectStatementContext = new 
SelectStatementContext(metaData, Collections.emptyList(), selectStatement, 
DefaultDatabase.LOGIC_NAME, Collections.emptyList());
         assertTrue(selectStatementContext.isContainsDollarParameterMarker());
         selectStatement.setProjections(new ProjectionsSegment(0, 0));
         JoinTableSegment joinTableSegment = new JoinTableSegment();
         joinTableSegment.setCondition(new ParameterMarkerExpressionSegment(0, 
0, 0, ParameterMarkerType.DOLLAR));
         selectStatement.setFrom(joinTableSegment);
-        selectStatementContext = new SelectStatementContext(metaData, 
Collections.emptyList(), selectStatement, DefaultDatabase.LOGIC_NAME);
+        selectStatementContext = new SelectStatementContext(metaData, 
Collections.emptyList(), selectStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
         assertTrue(selectStatementContext.isContainsDollarParameterMarker());
     }
     
@@ -570,7 +577,7 @@ class SelectStatementContextTest {
         selectStatement.setProjections(projectionsSegment);
         ShardingSphereMetaData metaData = new 
ShardingSphereMetaData(Collections.singletonMap(DefaultDatabase.LOGIC_NAME, 
mockDatabase()), mock(ResourceMetaData.class),
                 mock(RuleMetaData.class), mock(ConfigurationProperties.class));
-        SelectStatementContext selectStatementContext = new 
SelectStatementContext(metaData, Collections.emptyList(), selectStatement, 
DefaultDatabase.LOGIC_NAME);
+        SelectStatementContext selectStatementContext = new 
SelectStatementContext(metaData, Collections.emptyList(), selectStatement, 
DefaultDatabase.LOGIC_NAME, Collections.emptyList());
         
assertTrue(selectStatementContext.isContainsPartialDistinctAggregation());
     }
     
@@ -624,7 +631,7 @@ class SelectStatementContextTest {
         selectStatement.setFrom(new SimpleTableSegment(new TableNameSegment(0, 
0, new IdentifierValue("t_order"))));
         ShardingSphereMetaData metaData = new 
ShardingSphereMetaData(Collections.singletonMap(DefaultDatabase.LOGIC_NAME, 
mockDatabase()), mock(ResourceMetaData.class),
                 mock(RuleMetaData.class), mock(ConfigurationProperties.class));
-        SelectStatementContext actual = new SelectStatementContext(metaData, 
Collections.emptyList(), selectStatement, DefaultDatabase.LOGIC_NAME);
+        SelectStatementContext actual = new SelectStatementContext(metaData, 
Collections.emptyList(), selectStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
         assertTrue(actual.isContainsEnhancedTable());
     }
     
@@ -635,7 +642,7 @@ class SelectStatementContextTest {
         selectStatement.setFrom(new SubqueryTableSegment(0, 0, new 
SubquerySegment(0, 0, createSubSelectStatement(), "")));
         ShardingSphereMetaData metaData = new 
ShardingSphereMetaData(Collections.singletonMap(DefaultDatabase.LOGIC_NAME, 
mockDatabase()), mock(ResourceMetaData.class),
                 mock(RuleMetaData.class), mock(ConfigurationProperties.class));
-        SelectStatementContext actual = new SelectStatementContext(metaData, 
Collections.emptyList(), selectStatement, DefaultDatabase.LOGIC_NAME);
+        SelectStatementContext actual = new SelectStatementContext(metaData, 
Collections.emptyList(), selectStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
         assertTrue(actual.containsTableSubquery());
     }
     
diff --git 
a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/metadata/generator/PipelineDDLGenerator.java
 
b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/metadata/generator/PipelineDDLGenerator.java
index ad3d1cedfd0..51684baf49c 100644
--- 
a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/metadata/generator/PipelineDDLGenerator.java
+++ 
b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/metadata/generator/PipelineDDLGenerator.java
@@ -126,7 +126,7 @@ public final class PipelineDDLGenerator {
     }
     
     private QueryContext getQueryContext(final String databaseName, final 
SQLParserEngine parserEngine, final String sql) {
-        SQLStatementContext sqlStatementContext = new SQLBindEngine(null, 
databaseName, new HintValueContext()).bind(parserEngine.parse(sql, false), 
Collections.emptyList());
+        SQLStatementContext sqlStatementContext = new SQLBindEngine(null, 
databaseName, new HintValueContext()).bind(parserEngine.parse(sql, true), 
Collections.emptyList());
         return new QueryContext(sqlStatementContext, sql, 
Collections.emptyList(), new HintValueContext());
     }
     
diff --git 
a/kernel/traffic/core/src/test/java/org/apache/shardingsphere/traffic/rule/TrafficRuleTest.java
 
b/kernel/traffic/core/src/test/java/org/apache/shardingsphere/traffic/rule/TrafficRuleTest.java
index cd080ac6db6..8a616d18485 100644
--- 
a/kernel/traffic/core/src/test/java/org/apache/shardingsphere/traffic/rule/TrafficRuleTest.java
+++ 
b/kernel/traffic/core/src/test/java/org/apache/shardingsphere/traffic/rule/TrafficRuleTest.java
@@ -91,7 +91,7 @@ class TrafficRuleTest {
         MySQLSelectStatement sqlStatement = mock(MySQLSelectStatement.class);
         when(sqlStatement.getProjections()).thenReturn(new 
ProjectionsSegment(0, 0));
         SQLStatementContext statementContext =
-                new SelectStatementContext(createShardingSphereMetaData(), 
Collections.emptyList(), sqlStatement, DefaultDatabase.LOGIC_NAME);
+                new SelectStatementContext(createShardingSphereMetaData(), 
Collections.emptyList(), sqlStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
         HintValueContext hintValueContext = new HintValueContext();
         hintValueContext.setUseTraffic(includeComments);
         return new QueryContext(statementContext, "", Collections.emptyList(), 
hintValueContext);
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/extractor/TableExtractor.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/extractor/TableExtractor.java
index 8c081fa1efe..fb7f93271f0 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/extractor/TableExtractor.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/extractor/TableExtractor.java
@@ -88,23 +88,15 @@ public final class TableExtractor {
         if (selectStatement.getFrom().isPresent() && 
!selectStatement.getCombine().isPresent()) {
             extractTablesFromTableSegment(selectStatement.getFrom().get());
         }
-        if (selectStatement.getWhere().isPresent()) {
-            
extractTablesFromExpression(selectStatement.getWhere().get().getExpr());
-        }
+        selectStatement.getWhere().ifPresent(optional -> 
extractTablesFromExpression(optional.getExpr()));
         if (null != selectStatement.getProjections() && 
!selectStatement.getCombine().isPresent()) {
             extractTablesFromProjections(selectStatement.getProjections());
         }
-        if (selectStatement.getGroupBy().isPresent()) {
-            
extractTablesFromOrderByItems(selectStatement.getGroupBy().get().getGroupByItems());
-        }
-        if (selectStatement.getOrderBy().isPresent()) {
-            
extractTablesFromOrderByItems(selectStatement.getOrderBy().get().getOrderByItems());
-        }
-        if (selectStatement.getWithSegment().isPresent()) {
-            
extractTablesFromCTEs(selectStatement.getWithSegment().get().getCommonTableExpressions());
-        }
-        Optional<LockSegment> lockSegment = 
SelectStatementHandler.getLockSegment(selectStatement);
-        lockSegment.ifPresent(this::extractTablesFromLock);
+        selectStatement.getGroupBy().ifPresent(optional -> 
extractTablesFromOrderByItems(optional.getGroupByItems()));
+        selectStatement.getOrderBy().ifPresent(optional -> 
extractTablesFromOrderByItems(optional.getOrderByItems()));
+        selectStatement.getHaving().ifPresent(optional -> 
extractTablesFromExpression(optional.getExpr()));
+        selectStatement.getWithSegment().ifPresent(optional -> 
extractTablesFromCTEs(optional.getCommonTableExpressions()));
+        
SelectStatementHandler.getLockSegment(selectStatement).ifPresent(this::extractTablesFromLock);
     }
     
     private void extractTablesFromCTEs(final 
Collection<CommonTableExpressionSegment> commonTableExpressionSegments) {
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutorTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutorTest.java
index acd800fb7b2..23bf24497dd 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutorTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutorTest.java
@@ -251,7 +251,7 @@ class ProxySQLExecutorTest {
         OpenGaussCursorStatement sqlStatement = new OpenGaussCursorStatement();
         sqlStatement.setSelect(selectStatement);
         SelectStatementContext selectStatementContext = new 
SelectStatementContext(createShardingSphereMetaData(database), 
Collections.emptyList(),
-                selectStatement, DefaultDatabase.LOGIC_NAME);
+                selectStatement, DefaultDatabase.LOGIC_NAME, 
Collections.emptyList());
         
when(result.getSelectStatementContext()).thenReturn(selectStatementContext);
         when(result.getSqlStatement()).thenReturn(sqlStatement);
         return result;
diff --git 
a/proxy/backend/type/opengauss/src/test/java/org/apache/shardingsphere/proxy/backend/opengauss/handler/admin/OpenGaussSystemCatalogAdminQueryExecutorTest.java
 
b/proxy/backend/type/opengauss/src/test/java/org/apache/shardingsphere/proxy/backend/opengauss/handler/admin/OpenGaussSystemCatalogAdminQueryExecutorTest.java
index 1ef53688ec5..afdfa659679 100644
--- 
a/proxy/backend/type/opengauss/src/test/java/org/apache/shardingsphere/proxy/backend/opengauss/handler/admin/OpenGaussSystemCatalogAdminQueryExecutorTest.java
+++ 
b/proxy/backend/type/opengauss/src/test/java/org/apache/shardingsphere/proxy/backend/opengauss/handler/admin/OpenGaussSystemCatalogAdminQueryExecutorTest.java
@@ -88,7 +88,7 @@ class OpenGaussSystemCatalogAdminQueryExecutorTest {
         ShardingSphereMetaData metaData =
                 new ShardingSphereMetaData(databases, 
mock(ResourceMetaData.class, RETURNS_DEEP_STUBS), new 
RuleMetaData(Collections.singletonList(sqlFederationRule)), props);
         
when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData()).thenReturn(metaData);
-        SelectStatementContext sqlStatementContext = new 
SelectStatementContext(metaData, Collections.emptyList(), sqlStatement, 
"sharding_db");
+        SelectStatementContext sqlStatementContext = new 
SelectStatementContext(metaData, Collections.emptyList(), sqlStatement, 
"sharding_db", Collections.emptyList());
         OpenGaussSystemCatalogAdminQueryExecutor executor = new 
OpenGaussSystemCatalogAdminQueryExecutor(sqlStatementContext,
                 "select datname, datcompatibility from pg_database where 
datname = 'sharding_db'", "sharding_db", Collections.emptyList());
         executor.execute(connectionSession);
@@ -151,7 +151,7 @@ class OpenGaussSystemCatalogAdminQueryExecutorTest {
         ShardingSphereMetaData metaData =
                 new ShardingSphereMetaData(databases, 
mock(ResourceMetaData.class, RETURNS_DEEP_STUBS), new 
RuleMetaData(Collections.singletonList(sqlFederationRule)), props);
         
when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData()).thenReturn(metaData);
-        SelectStatementContext sqlStatementContext = new 
SelectStatementContext(metaData, Collections.emptyList(), sqlStatement, 
"sharding_db");
+        SelectStatementContext sqlStatementContext = new 
SelectStatementContext(metaData, Collections.emptyList(), sqlStatement, 
"sharding_db", Collections.emptyList());
         OpenGaussSystemCatalogAdminQueryExecutor executor =
                 new 
OpenGaussSystemCatalogAdminQueryExecutor(sqlStatementContext, "select 
VERSION()", "sharding_db", Collections.emptyList());
         ConnectionSession connectionSession = mock(ConnectionSession.class);
@@ -185,7 +185,7 @@ class OpenGaussSystemCatalogAdminQueryExecutorTest {
         ShardingSphereMetaData metaData =
                 new ShardingSphereMetaData(databases, 
mock(ResourceMetaData.class, RETURNS_DEEP_STUBS), new 
RuleMetaData(Collections.singletonList(sqlFederationRule)), props);
         
when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData()).thenReturn(metaData);
-        SelectStatementContext sqlStatementContext = new 
SelectStatementContext(metaData, Collections.emptyList(), sqlStatement, 
"sharding_db");
+        SelectStatementContext sqlStatementContext = new 
SelectStatementContext(metaData, Collections.emptyList(), sqlStatement, 
"sharding_db", Collections.emptyList());
         OpenGaussSystemCatalogAdminQueryExecutor executor =
                 new 
OpenGaussSystemCatalogAdminQueryExecutor(sqlStatementContext, "select 
intervaltonum(gs_password_deadline())", "sharding_db", Collections.emptyList());
         ConnectionSession connectionSession = mock(ConnectionSession.class);
@@ -221,7 +221,7 @@ class OpenGaussSystemCatalogAdminQueryExecutorTest {
         ShardingSphereMetaData metaData =
                 new ShardingSphereMetaData(databases, 
mock(ResourceMetaData.class, RETURNS_DEEP_STUBS), new 
RuleMetaData(Collections.singletonList(sqlFederationRule)), props);
         
when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData()).thenReturn(metaData);
-        SelectStatementContext sqlStatementContext = new 
SelectStatementContext(metaData, Collections.emptyList(), sqlStatement, 
"sharding_db");
+        SelectStatementContext sqlStatementContext = new 
SelectStatementContext(metaData, Collections.emptyList(), sqlStatement, 
"sharding_db", Collections.emptyList());
         OpenGaussSystemCatalogAdminQueryExecutor executor =
                 new 
OpenGaussSystemCatalogAdminQueryExecutor(sqlStatementContext, "select 
gs_password_notifytime()", "sharding_db", Collections.emptyList());
         ConnectionSession connectionSession = mock(ConnectionSession.class);
diff --git 
a/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareExecutorTest.java
 
b/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareExecutorTest.java
index 86972df45ac..4b0227a5453 100644
--- 
a/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareExecutorTest.java
+++ 
b/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareExecutorTest.java
@@ -110,6 +110,7 @@ class MySQLComStmtPrepareExecutorTest {
         when(packet.getSQL()).thenReturn(sql);
         when(packet.getHintValueContext()).thenReturn(new HintValueContext());
         when(connectionSession.getConnectionId()).thenReturn(1);
+        when(connectionSession.getDefaultDatabaseName()).thenReturn("foo_db");
         MySQLStatementIdGenerator.getInstance().registerConnection(1);
         ContextManager contextManager = mockContextManager();
         
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
diff --git 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/impl/MySQLContainer.java
 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/impl/MySQLContainer.java
index 91da286900f..55613568514 100644
--- 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/impl/MySQLContainer.java
+++ 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/atomic/storage/impl/MySQLContainer.java
@@ -41,7 +41,7 @@ public final class MySQLContainer extends 
DockerStorageContainer {
     private final StorageContainerConfiguration storageContainerConfig;
     
     public MySQLContainer(final String containerImage, final 
StorageContainerConfiguration storageContainerConfig) {
-        super(TypedSPILoader.getService(DatabaseType.class, "MySQL"), 
Strings.isNullOrEmpty(containerImage) ? "mysql:8.0" : containerImage);
+        super(TypedSPILoader.getService(DatabaseType.class, "MySQL"), 
Strings.isNullOrEmpty(containerImage) ? "mysql:8.2.0" : containerImage);
         this.storageContainerConfig = storageContainerConfig;
     }
     
diff --git 
a/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/cases/dataset/row/DataSetRow.java
 
b/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/cases/dataset/row/DataSetRow.java
index 7f4de97ddce..dbfdbbc34da 100644
--- 
a/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/cases/dataset/row/DataSetRow.java
+++ 
b/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/cases/dataset/row/DataSetRow.java
@@ -26,6 +26,7 @@ import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * Data set row.
@@ -36,6 +37,8 @@ import java.util.List;
 @EqualsAndHashCode
 public final class DataSetRow {
     
+    private static final String E2E_DATA_DELIMITER = "{E2E_DATA_DELIMITER}";
+    
     @XmlAttribute(name = "data-node")
     private String dataNode;
     
@@ -49,6 +52,6 @@ public final class DataSetRow {
      * @return split values
      */
     public List<String> splitValues(final String delimiter) {
-        return Splitter.on(delimiter).trimResults().splitToList(values);
+        return 
Splitter.on(delimiter).trimResults().splitToList(values).stream().map(each -> 
each.replace(E2E_DATA_DELIMITER, delimiter)).collect(Collectors.toList());
     }
 }

Reply via email to