This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang 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 9637f57af83 Optimize CTE in parser. (#31440)
9637f57af83 is described below
commit 9637f57af8323b4d7f96bc87feb4de691c3a4b5a
Author: Cong Hu <[email protected]>
AuthorDate: Thu May 30 07:48:45 2024 +0800
Optimize CTE in parser. (#31440)
---
.../statement/dml/SelectStatementContext.java | 8 +++----
.../from/impl/SimpleTableSegmentBinder.java | 4 ++--
.../with/CommonTableExpressionSegmentBinder.java | 2 +-
.../binder/segment/with/WithSegmentBinder.java | 4 ++--
.../expression/impl/SubquerySegmentBinderTest.java | 7 +++---
.../converter/segment/with/WithConverter.java | 2 +-
.../src/main/antlr4/imports/doris/DMLStatement.g4 | 2 +-
.../visitor/statement/DorisStatementVisitor.java | 2 +-
.../src/main/antlr4/imports/mysql/DMLStatement.g4 | 2 +-
.../mysql/visitor/format/MySQLFormatVisitor.java | 2 +-
.../visitor/statement/MySQLStatementVisitor.java | 4 ++--
.../src/main/antlr4/imports/oracle/BaseRule.g4 | 2 +-
.../statement/type/OracleDMLStatementVisitor.java | 4 ++--
.../main/antlr4/imports/sqlserver/DMLStatement.g4 | 2 +-
.../statement/SQLServerStatementVisitor.java | 7 +++---
.../sql/common/extractor/TableExtractor.java | 14 ++++++++++--
.../expr/complex/CommonTableExpressionSegment.java | 26 ++++++++++++++++------
.../sql/common/statement/dml/SelectStatement.java | 12 ++++++++++
.../parser/sql/common/util/ColumnExtractor.java | 4 ++++
.../sql/common/util/ExpressionExtractUtils.java | 10 +++------
.../sql/common/util/SubqueryExtractUtils.java | 11 +++++++++
.../statement/doris/dml/DorisSelectStatement.java | 12 ----------
.../statement/mysql/dml/MySQLSelectStatement.java | 11 ---------
.../oracle/dml/OracleSelectStatement.java | 12 ----------
.../sqlserver/dml/SQLServerSelectStatement.java | 12 ----------
.../asserts/segment/with/WithClauseAssert.java | 2 +-
26 files changed, 89 insertions(+), 91 deletions(-)
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 45009ec946c..b8749baea25 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
@@ -197,7 +197,7 @@ public final class SelectStatementContext extends
CommonSQLStatementContext impl
/**
* Judge whether contains dollar parameter marker or not.
- *
+ *
* @return whether contains dollar parameter marker or not
*/
public boolean isContainsDollarParameterMarker() {
@@ -224,7 +224,7 @@ public final class SelectStatementContext extends
CommonSQLStatementContext impl
/**
* Judge whether contains partial distinct aggregation.
- *
+ *
* @return whether contains partial distinct aggregation
*/
public boolean isContainsPartialDistinctAggregation() {
@@ -320,7 +320,7 @@ public final class SelectStatementContext extends
CommonSQLStatementContext impl
/**
* Find column projection.
- *
+ *
* @param columnIndex column index
* @return find column projection
*/
@@ -388,7 +388,7 @@ public final class SelectStatementContext extends
CommonSQLStatementContext impl
* @return whether sql statement contains table subquery segment or not
*/
public boolean containsTableSubquery() {
- return getSqlStatement().getFrom().isPresent() &&
getSqlStatement().getFrom().get() instanceof SubqueryTableSegment;
+ return getSqlStatement().getFrom().isPresent() &&
getSqlStatement().getFrom().get() instanceof SubqueryTableSegment ||
getSqlStatement().getWithSegment().isPresent();
}
@Override
diff --git
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/from/impl/SimpleTableSegmentBinder.java
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/from/impl/SimpleTableSegmentBinder.java
index 874bd29b83c..b18bfff7794 100644
---
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/from/impl/SimpleTableSegmentBinder.java
+++
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/from/impl/SimpleTableSegmentBinder.java
@@ -28,9 +28,9 @@ import
org.apache.shardingsphere.infra.database.core.type.DatabaseType;
import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
import
org.apache.shardingsphere.infra.database.opengauss.type.OpenGaussDatabaseType;
import
org.apache.shardingsphere.infra.database.postgresql.type.PostgreSQLDatabaseType;
-import
org.apache.shardingsphere.infra.exception.kernel.metadata.TableNotFoundException;
import
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
import
org.apache.shardingsphere.infra.exception.dialect.exception.syntax.database.NoDatabaseSelectedException;
+import
org.apache.shardingsphere.infra.exception.kernel.metadata.TableNotFoundException;
import
org.apache.shardingsphere.infra.metadata.database.schema.manager.SystemSchemaManager;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereColumn;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
@@ -83,7 +83,7 @@ public final class SimpleTableSegmentBinder {
ShardingSpherePreconditions.checkNotNull(originalDatabase.getValue(),
NoDatabaseSelectedException::new);
checkTableExists(segment.getTableName().getIdentifier().getValue(),
statementBinderContext, originalDatabase.getValue(), originalSchema.getValue());
ShardingSphereSchema schema =
statementBinderContext.getMetaData().getDatabase(originalDatabase.getValue()).getSchema(originalSchema.getValue());
- tableBinderContexts.put((segment.getAliasName().orElseGet(() ->
segment.getTableName().getIdentifier().getValue())).toLowerCase(),
+ tableBinderContexts.putIfAbsent((segment.getAliasName().orElseGet(()
-> segment.getTableName().getIdentifier().getValue())).toLowerCase(),
createSimpleTableBinderContext(segment, schema,
originalDatabase, originalSchema, statementBinderContext));
TableNameSegment tableNameSegment = new
TableNameSegment(segment.getTableName().getStartIndex(),
segment.getTableName().getStopIndex(), segment.getTableName().getIdentifier());
tableNameSegment.setTableBoundedInfo(new
TableSegmentBoundedInfo(originalDatabase, originalSchema));
diff --git
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/with/CommonTableExpressionSegmentBinder.java
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/with/CommonTableExpressionSegmentBinder.java
index 080818f21e0..e82f6aedbd2 100644
---
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/with/CommonTableExpressionSegmentBinder.java
+++
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/with/CommonTableExpressionSegmentBinder.java
@@ -44,7 +44,7 @@ public final class CommonTableExpressionSegmentBinder {
public static CommonTableExpressionSegment bind(final
CommonTableExpressionSegment segment, final SQLStatementBinderContext
statementBinderContext,
final Map<String,
TableSegmentBinderContext> tableBinderContexts) {
SubquerySegment boundedSubquerySegment =
SubquerySegmentBinder.bind(segment.getSubquery(), statementBinderContext,
tableBinderContexts);
- CommonTableExpressionSegment result = new
CommonTableExpressionSegment(segment.getStartIndex(), segment.getStopIndex(),
segment.getIdentifier(), boundedSubquerySegment);
+ CommonTableExpressionSegment result = new
CommonTableExpressionSegment(segment.getStartIndex(), segment.getStopIndex(),
segment.getAliasSegment(), boundedSubquerySegment);
// TODO bind with columns
result.getColumns().addAll(segment.getColumns());
return result;
diff --git
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/with/WithSegmentBinder.java
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/with/WithSegmentBinder.java
index d15dbda4312..c2bd9a5c1d2 100644
---
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/with/WithSegmentBinder.java
+++
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/segment/with/WithSegmentBinder.java
@@ -50,8 +50,8 @@ public final class WithSegmentBinder {
for (CommonTableExpressionSegment each :
segment.getCommonTableExpressions()) {
CommonTableExpressionSegment boundedCommonTableExpression =
CommonTableExpressionSegmentBinder.bind(each, statementBinderContext,
tableBinderContexts);
boundedCommonTableExpressions.add(boundedCommonTableExpression);
- externalTableBinderContexts.put(each.getIdentifier().getValue(),
- new
SimpleTableSegmentBinderContext(boundedCommonTableExpression.getSubquery().getSelect().getProjections().getProjections()));
+ each.getAliasName().ifPresent(aliasName ->
externalTableBinderContexts.put(aliasName,
+ new
SimpleTableSegmentBinderContext(boundedCommonTableExpression.getSubquery().getSelect().getProjections().getProjections())));
}
return new WithSegment(segment.getStartIndex(),
segment.getStopIndex(), boundedCommonTableExpressions);
}
diff --git
a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/segment/expression/impl/SubquerySegmentBinderTest.java
b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/segment/expression/impl/SubquerySegmentBinderTest.java
index e2347e83e59..1bd83aa091a 100644
---
a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/segment/expression/impl/SubquerySegmentBinderTest.java
+++
b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/segment/expression/impl/SubquerySegmentBinderTest.java
@@ -34,6 +34,7 @@ import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ColumnPr
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ProjectionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ProjectionsSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.WhereSegment;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.AliasSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.WithSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.bounded.ColumnSegmentBoundedInfo;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
@@ -51,12 +52,12 @@ import java.util.Map;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertInstanceOf;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.junit.jupiter.api.Assertions.assertInstanceOf;
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
-import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
class SubquerySegmentBinderTest {
@@ -116,7 +117,7 @@ class SubquerySegmentBinderTest {
oracleSubquerySelectStatement.setFrom(new SimpleTableSegment(new
TableNameSegment(43, 49, new IdentifierValue("t_order"))));
ExpressionSegment whereExpressionSegment = new ColumnSegment(57, 62,
new IdentifierValue("status"));
oracleSubquerySelectStatement.setWhere(new WhereSegment(51, 73,
whereExpressionSegment));
- CommonTableExpressionSegment commonTableExpressionSegment = new
CommonTableExpressionSegment(0, 1, new IdentifierValue("submit_order"),
+ CommonTableExpressionSegment commonTableExpressionSegment = new
CommonTableExpressionSegment(0, 1, new AliasSegment(0, 1, new
IdentifierValue("submit_order")),
new SubquerySegment(22, 73, oracleSubquerySelectStatement,
"SELECT order_id FROM t_order WHERE status = 'SUBMIT'"));
WithSegment withSegment = new WithSegment(0, 74,
Collections.singleton(commonTableExpressionSegment));
OracleSelectStatement oracleSelectStatement = new
OracleSelectStatement();
diff --git
a/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/converter/segment/with/WithConverter.java
b/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/converter/segment/with/WithConverter.java
index 138a5a80ce5..f386ab1f613 100644
---
a/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/converter/segment/with/WithConverter.java
+++
b/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/converter/segment/with/WithConverter.java
@@ -55,7 +55,7 @@ public final class WithConverter {
private static SqlNodeList convertWithItem(final
Collection<CommonTableExpressionSegment> commonTableExpressionSegments) {
SqlNodeList result = new SqlNodeList(SqlParserPos.ZERO);
for (CommonTableExpressionSegment each :
commonTableExpressionSegments) {
- SqlIdentifier name = new
SqlIdentifier(each.getIdentifier().getValue(), SqlParserPos.ZERO);
+ SqlIdentifier name = new
SqlIdentifier(each.getAliasName().orElse(""), SqlParserPos.ZERO);
SqlNodeList columns = each.getColumns().isEmpty() ? null :
convertColumns(each.getColumns());
result.add(new SqlWithItem(SqlParserPos.ZERO, name, columns, new
SelectStatementConverter().convert(each.getSubquery().getSelect())));
}
diff --git
a/parser/sql/dialect/doris/src/main/antlr4/imports/doris/DMLStatement.g4
b/parser/sql/dialect/doris/src/main/antlr4/imports/doris/DMLStatement.g4
index 9b577cb1c38..50508d1615f 100644
--- a/parser/sql/dialect/doris/src/main/antlr4/imports/doris/DMLStatement.g4
+++ b/parser/sql/dialect/doris/src/main/antlr4/imports/doris/DMLStatement.g4
@@ -244,7 +244,7 @@ withClause
;
cteClause
- : identifier (LP_ columnNames RP_)? AS subquery
+ : alias (LP_ columnNames RP_)? AS subquery
;
selectSpecification
diff --git
a/parser/sql/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/doris/visitor/statement/DorisStatementVisitor.java
b/parser/sql/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/doris/visitor/statement/DorisStatementVisitor.java
index faece8c1038..8fb1c8beb2c 100644
---
a/parser/sql/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/doris/visitor/statement/DorisStatementVisitor.java
+++
b/parser/sql/dialect/doris/src/main/java/org/apache/shardingsphere/sql/parser/doris/visitor/statement/DorisStatementVisitor.java
@@ -751,7 +751,7 @@ public abstract class DorisStatementVisitor extends
DorisStatementBaseVisitor<AS
@SuppressWarnings("unchecked")
@Override
public ASTNode visitCteClause(final CteClauseContext ctx) {
- CommonTableExpressionSegment result = new
CommonTableExpressionSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), (IdentifierValue) visit(ctx.identifier()),
+ CommonTableExpressionSegment result = new
CommonTableExpressionSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), (AliasSegment) visit(ctx.alias()),
new SubquerySegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), (DorisSelectStatement) visit(ctx.subquery()),
getOriginalText(ctx.subquery())));
if (null != ctx.columnNames()) {
CollectionValue<ColumnSegment> columns =
(CollectionValue<ColumnSegment>) visit(ctx.columnNames());
diff --git
a/parser/sql/dialect/mysql/src/main/antlr4/imports/mysql/DMLStatement.g4
b/parser/sql/dialect/mysql/src/main/antlr4/imports/mysql/DMLStatement.g4
index fa784500ddd..3eb5388f6ca 100644
--- a/parser/sql/dialect/mysql/src/main/antlr4/imports/mysql/DMLStatement.g4
+++ b/parser/sql/dialect/mysql/src/main/antlr4/imports/mysql/DMLStatement.g4
@@ -244,7 +244,7 @@ withClause
;
cteClause
- : identifier (LP_ columnNames RP_)? AS subquery
+ : alias (LP_ columnNames RP_)? AS subquery
;
selectSpecification
diff --git
a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/format/MySQLFormatVisitor.java
b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/format/MySQLFormatVisitor.java
index ebdab7c1e3d..152ca860c43 100644
---
a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/format/MySQLFormatVisitor.java
+++
b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/format/MySQLFormatVisitor.java
@@ -777,7 +777,7 @@ public final class MySQLFormatVisitor extends
MySQLStatementBaseVisitor<String>
@Override
public String visitCteClause(final CteClauseContext ctx) {
- visit(ctx.identifier());
+ visit(ctx.alias());
formattedSQL.append(' ');
if (null != ctx.columnNames()) {
visit(ctx.columnNames());
diff --git
a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/MySQLStatementVisitor.java
b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/MySQLStatementVisitor.java
index b582a108149..606e739b61f 100644
---
a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/MySQLStatementVisitor.java
+++
b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/MySQLStatementVisitor.java
@@ -215,6 +215,7 @@ import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.Parameter
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.ParenthesesSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.WindowSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.WithSegment;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.match.MatchAgainstExpression;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.DeleteMultiTableSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.FunctionTableSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.IndexHintSegment;
@@ -232,7 +233,6 @@ import
org.apache.shardingsphere.sql.parser.sql.common.value.literal.impl.Number
import
org.apache.shardingsphere.sql.parser.sql.common.value.literal.impl.OtherLiteralValue;
import
org.apache.shardingsphere.sql.parser.sql.common.value.literal.impl.StringLiteralValue;
import
org.apache.shardingsphere.sql.parser.sql.common.value.parametermarker.ParameterMarkerValue;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.match.MatchAgainstExpression;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dml.MySQLDeleteStatement;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dml.MySQLInsertStatement;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dml.MySQLSelectStatement;
@@ -751,7 +751,7 @@ public abstract class MySQLStatementVisitor extends
MySQLStatementBaseVisitor<AS
@SuppressWarnings("unchecked")
@Override
public ASTNode visitCteClause(final CteClauseContext ctx) {
- CommonTableExpressionSegment result = new
CommonTableExpressionSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), (IdentifierValue) visit(ctx.identifier()),
+ CommonTableExpressionSegment result = new
CommonTableExpressionSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), (AliasSegment) visit(ctx.alias()),
new SubquerySegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), (MySQLSelectStatement) visit(ctx.subquery()),
getOriginalText(ctx.subquery())));
if (null != ctx.columnNames()) {
CollectionValue<ColumnSegment> columns =
(CollectionValue<ColumnSegment>) visit(ctx.columnNames());
diff --git
a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/BaseRule.g4
b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/BaseRule.g4
index e7350108a0e..020502377b9 100644
--- a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/BaseRule.g4
+++ b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/BaseRule.g4
@@ -1274,7 +1274,7 @@ rollbackSegment
;
queryName
- : (owner DOT_)? name
+ : alias
;
cycleValue
diff --git
a/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleDMLStatementVisitor.java
b/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleDMLStatementVisitor.java
index 39e6921f305..e07117d1635 100644
---
a/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleDMLStatementVisitor.java
+++
b/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleDMLStatementVisitor.java
@@ -738,8 +738,8 @@ public final class OracleDMLStatementVisitor extends
OracleStatementVisitor impl
for (SubqueryFactoringClauseContext each :
ctx.subqueryFactoringClause()) {
SubquerySegment subquery = new
SubquerySegment(each.selectSubquery().start.getStartIndex(),
each.selectSubquery().stop.getStopIndex(), (OracleSelectStatement) visit(each),
getOriginalText(each));
- IdentifierValue identifier = (IdentifierValue)
visit(each.queryName().name().identifier());
- CommonTableExpressionSegment commonTableExpression = new
CommonTableExpressionSegment(each.start.getStartIndex(),
each.stop.getStopIndex(), identifier, subquery);
+ CommonTableExpressionSegment commonTableExpression = new
CommonTableExpressionSegment(each.start.getStartIndex(),
each.stop.getStopIndex(),
+ (AliasSegment) visit(each.queryName().alias()),
subquery);
if (null != each.searchClause()) {
ColumnNameContext columnName =
each.searchClause().orderingColumn().columnName();
commonTableExpression.getColumns().add((ColumnSegment)
visit(columnName));
diff --git
a/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/DMLStatement.g4
b/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/DMLStatement.g4
index f851f965de8..bde4311f89d 100644
---
a/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/DMLStatement.g4
+++
b/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/DMLStatement.g4
@@ -223,7 +223,7 @@ cteClauseSet
;
cteClause
- : identifier columnNames? AS subquery
+ : alias columnNames? AS subquery
;
outputClause
diff --git
a/parser/sql/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/SQLServerStatementVisitor.java
b/parser/sql/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/SQLServerStatementVisitor.java
index d4c0de15619..475f5ec317d 100644
---
a/parser/sql/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/SQLServerStatementVisitor.java
+++
b/parser/sql/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/SQLServerStatementVisitor.java
@@ -60,6 +60,8 @@ import
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.Exe
import
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.ExprContext;
import
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.FromClauseContext;
import
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.FunctionCallContext;
+import
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.GraphAggFunctionContext;
+import
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.GraphFunctionContext;
import
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.GroupByClauseContext;
import
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.HavingClauseContext;
import
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.HexadecimalLiteralsContext;
@@ -137,8 +139,6 @@ import
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.Whe
import
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.WindowFunctionContext;
import
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.WithClauseContext;
import
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.WithTableHintContext;
-import
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.GraphFunctionContext;
-import
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.GraphAggFunctionContext;
import org.apache.shardingsphere.sql.parser.sql.common.enums.AggregationType;
import org.apache.shardingsphere.sql.parser.sql.common.enums.JoinType;
import org.apache.shardingsphere.sql.parser.sql.common.enums.OrderDirection;
@@ -1009,8 +1009,7 @@ public abstract class SQLServerStatementVisitor extends
SQLServerStatementBaseVi
for (CteClauseContext each : ctx.cteClause()) {
SubquerySegment subquery = new
SubquerySegment(each.subquery().aggregationClause().start.getStartIndex(),
each.subquery().aggregationClause().stop.getStopIndex(),
(SQLServerSelectStatement) visit(each.subquery()),
getOriginalText(each.subquery()));
- IdentifierValue identifier = (IdentifierValue)
visit(each.identifier());
- CommonTableExpressionSegment commonTableExpression = new
CommonTableExpressionSegment(each.start.getStartIndex(),
each.stop.getStopIndex(), identifier, subquery);
+ CommonTableExpressionSegment commonTableExpression = new
CommonTableExpressionSegment(each.start.getStartIndex(),
each.stop.getStopIndex(), (AliasSegment) visit(each.alias()), subquery);
if (null != each.columnNames()) {
ColumnNamesContext columnNames = each.columnNames();
CollectionValue<ColumnSegment> columns =
(CollectionValue<ColumnSegment>) visit(columnNames);
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 86b185da4c5..8c081fa1efe 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
@@ -30,6 +30,7 @@ import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.Expressi
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.FunctionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.InExpression;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ListExpression;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.complex.CommonTableExpressionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.subquery.SubqueryExpressionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.AggregationProjectionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ColumnProjectionSegment;
@@ -42,6 +43,7 @@ import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.order.item.Or
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.LockSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.OwnerAvailable;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.OwnerSegment;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.match.MatchAgainstExpression;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.DeleteMultiTableSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.JoinTableSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
@@ -58,7 +60,6 @@ import
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.UpdateState
import
org.apache.shardingsphere.sql.parser.sql.dialect.handler.ddl.CreateTableStatementHandler;
import
org.apache.shardingsphere.sql.parser.sql.dialect.handler.dml.InsertStatementHandler;
import
org.apache.shardingsphere.sql.parser.sql.dialect.handler.dml.SelectStatementHandler;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.match.MatchAgainstExpression;
import java.util.Collection;
import java.util.LinkedList;
@@ -99,10 +100,19 @@ public final class TableExtractor {
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);
}
+ private void extractTablesFromCTEs(final
Collection<CommonTableExpressionSegment> commonTableExpressionSegments) {
+ for (CommonTableExpressionSegment each :
commonTableExpressionSegments) {
+ extractTablesFromSelect(each.getSubquery().getSelect());
+ }
+ }
+
private void extractTablesFromTableSegment(final TableSegment
tableSegment) {
if (tableSegment instanceof SimpleTableSegment) {
tableContext.add(tableSegment);
@@ -363,7 +373,7 @@ public final class TableExtractor {
/**
* Extract table that should be rewritten from create view statement.
- *
+ *
* @param createViewStatement create view statement
*/
public void extractTablesFromCreateViewStatement(final CreateViewStatement
createViewStatement) {
diff --git
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/complex/CommonTableExpressionSegment.java
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/complex/CommonTableExpressionSegment.java
index 2a567152c94..4abff481154 100644
---
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/complex/CommonTableExpressionSegment.java
+++
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/expr/complex/CommonTableExpressionSegment.java
@@ -17,35 +17,47 @@
package
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.complex;
+import lombok.AllArgsConstructor;
import lombok.Getter;
-import lombok.RequiredArgsConstructor;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.subquery.SubquerySegment;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.AliasSegment;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.TableSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
import java.util.Collection;
import java.util.LinkedList;
+import java.util.Optional;
/**
* Common table expression segment.
*/
-@RequiredArgsConstructor
+@AllArgsConstructor
@Getter
-public final class CommonTableExpressionSegment implements ExpressionSegment {
+public final class CommonTableExpressionSegment implements TableSegment {
private final int startIndex;
private final int stopIndex;
- private final IdentifierValue identifier;
+ private AliasSegment aliasSegment;
private final SubquerySegment subquery;
private final Collection<ColumnSegment> columns = new LinkedList<>();
@Override
- public String getText() {
- return identifier.getValue();
+ public Optional<String> getAliasName() {
+ return getAlias().map(IdentifierValue::getValue);
+ }
+
+ @Override
+ public Optional<IdentifierValue> getAlias() {
+ return Optional.of(aliasSegment).map(AliasSegment::getIdentifier);
+ }
+
+ @Override
+ public void setAlias(final AliasSegment alias) {
+ this.aliasSegment = alias;
}
}
diff --git
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dml/SelectStatement.java
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dml/SelectStatement.java
index 0e6aba5607a..83632882e85 100644
---
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dml/SelectStatement.java
+++
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dml/SelectStatement.java
@@ -25,6 +25,7 @@ import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.order.GroupBy
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.order.OrderBySegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.HavingSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.WhereSegment;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.WithSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.TableSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
@@ -51,6 +52,8 @@ public abstract class SelectStatement extends
AbstractSQLStatement implements DM
private CombineSegment combine;
+ private WithSegment withSegment;
+
/**
* Get from.
*
@@ -104,4 +107,13 @@ public abstract class SelectStatement extends
AbstractSQLStatement implements DM
public Optional<CombineSegment> getCombine() {
return Optional.ofNullable(combine);
}
+
+ /**
+ * Get with segment.
+ *
+ * @return with segment.
+ */
+ public Optional<WithSegment> getWithSegment() {
+ return Optional.ofNullable(withSegment);
+ }
}
diff --git
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/util/ColumnExtractor.java
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/util/ColumnExtractor.java
index 95acdbc2504..abb85d7aeb2 100644
---
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/util/ColumnExtractor.java
+++
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/util/ColumnExtractor.java
@@ -24,6 +24,7 @@ import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BetweenE
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BinaryOperationExpression;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.InExpression;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.complex.CommonTableExpressionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.AggregationProjectionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ColumnProjectionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.DatetimeProjectionSegment;
@@ -183,6 +184,9 @@ public final class ColumnExtractor {
if (tableSegment instanceof SubqueryTableSegment && containsSubQuery) {
extractFromSelectStatement(columnSegments, ((SubqueryTableSegment)
tableSegment).getSubquery().getSelect(), true);
}
+ if (tableSegment instanceof CommonTableExpressionSegment &&
containsSubQuery) {
+ extractFromSelectStatement(columnSegments,
((CommonTableExpressionSegment) tableSegment).getSubquery().getSelect(), true);
+ }
}
/**
diff --git
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/util/ExpressionExtractUtils.java
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/util/ExpressionExtractUtils.java
index 151f307438c..99f9ec382cc 100644
---
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/util/ExpressionExtractUtils.java
+++
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/util/ExpressionExtractUtils.java
@@ -32,7 +32,6 @@ import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ListExpr
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.NotExpression;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.TypeCastExpression;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ValuesExpression;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.complex.CommonTableExpressionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.ParameterMarkerExpressionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.subquery.SubqueryExpressionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.subquery.SubquerySegment;
@@ -61,7 +60,7 @@ public final class ExpressionExtractUtils {
/**
* Get and predicate collection.
- *
+ *
* @param expression expression segment
* @return and predicate collection
*/
@@ -108,7 +107,7 @@ public final class ExpressionExtractUtils {
/**
* Get parameter marker expression collection.
- *
+ *
* @param expressions expression collection
* @return parameter marker expression collection
*/
@@ -142,7 +141,7 @@ public final class ExpressionExtractUtils {
/**
* Extract join conditions.
- *
+ *
* @param joinConditions join conditions
* @param whereSegments where segments
*/
@@ -190,9 +189,6 @@ public final class ExpressionExtractUtils {
if (expression instanceof OuterJoinExpression) {
result.add(((OuterJoinExpression) expression).getColumnName());
}
- if (expression instanceof CommonTableExpressionSegment) {
- result.addAll(((CommonTableExpressionSegment)
expression).getColumns());
- }
if (expression instanceof DatetimeExpression) {
result.addAll(extractColumns(((DatetimeExpression)
expression).getLeft(), containsSubQuery));
result.addAll(extractColumns(((DatetimeExpression)
expression).getRight(), containsSubQuery));
diff --git
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/util/SubqueryExtractUtils.java
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/util/SubqueryExtractUtils.java
index aae36cf8a17..aff4f2b40e8 100644
---
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/util/SubqueryExtractUtils.java
+++
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/util/SubqueryExtractUtils.java
@@ -29,6 +29,7 @@ import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.Function
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.InExpression;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ListExpression;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.NotExpression;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.complex.CommonTableExpressionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.subquery.SubqueryExpressionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.subquery.SubquerySegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ExpressionProjectionSegment;
@@ -71,6 +72,16 @@ public final class SubqueryExtractUtils {
if (selectStatement.getCombine().isPresent()) {
extractSubquerySegmentsFromCombine(result,
selectStatement.getCombine().get());
}
+ if (selectStatement.getWithSegment().isPresent()) {
+ extractSubquerySegmentsFromCTEs(result,
selectStatement.getWithSegment().get().getCommonTableExpressions());
+ }
+ }
+
+ private static void extractSubquerySegmentsFromCTEs(final
List<SubquerySegment> result, final Collection<CommonTableExpressionSegment>
withSegment) {
+ for (CommonTableExpressionSegment each : withSegment) {
+ result.add(each.getSubquery());
+ extractSubquerySegments(result, each.getSubquery().getSelect());
+ }
}
private static void extractSubquerySegmentsFromProjections(final
List<SubquerySegment> result, final ProjectionsSegment projections) {
diff --git
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/doris/dml/DorisSelectStatement.java
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/doris/dml/DorisSelectStatement.java
index e70ff93fd07..ed773fb9eb4 100644
---
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/doris/dml/DorisSelectStatement.java
+++
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/doris/dml/DorisSelectStatement.java
@@ -21,7 +21,6 @@ import lombok.Setter;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.pagination.limit.LimitSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.LockSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.WindowSegment;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.WithSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.doris.DorisStatement;
@@ -42,8 +41,6 @@ public final class DorisSelectStatement extends
SelectStatement implements Doris
private WindowSegment window;
- private WithSegment withSegment;
-
/**
* Get order by segment.
*
@@ -79,13 +76,4 @@ public final class DorisSelectStatement extends
SelectStatement implements Doris
public Optional<SimpleTableSegment> getTable() {
return Optional.ofNullable(table);
}
-
- /**
- * Get with segment.
- *
- * @return with segment.
- */
- public Optional<WithSegment> getWithSegment() {
- return Optional.ofNullable(withSegment);
- }
}
diff --git
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/dml/MySQLSelectStatement.java
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/dml/MySQLSelectStatement.java
index f6d35886c5b..9ea85a5b978 100644
---
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/dml/MySQLSelectStatement.java
+++
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/dml/MySQLSelectStatement.java
@@ -21,7 +21,6 @@ import lombok.Setter;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.pagination.limit.LimitSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.LockSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.WindowSegment;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.WithSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.MySQLStatement;
@@ -42,8 +41,6 @@ public final class MySQLSelectStatement extends
SelectStatement implements MySQL
private WindowSegment window;
- private WithSegment withSegment;
-
/**
* Get order by segment.
*
@@ -80,12 +77,4 @@ public final class MySQLSelectStatement extends
SelectStatement implements MySQL
return Optional.ofNullable(table);
}
- /**
- * Get with segment.
- *
- * @return with segment.
- */
- public Optional<WithSegment> getWithSegment() {
- return Optional.ofNullable(withSegment);
- }
}
diff --git
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/dml/OracleSelectStatement.java
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/dml/OracleSelectStatement.java
index bc38c2e4ae9..43956a3e87e 100644
---
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/dml/OracleSelectStatement.java
+++
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/dml/OracleSelectStatement.java
@@ -20,7 +20,6 @@ package
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.dml;
import lombok.Setter;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.LockSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.ModelSegment;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.WithSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.OracleStatement;
@@ -36,8 +35,6 @@ public final class OracleSelectStatement extends
SelectStatement implements Orac
private ModelSegment modelSegment;
- private WithSegment withSegment;
-
/**
* Get lock segment.
*
@@ -55,13 +52,4 @@ public final class OracleSelectStatement extends
SelectStatement implements Orac
public Optional<ModelSegment> getModelSegment() {
return Optional.ofNullable(modelSegment);
}
-
- /**
- * Get with segment.
- *
- * @return with segment.
- */
- public Optional<WithSegment> getWithSegment() {
- return Optional.ofNullable(withSegment);
- }
}
diff --git
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/sqlserver/dml/SQLServerSelectStatement.java
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/sqlserver/dml/SQLServerSelectStatement.java
index 5e7f16e441d..18f18b96a9e 100644
---
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/sqlserver/dml/SQLServerSelectStatement.java
+++
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/sqlserver/dml/SQLServerSelectStatement.java
@@ -19,7 +19,6 @@ package
org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.dml
import lombok.Setter;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.pagination.limit.LimitSegment;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.WithSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.TableSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
import
org.apache.shardingsphere.sql.parser.sql.dialect.segment.sqlserver.hint.WithTableHintSegment;
@@ -35,8 +34,6 @@ public final class SQLServerSelectStatement extends
SelectStatement implements S
private LimitSegment limit;
- private WithSegment withSegment;
-
private TableSegment intoSegment;
private WithTableHintSegment withTableHintSegment;
@@ -50,15 +47,6 @@ public final class SQLServerSelectStatement extends
SelectStatement implements S
return Optional.ofNullable(limit);
}
- /**
- * Get with segment.
- *
- * @return with segment.
- */
- public Optional<WithSegment> getWithSegment() {
- return Optional.ofNullable(withSegment);
- }
-
/**
* Get into segment.
*
diff --git
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/with/WithClauseAssert.java
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/with/WithClauseAssert.java
index ae9e26067ce..f6d87fa2d35 100644
---
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/with/WithClauseAssert.java
+++
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/with/WithClauseAssert.java
@@ -62,7 +62,7 @@ public final class WithClauseAssert {
if (!expected.getColumns().isEmpty()) {
assertThat(assertContext.getText("Common table expression column
size assertion error: "), actual.getColumns().size(),
is(expected.getColumns().size()));
}
- assertThat(assertContext.getText("Common table expression name
assertion error: "), actual.getIdentifier().getValue(), is(expected.getName()));
+ assertThat(assertContext.getText("Common table expression name
assertion error: "), actual.getAliasName().orElse(null),
is(expected.getName()));
int count = 0;
for (ColumnSegment each : actual.getColumns()) {
ColumnAssert.assertIs(assertContext, each,
expected.getColumns().get(count));