This is an automated email from the ASF dual-hosted git repository.
panjuan 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 ab2429ba780 Refactor Oracle, SQLServer and SQL92 join statement parse
and add test case (#20227)
ab2429ba780 is described below
commit ab2429ba780eb6cfb9eb81bf791bad7d2db759fb
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Wed Aug 17 12:49:48 2022 +0800
Refactor Oracle, SQLServer and SQL92 join statement parse and add test case
(#20227)
---
.../segment/from/impl/JoinTableConverter.java | 31 +------------
.../statement/impl/MySQLStatementSQLVisitor.java | 1 +
.../impl/OpenGaussStatementSQLVisitor.java | 1 +
.../impl/OracleDMLStatementSQLVisitor.java | 52 +++++++++++++++++++---
.../impl/PostgreSQLStatementSQLVisitor.java | 1 +
.../impl/SQL92DMLStatementSQLVisitor.java | 21 +++++++--
.../impl/SQLServerStatementSQLVisitor.java | 23 ++++++++--
.../asserts/segment/table/TableAssert.java | 10 +++++
.../segment/impl/table/ExpectedJoinTable.java | 4 ++
.../src/main/resources/case/dal/explain.xml | 4 +-
.../src/main/resources/case/ddl/create-table.xml | 4 +-
.../main/resources/case/dml/select-aggregate.xml | 4 +-
.../main/resources/case/dml/select-expression.xml | 2 +-
.../main/resources/case/dml/select-group-by.xml | 12 ++---
.../src/main/resources/case/dml/select-join.xml | 16 +++----
.../src/main/resources/case/dml/select-lock.xml | 6 +--
.../src/main/resources/case/dml/select-or.xml | 6 +--
.../main/resources/case/dml/select-order-by.xml | 6 +--
.../dml/select-pagination-group-by-order-by.xml | 28 ++++++------
.../main/resources/case/dml/select-pagination.xml | 30 ++++++-------
.../main/resources/case/dml/select-sub-query.xml | 2 +-
.../src/main/resources/case/dml/select-with.xml | 4 +-
.../src/main/resources/case/dml/select.xml | 34 +++++++-------
23 files changed, 182 insertions(+), 120 deletions(-)
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/from/impl/JoinTableConverter.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/from/impl/JoinTableConverter.java
index 89e81cbdfc5..9a58950ed45 100644
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/from/impl/JoinTableConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/from/impl/JoinTableConverter.java
@@ -35,40 +35,13 @@ import java.util.Optional;
*/
public final class JoinTableConverter implements
SQLSegmentConverter<JoinTableSegment, SqlJoin> {
- private static final String JOIN_TYPE_INNER = "INNER";
-
- private static final String JOIN_TYPE_LEFT = "LEFT";
-
- private static final String JOIN_TYPE_RIGHT = "RIGHT";
-
- private static final String JOIN_TYPE_FULL = "FULL";
-
@Override
public Optional<SqlJoin> convert(final JoinTableSegment segment) {
SqlNode left = new
TableConverter().convert(segment.getLeft()).orElseThrow(IllegalStateException::new);
SqlNode right = new
TableConverter().convert(segment.getRight()).orElseThrow(IllegalStateException::new);
Optional<SqlNode> condition = new
ExpressionConverter().convert(segment.getCondition());
SqlLiteral conditionType = condition.isPresent() ?
JoinConditionType.ON.symbol(SqlParserPos.ZERO) :
JoinConditionType.NONE.symbol(SqlParserPos.ZERO);
- return Optional.of(
- new SqlJoin(SqlParserPos.ZERO, left,
SqlLiteral.createBoolean(false, SqlParserPos.ZERO),
convertJoinType(segment.getJoinType()), right, conditionType,
condition.orElse(null)));
- }
-
- private SqlLiteral convertJoinType(final String joinType) {
- if (null == joinType) {
- return JoinType.COMMA.symbol(SqlParserPos.ZERO);
- }
- if (JOIN_TYPE_INNER.equals(joinType)) {
- return JoinType.INNER.symbol(SqlParserPos.ZERO);
- }
- if (JOIN_TYPE_LEFT.equals(joinType)) {
- return JoinType.LEFT.symbol(SqlParserPos.ZERO);
- }
- if (JOIN_TYPE_RIGHT.equals(joinType)) {
- return JoinType.RIGHT.symbol(SqlParserPos.ZERO);
- }
- if (JOIN_TYPE_FULL.equals(joinType)) {
- return JoinType.FULL.symbol(SqlParserPos.ZERO);
- }
- throw new UnsupportedOperationException("unsupported join type " +
joinType);
+ SqlLiteral joinType =
JoinType.valueOf(segment.getJoinType()).symbol(SqlParserPos.ZERO);
+ return Optional.of(new SqlJoin(SqlParserPos.ZERO, left,
SqlLiteral.createBoolean(false, SqlParserPos.ZERO), joinType, right,
conditionType, condition.orElse(null)));
}
}
diff --git
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLStatementSQLVisitor.java
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLStatementSQLVisitor.java
index 76dbf0e5251..bd0ee26535e 100644
---
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLStatementSQLVisitor.java
+++
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLStatementSQLVisitor.java
@@ -1502,6 +1502,7 @@ public abstract class MySQLStatementSQLVisitor extends
MySQLStatementBaseVisitor
result.setStartIndex(tableSegment.getStartIndex());
result.setStopIndex(ctx.stop.getStopIndex());
result.setLeft(tableSegment);
+ result.setJoinType(JoinType.COMMA.name());
result.setRight((TableSegment) visit(ctx));
return result;
}
diff --git
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/impl/OpenGaussStatementSQLVisitor.java
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/impl/OpenGaussStatementSQLVisitor.java
index 344c5f85bdb..211f1631ddc 100644
---
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/impl/OpenGaussStatementSQLVisitor.java
+++
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/impl/OpenGaussStatementSQLVisitor.java
@@ -1032,6 +1032,7 @@ public abstract class OpenGaussStatementSQLVisitor
extends OpenGaussStatementBas
result.setStopIndex(ctx.stop.getStopIndex());
result.setLeft((TableSegment) visit(ctx.fromList()));
result.setRight((TableSegment) visit(ctx.tableReference()));
+ result.setJoinType(JoinType.COMMA.name());
return result;
}
return visit(ctx.tableReference());
diff --git
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/impl/OracleDMLStatementSQLVisitor.java
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/impl/OracleDMLStatementSQLVisitor.java
index f61fc97381c..87b41139951 100644
---
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/impl/OracleDMLStatementSQLVisitor.java
+++
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/impl/OracleDMLStatementSQLVisitor.java
@@ -53,6 +53,7 @@ import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.GroupB
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.GroupingExprListContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.GroupingSetsClauseContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.HavingClauseContext;
+import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.InnerCrossJoinClauseContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.InsertContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.InsertIntoClauseContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.InsertMultiTableContext;
@@ -60,6 +61,7 @@ import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.Insert
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.InsertValuesClauseContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.IntoClauseContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.JoinClauseContext;
+import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.LockTableContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.MergeAssignmentContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.MergeAssignmentValueContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.MergeContext;
@@ -69,6 +71,7 @@ import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.ModelC
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.MultiColumnForLoopContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.MultiTableElementContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.OrderByClauseContext;
+import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.OuterJoinClauseContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.ParenthesisSelectSubqueryContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.QueryBlockContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.QueryNameContext;
@@ -100,7 +103,7 @@ import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.Update
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.UsingClauseContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.WhereClauseContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.WithClauseContext;
-import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.LockTableContext;
+import org.apache.shardingsphere.sql.parser.sql.common.constant.JoinType;
import org.apache.shardingsphere.sql.parser.sql.common.constant.OrderDirection;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.AssignmentSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.ColumnAssignmentSegment;
@@ -147,10 +150,10 @@ import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.Identifi
import
org.apache.shardingsphere.sql.parser.sql.common.value.literal.impl.BooleanLiteralValue;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.dml.OracleDeleteStatement;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.dml.OracleInsertStatement;
+import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.dml.OracleLockTableStatement;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.dml.OracleMergeStatement;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.dml.OracleSelectStatement;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.dml.OracleUpdateStatement;
-import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.dml.OracleLockTableStatement;
import java.util.Collection;
import java.util.Collections;
@@ -757,6 +760,7 @@ public final class OracleDMLStatementSQLVisitor extends
OracleStatementSQLVisito
result.setStartIndex(tableSegment.getStartIndex());
result.setStopIndex(ctx.stop.getStopIndex());
result.setLeft(tableSegment);
+ result.setJoinType(JoinType.COMMA.name());
result.setRight((TableSegment) visit(ctx));
return result;
}
@@ -786,17 +790,18 @@ public final class OracleDMLStatementSQLVisitor extends
OracleStatementSQLVisito
result.setLeft(tableSegment);
result.setStartIndex(tableSegment.getStartIndex());
result.setStopIndex(ctx.stop.getStopIndex());
+ result.setJoinType(getJoinType(ctx));
if (null != ctx.innerCrossJoinClause()) {
TableSegment right = (TableSegment)
visit(ctx.innerCrossJoinClause().selectTableReference());
result.setRight(right);
if (null != ctx.innerCrossJoinClause().selectJoinSpecification()) {
- result =
visitSelectJoinSpecification(ctx.innerCrossJoinClause().selectJoinSpecification(),
result);
+
visitSelectJoinSpecification(ctx.innerCrossJoinClause().selectJoinSpecification(),
result);
}
} else if (null != ctx.outerJoinClause()) {
TableSegment right = (TableSegment)
visit(ctx.outerJoinClause().selectTableReference());
result.setRight(right);
if (null != ctx.outerJoinClause().selectJoinSpecification()) {
- result =
visitSelectJoinSpecification(ctx.outerJoinClause().selectJoinSpecification(),
result);
+
visitSelectJoinSpecification(ctx.outerJoinClause().selectJoinSpecification(),
result);
}
} else {
TableSegment right = (TableSegment)
visit(ctx.crossOuterApplyClause());
@@ -805,7 +810,43 @@ public final class OracleDMLStatementSQLVisitor extends
OracleStatementSQLVisito
return result;
}
- private JoinTableSegment visitSelectJoinSpecification(final
SelectJoinSpecificationContext ctx, final JoinTableSegment joinTableSource) {
+ private String getJoinType(final SelectJoinOptionContext ctx) {
+ if (null != ctx.innerCrossJoinClause()) {
+ return getInnerCrossJoinType(ctx.innerCrossJoinClause());
+ }
+ if (null != ctx.outerJoinClause()) {
+ return getOuterJoinType(ctx.outerJoinClause());
+ }
+ if (null != ctx.crossOuterApplyClause()) {
+ return getCrossOuterApplyType(ctx.crossOuterApplyClause());
+ }
+ return JoinType.COMMA.name();
+ }
+
+ private String getCrossOuterApplyType(final CrossOuterApplyClauseContext
ctx) {
+ if (null != ctx.CROSS()) {
+ return JoinType.CROSS.name();
+ }
+ return JoinType.LEFT.name();
+ }
+
+ private String getOuterJoinType(final OuterJoinClauseContext ctx) {
+ if (null != ctx.outerJoinType().FULL()) {
+ return JoinType.FULL.name();
+ } else if (null != ctx.outerJoinType().LEFT()) {
+ return JoinType.LEFT.name();
+ }
+ return JoinType.RIGHT.name();
+ }
+
+ private static String getInnerCrossJoinType(final
InnerCrossJoinClauseContext ctx) {
+ if (null != ctx.CROSS()) {
+ return JoinType.CROSS.name();
+ }
+ return JoinType.INNER.name();
+ }
+
+ private void visitSelectJoinSpecification(final
SelectJoinSpecificationContext ctx, final JoinTableSegment joinTableSource) {
if (null != ctx.expr()) {
ExpressionSegment condition = (ExpressionSegment)
visit(ctx.expr());
joinTableSource.setCondition(condition);
@@ -813,7 +854,6 @@ public final class OracleDMLStatementSQLVisitor extends
OracleStatementSQLVisito
if (null != ctx.USING()) {
joinTableSource.setUsing(ctx.columnNames().columnName().stream().map(each ->
(ColumnSegment) visit(each)).collect(Collectors.toList()));
}
- return joinTableSource;
}
@Override
diff --git
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/impl/PostgreSQLStatementSQLVisitor.java
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/impl/PostgreSQLStatementSQLVisitor.java
index fb4bb77589f..9239a4975c2 100644
---
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/impl/PostgreSQLStatementSQLVisitor.java
+++
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/impl/PostgreSQLStatementSQLVisitor.java
@@ -998,6 +998,7 @@ public abstract class PostgreSQLStatementSQLVisitor extends
PostgreSQLStatementP
result.setStopIndex(ctx.stop.getStopIndex());
result.setLeft((TableSegment) visit(ctx.fromList()));
result.setRight((TableSegment) visit(ctx.tableReference()));
+ result.setJoinType(JoinType.COMMA.name());
return result;
}
return visit(ctx.tableReference());
diff --git
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/visitor/statement/impl/SQL92DMLStatementSQLVisitor.java
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/visitor/statement/impl/SQL92DMLStatementSQLVisitor.java
index 5f5f2fe0b76..452903da877 100644
---
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/visitor/statement/impl/SQL92DMLStatementSQLVisitor.java
+++
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/visitor/statement/impl/SQL92DMLStatementSQLVisitor.java
@@ -54,6 +54,7 @@ import
org.apache.shardingsphere.sql.parser.autogen.SQL92StatementParser.TableRe
import
org.apache.shardingsphere.sql.parser.autogen.SQL92StatementParser.TableReferencesContext;
import
org.apache.shardingsphere.sql.parser.autogen.SQL92StatementParser.UpdateContext;
import
org.apache.shardingsphere.sql.parser.autogen.SQL92StatementParser.WhereClauseContext;
+import org.apache.shardingsphere.sql.parser.sql.common.constant.JoinType;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.AssignmentSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.ColumnAssignmentSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.assignment.InsertValuesSegment;
@@ -390,6 +391,7 @@ public final class SQL92DMLStatementSQLVisitor extends
SQL92StatementSQLVisitor
result.setStopIndex(ctx.stop.getStopIndex());
result.setLeft(tableSegment);
result.setRight((TableSegment) visit(ctx));
+ result.setJoinType(JoinType.COMMA.name());
return result;
}
@@ -440,13 +442,27 @@ public final class SQL92DMLStatementSQLVisitor extends
SQL92StatementSQLVisitor
result.setStopIndex(ctx.stop.getStopIndex());
TableSegment right = (TableSegment) visit(ctx.tableFactor());
result.setRight(right);
+ result.setJoinType(getJoinType(ctx));
if (null != ctx.joinSpecification()) {
- result = visitJoinSpecification(ctx.joinSpecification(), result);
+ visitJoinSpecification(ctx.joinSpecification(), result);
}
return result;
}
- private JoinTableSegment visitJoinSpecification(final
JoinSpecificationContext ctx, final JoinTableSegment joinTableSource) {
+ private String getJoinType(final JoinedTableContext ctx) {
+ if (null != ctx.LEFT()) {
+ return JoinType.LEFT.name();
+ } else if (null != ctx.RIGHT()) {
+ return JoinType.RIGHT.name();
+ } else if (null != ctx.INNER()) {
+ return JoinType.INNER.name();
+ } else if (null != ctx.CROSS()) {
+ return JoinType.CROSS.name();
+ }
+ return JoinType.INNER.name();
+ }
+
+ private void visitJoinSpecification(final JoinSpecificationContext ctx,
final JoinTableSegment joinTableSource) {
if (null != ctx.expr()) {
ExpressionSegment condition = (ExpressionSegment)
visit(ctx.expr());
joinTableSource.setCondition(condition);
@@ -454,7 +470,6 @@ public final class SQL92DMLStatementSQLVisitor extends
SQL92StatementSQLVisitor
if (null != ctx.USING()) {
joinTableSource.setUsing(ctx.columnNames().columnName().stream().map(each ->
(ColumnSegment) visit(each)).collect(Collectors.toList()));
}
- return joinTableSource;
}
@Override
diff --git
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/impl/SQLServerStatementSQLVisitor.java
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/impl/SQLServerStatementSQLVisitor.java
index 9a5e93fd371..f08d8ae0f1b 100644
---
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/impl/SQLServerStatementSQLVisitor.java
+++
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/impl/SQLServerStatementSQLVisitor.java
@@ -106,6 +106,7 @@ import
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.Vie
import
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.WhereClauseContext;
import
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.WithClauseContext;
import
org.apache.shardingsphere.sql.parser.sql.common.constant.AggregationType;
+import org.apache.shardingsphere.sql.parser.sql.common.constant.JoinType;
import org.apache.shardingsphere.sql.parser.sql.common.constant.OrderDirection;
import
org.apache.shardingsphere.sql.parser.sql.common.constant.ParameterMarkerType;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.constraint.ConstraintSegment;
@@ -845,6 +846,7 @@ public abstract class SQLServerStatementSQLVisitor extends
SQLServerStatementBas
result.setStopIndex(ctx.stop.getStopIndex());
result.setLeft(tableSegment);
result.setRight((TableSegment) visit(ctx));
+ result.setJoinType(JoinType.COMMA.name());
return result;
}
@@ -1238,13 +1240,29 @@ public abstract class SQLServerStatementSQLVisitor
extends SQLServerStatementBas
result.setStopIndex(ctx.stop.getStopIndex());
TableSegment right = (TableSegment) visit(ctx.tableFactor());
result.setRight(right);
+ result.setJoinType(getJoinType(ctx));
if (null != ctx.joinSpecification()) {
- result = visitJoinSpecification(ctx.joinSpecification(), result);
+ visitJoinSpecification(ctx.joinSpecification(), result);
}
return result;
}
- private JoinTableSegment visitJoinSpecification(final
JoinSpecificationContext ctx, final JoinTableSegment joinTableSource) {
+ private String getJoinType(final JoinedTableContext ctx) {
+ if (null != ctx.LEFT()) {
+ return JoinType.LEFT.name();
+ } else if (null != ctx.RIGHT()) {
+ return JoinType.RIGHT.name();
+ } else if (null != ctx.FULL()) {
+ return JoinType.FULL.name();
+ } else if (null != ctx.INNER()) {
+ return JoinType.INNER.name();
+ } else if (null != ctx.CROSS()) {
+ return JoinType.CROSS.name();
+ }
+ return JoinType.INNER.name();
+ }
+
+ private void visitJoinSpecification(final JoinSpecificationContext ctx,
final JoinTableSegment joinTableSource) {
if (null != ctx.expr()) {
ExpressionSegment condition = (ExpressionSegment)
visit(ctx.expr());
joinTableSource.setCondition(condition);
@@ -1252,7 +1270,6 @@ public abstract class SQLServerStatementSQLVisitor
extends SQLServerStatementBas
if (null != ctx.USING()) {
joinTableSource.setUsing(ctx.columnNames().columnName().stream().map(each ->
(ColumnSegment) visit(each)).collect(Collectors.toList()));
}
- return joinTableSource;
}
@Override
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/table/TableAssert.java
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/table/TableAssert.java
index bce6074bc1e..af2d09f8f4b 100644
---
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/table/TableAssert.java
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/segment/table/TableAssert.java
@@ -17,6 +17,7 @@
package
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.table;
+import com.google.common.base.Strings;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.JoinTableSegment;
@@ -112,6 +113,7 @@ public final class TableAssert {
assertIs(assertContext, actual.getLeft(), expected.getLeft());
assertIs(assertContext, actual.getRight(), expected.getRight());
ExpressionAssert.assertExpression(assertContext,
actual.getCondition(), expected.getOnCondition());
+ assertJoinType(assertContext, actual.getJoinType(),
expected.getJoinType());
assertThat(assertContext.getText("Column size assertion error: "),
actual.getUsing().size(), is(expected.getUsingColumns().size()));
int count = 0;
for (ExpectedColumn each : expected.getUsingColumns()) {
@@ -150,4 +152,12 @@ public final class TableAssert {
assertIs(assertContext, actualTables.get(i),
expectedTables.get(i));
}
}
+
+ private static void assertJoinType(final SQLCaseAssertContext
assertContext, final String actual, final String expected) {
+ if (Strings.isNullOrEmpty(expected)) {
+ assertTrue(assertContext.getText("Actual join-type should not
exist."), Strings.isNullOrEmpty(actual));
+ } else {
+ assertThat(assertContext.getText("Actual join-type should
exist."), actual, is(expected));
+ }
+ }
}
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/table/ExpectedJoinTable.java
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/table/ExpectedJoinTable.java
index 0aca3ad74a9..1f9cb0db067 100644
---
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/table/ExpectedJoinTable.java
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/segment/impl/table/ExpectedJoinTable.java
@@ -23,6 +23,7 @@ import
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain
import
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.column.ExpectedColumn;
import
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.expr.ExpectedExpression;
+import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import java.util.LinkedList;
import java.util.List;
@@ -45,4 +46,7 @@ public final class ExpectedJoinTable extends
AbstractExpectedDelimiterSQLSegment
@XmlElement(name = "using-columns")
private final List<ExpectedColumn> usingColumns = new LinkedList<>();
+
+ @XmlAttribute(name = "join-type")
+ private String joinType;
}
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dal/explain.xml
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dal/explain.xml
index bfdaec254f0..8f26c0d300e 100644
---
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dal/explain.xml
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dal/explain.xml
@@ -91,7 +91,7 @@
<describe sql-case-id="explain_select_with_binding_tables">
<select>
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table name="t_order" alias="o"
start-index="24" stop-index="32" />
</left>
@@ -160,7 +160,7 @@
<table name="t_order_new" start-index="28" stop-index="38" />
<select>
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table name="t_order_item" alias="i"
start-index="127" stop-index="140" />
</left>
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/ddl/create-table.xml
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/ddl/create-table.xml
index d0b1763a3d2..af214f32b52 100644
---
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/ddl/create-table.xml
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/ddl/create-table.xml
@@ -1633,7 +1633,7 @@
</table>
<select>
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table name="t_order" alias="o"
start-index="111" stop-index="119" />
</left>
@@ -1669,7 +1669,7 @@
<table name="t_order_new" start-index="20" stop-index="30" />
<select>
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table name="t_order_item" alias="i"
start-index="119" stop-index="132" />
</left>
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select-aggregate.xml
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select-aggregate.xml
index ae9bcbb865f..a41434c91d0 100644
---
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select-aggregate.xml
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select-aggregate.xml
@@ -141,7 +141,7 @@
<select sql-case-id="select_count_with_binding_tables_without_join"
parameters="1, 2, 9, 10">
<from>
- <join-table>
+ <join-table join-type="COMMA">
<left>
<simple-table name="t_order" alias="o" start-index="36"
stop-index="44" />
</left>
@@ -244,7 +244,7 @@
<select sql-case-id="select_count_with_binding_tables_with_join"
parameters="1, 2, 9, 10">
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table name="t_order" alias="o" start-index="36"
stop-index="44" />
</left>
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select-expression.xml
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select-expression.xml
index 27bac97a726..7f746d69cb2 100644
---
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select-expression.xml
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select-expression.xml
@@ -132,7 +132,7 @@
<expression-projection text="case when t.status = 'init' then
'已启用' when t.status = 'failed' then '已停用' end" start-index="33"
stop-index="124" alias="stateName"/>
</projections>
<from>
- <join-table>
+ <join-table join-type="LEFT">
<left>
<simple-table start-index="135" stop-index="143"
name="t_order" alias="t"/>
</left>
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select-group-by.xml
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select-group-by.xml
index 1c6fb4a0184..9e8125f75db 100644
---
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select-group-by.xml
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select-group-by.xml
@@ -115,7 +115,7 @@
<select sql-case-id="select_group_by_without_grouped_column"
parameters="1, 2, 9, 10">
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table name="t_order" alias="o" start-index="36"
stop-index="44" />
</left>
@@ -430,7 +430,7 @@
<select sql-case-id="select_group_by_cube">
<from>
- <join-table>
+ <join-table join-type="COMMA">
<left>
<simple-table name="employees" alias="e" start-index="218"
stop-index="228" />
</left>
@@ -474,13 +474,13 @@
<select sql-case-id="select_group_by_grouping_sets">
<from>
- <join-table>
+ <join-table join-type="COMMA">
<left>
- <join-table>
+ <join-table join-type="COMMA">
<left>
- <join-table>
+ <join-table join-type="COMMA">
<left>
- <join-table>
+ <join-table join-type="COMMA">
<left>
<simple-table name="sales"
start-index="113" stop-index="117" />
</left>
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select-join.xml
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select-join.xml
index 8093582cc9c..983b725a627 100644
---
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select-join.xml
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select-join.xml
@@ -19,7 +19,7 @@
<sql-parser-test-cases>
<select sql-case-id="select_inner_join_related_with_alias"
parameters="1000">
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table name="t_order" alias="o" start-index="16"
stop-index="24" />
</left>
@@ -68,7 +68,7 @@
<select sql-case-id="select_inner_join_related_with_name"
parameters="1000">
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table name="t_order" start-index="27"
stop-index="33" />
</left>
@@ -117,7 +117,7 @@
<select sql-case-id="select_join_using" parameters="1000">
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table name="t_order" alias="o" start-index="16"
stop-index="24" />
</left>
@@ -152,7 +152,7 @@
<select sql-case-id="select_left_outer_join_related_with_alias">
<from>
- <join-table>
+ <join-table join-type="LEFT">
<left>
<simple-table name="departments" alias="d"
start-index="41" stop-index="53" />
</left>
@@ -196,7 +196,7 @@
<select sql-case-id="select_right_outer_join_related_with_alias">
<from>
- <join-table>
+ <join-table join-type="RIGHT">
<left>
<simple-table name="departments" alias="d"
start-index="41" stop-index="53" />
</left>
@@ -240,7 +240,7 @@
<select sql-case-id="select_full_outer_join_related_with_alias">
<from>
- <join-table>
+ <join-table join-type="FULL">
<left>
<simple-table name="departments" alias="d"
start-index="84" stop-index="96" />
</left>
@@ -287,7 +287,7 @@
<select sql-case-id="select_full_outer_join_using_related_with_alias">
<from>
- <join-table>
+ <join-table join-type="FULL">
<left>
<simple-table name="departments" alias="d"
start-index="54" stop-index="66" />
</left>
@@ -313,7 +313,7 @@
<select sql-case-id="select_cross_apply_join_related_with_alias">
<from>
- <join-table>
+ <join-table join-type="CROSS">
<left>
<simple-table name="departments" alias="d"
start-index="58" stop-index="70" />
</left>
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select-lock.xml
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select-lock.xml
index b2d3450a86e..25f0dc4181d 100644
---
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select-lock.xml
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select-lock.xml
@@ -175,7 +175,7 @@
</expr>
</where>
<from start-index="14" stop-index="34">
- <join-table start-index="14" stop-index="34">
+ <join-table start-index="14" stop-index="34" join-type="COMMA">
<left start-index="14" stop-index="20">
<simple-table name="t_order" start-index="14"
stop-index="20"/>
</left>
@@ -251,9 +251,9 @@
</expr>
</where>
<from start-index="14" stop-index="42">
- <join-table start-index="14" stop-index="42">
+ <join-table start-index="14" stop-index="42" join-type="COMMA">
<left start-index="14" stop-index="34">
- <join-table start-index="14" stop-index="34">
+ <join-table start-index="14" stop-index="34"
join-type="COMMA">
<left start-index="14" stop-index="20">
<simple-table name="t_order" start-index="14"
stop-index="20"/>
</left>
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select-or.xml
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select-or.xml
index 6df1b71e6df..8c0d0f50535 100644
---
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select-or.xml
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select-or.xml
@@ -287,7 +287,7 @@
<select sql-case-id="select_or_mix_and_with_binding_tables" parameters="1,
2, 3">
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table name="t_order" alias="o" start-index="16"
stop-index="24" />
</left>
@@ -394,9 +394,9 @@
<select sql-case-id="select_or_mix_and_with_binding_and_broadcast_tables"
parameters="1, 2, 3, 'init'">
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table name="t_order" alias="o"
start-index="16" stop-index="24" />
</left>
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select-order-by.xml
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select-order-by.xml
index e856f9355f3..c21a6b28eb1 100644
---
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select-order-by.xml
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select-order-by.xml
@@ -34,7 +34,7 @@
<select sql-case-id="select_order_by_desc_and_index_asc">
<from>
- <join-table>
+ <join-table join-type="COMMA">
<left>
<simple-table name="t_order" alias="o" start-index="16"
stop-index="24" />
</left>
@@ -109,7 +109,7 @@
<select sql-case-id="select_order_by_with_date">
<from>
- <join-table>
+ <join-table join-type="COMMA">
<left>
<simple-table name="t_order" alias="o" start-index="16"
stop-index="24" />
</left>
@@ -320,7 +320,7 @@
<select sql-case-id="select_order_by_with_table_star_without_table_name">
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table name="t_order" alias="o" start-index="21"
stop-index="29" />
</left>
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select-pagination-group-by-order-by.xml
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select-pagination-group-by-order-by.xml
index e55844e1d17..17018fea7a0 100644
---
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select-pagination-group-by-order-by.xml
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select-pagination-group-by-order-by.xml
@@ -18,7 +18,7 @@
<sql-parser-test-cases>
<select sql-case-id="select_pagination_with_group_by_and_order_by"
parameters="1, 2, 9, 10, 5, 3">
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table name="t_order" alias="o" start-index="22"
stop-index="30"/>
</left>
@@ -132,7 +132,7 @@
<select sql-case-id="select_pagination_with_diff_group_by_and_order_by"
parameters="1, 2, 9, 10, 5, 3">
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table name="t_order" alias="o" start-index="22"
stop-index="30"/>
</left>
@@ -270,7 +270,7 @@
</column-projection>
</projections>
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table start-index="165"
stop-index="173" name="t_order" alias="o"/>
</left>
@@ -414,7 +414,7 @@
</column-projection>
</projections>
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table start-index="183"
stop-index="191" name="t_order" alias="o"/>
</left>
@@ -558,7 +558,7 @@
</column-projection>
</projections>
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table start-index="167"
stop-index="175" name="t_order" alias="o"/>
</left>
@@ -702,7 +702,7 @@
</column-projection>
</projections>
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table start-index="185"
stop-index="193" name="t_order" alias="o"/>
</left>
@@ -846,7 +846,7 @@
</column-projection>
</projections>
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table start-index="165"
stop-index="173" name="t_order" alias="o"/>
</left>
@@ -990,7 +990,7 @@
</column-projection>
</projections>
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table start-index="183"
stop-index="191" name="t_order" alias="o"/>
</left>
@@ -1134,7 +1134,7 @@
</column-projection>
</projections>
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table start-index="167"
stop-index="175" name="t_order" alias="o"/>
</left>
@@ -1278,7 +1278,7 @@
</column-projection>
</projections>
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table start-index="185"
stop-index="193" name="t_order" alias="o"/>
</left>
@@ -1426,7 +1426,7 @@
</column-projection>
</projections>
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table
start-index="146" stop-index="160" name="t_order" alias="order0_"/>
</left>
@@ -1597,7 +1597,7 @@
</column-projection>
</projections>
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table
start-index="146" stop-index="160" name="t_order" alias="order0_"/>
</left>
@@ -1768,7 +1768,7 @@
</column-projection>
</projections>
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table
start-index="146" stop-index="160" name="t_order" alias="order0_"/>
</left>
@@ -1939,7 +1939,7 @@
</column-projection>
</projections>
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table
start-index="146" stop-index="160" name="t_order" alias="order0_"/>
</left>
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select-pagination.xml
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select-pagination.xml
index ac46c65b0a4..e65cd79f24e 100644
---
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select-pagination.xml
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select-pagination.xml
@@ -19,7 +19,7 @@
<sql-parser-test-cases>
<select sql-case-id="select_pagination_with_offset" parameters="1, 2, 9,
10, 5">
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table name="t_order" alias="o" start-index="16"
stop-index="24" />
</left>
@@ -128,7 +128,7 @@
<select sql-case-id="select_pagination_with_row_count" parameters="1, 2,
9, 10, 5">
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table name="t_order" alias="o" start-index="16"
stop-index="24" />
</left>
@@ -237,7 +237,7 @@
<select sql-case-id="select_pagination_with_limit_with_back_quotes"
parameters="1, 2, 9, 10, 5, 3">
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table name="t_order" alias="o" start-delimiter="`"
end-delimiter="`" start-index="16" stop-index="26" />
</left>
@@ -346,7 +346,7 @@
<select sql-case-id="select_pagination_with_limit_and_offset_keyword"
parameters="1, 2, 9, 10, 3, 5">
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table name="t_order" alias="o" start-delimiter="`"
end-delimiter="`" start-index="16" stop-index="26" />
</left>
@@ -479,7 +479,7 @@
</column-projection>
</projections>
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table start-index="167"
stop-index="175" name="t_order" alias="o" />
</left>
@@ -602,7 +602,7 @@
</column-projection>
</projections>
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table start-index="185"
stop-index="193" name="t_order" alias="o" />
</left>
@@ -701,7 +701,7 @@
<select sql-case-id="select_pagination_with_offset_and_limit"
parameters="1, 2, 9, 10, 5, 3">
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table name="t_order" alias="o" start-index="16"
stop-index="24" />
</left>
@@ -811,7 +811,7 @@
<select sql-case-id="select_pagination_with_offset_and_limit_all"
parameters="1, 2, 9, 10, 5">
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table name="t_order" alias="o" start-index="16"
stop-index="24" />
</left>
@@ -943,7 +943,7 @@
</column-projection>
</projections>
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table start-index="167"
stop-index="175" name="t_order" alias="o" />
</left>
@@ -1082,7 +1082,7 @@
</column-projection>
</projections>
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table start-index="185"
stop-index="193" name="t_order" alias="o" />
</left>
@@ -1221,7 +1221,7 @@
</column-projection>
</projections>
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table start-index="167"
stop-index="175" name="t_order" alias="o" />
</left>
@@ -1360,7 +1360,7 @@
</column-projection>
</projections>
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table start-index="185"
stop-index="193" name="t_order" alias="o" />
</left>
@@ -1503,7 +1503,7 @@
</column-projection>
</projections>
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table
start-index="146" stop-index="160" name="t_order" alias="order0_" />
</left>
@@ -1653,7 +1653,7 @@
</column-projection>
</projections>
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table
start-index="146" stop-index="160" name="t_order" alias="order0_" />
</left>
@@ -1819,7 +1819,7 @@
</column-projection>
</projections>
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table
start-index="146" stop-index="160" name="t_order" alias="order0_" />
</left>
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select-sub-query.xml
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select-sub-query.xml
index 3788c1a9580..7e4c2988bc4 100644
---
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select-sub-query.xml
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select-sub-query.xml
@@ -252,7 +252,7 @@
</column-projection>
</projections>
<from start-index="70" stop-index="90">
- <join-table>
+ <join-table join-type="COMMA">
<left>
<simple-table name="t_order_federate" start-index="75"
stop-index="90" />
</left>
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select-with.xml
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select-with.xml
index d4fa6531cc7..7ad930fbba1 100644
---
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select-with.xml
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select-with.xml
@@ -66,7 +66,7 @@
<subquery-expression start-index="20" stop-index="162">
<select>
<from>
- <join-table>
+ <join-table join-type="COMMA">
<left>
<simple-table name="employees" alias="e"
start-index="72" stop-index="82" />
</left>
@@ -344,7 +344,7 @@
</common-table-expression>
</with>
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table name="cte1" start-index="158"
stop-index="161" />
</left>
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select.xml
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select.xml
index e1837c0ab0e..4d871be1e30 100644
---
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select.xml
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select.xml
@@ -1084,7 +1084,7 @@
<select sql-case-id="select_sharding_route_with_binding_tables"
parameters="1, 2, 9, 10">
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table name="t_order" alias="o" start-index="16"
stop-index="24" />
</left>
@@ -1189,7 +1189,7 @@
<select sql-case-id="select_full_route_with_binding_tables">
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table name="t_order" alias="o" start-index="16"
stop-index="24" />
</left>
@@ -1247,9 +1247,9 @@
<select sql-case-id="select_sharding_route_with_broadcast_table"
parameters="1, 2, 9, 10, 'init'">
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table name="t_order" alias="o"
start-index="16" stop-index="24" />
</left>
@@ -1393,9 +1393,9 @@
<select sql-case-id="select_keyword_table_name_with_back_quotes"
parameters="1, 2, 9, 10, 'init'">
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table name="t_order" alias="o"
start-index="16" stop-index="24" />
</left>
@@ -1539,9 +1539,9 @@
<select sql-case-id="select_keyword_table_name_with_double_quotes"
parameters="1, 2, 9, 10, 'init'">
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table name="t_order" alias="o"
start-index="16" stop-index="24" />
</left>
@@ -1685,9 +1685,9 @@
<select sql-case-id="select_keyword_table_name_with_square_brackets"
parameters="1, 2, 9, 10, 'init'">
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table name="t_order" alias="o"
start-index="16" stop-index="24" />
</left>
@@ -1858,7 +1858,7 @@
<select sql-case-id="select_with_force_index_join" parameters="1000">
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table name="t_order" alias="o" start-index="16"
stop-index="24" />
</left>
@@ -2265,7 +2265,7 @@
<select sql-case-id="select_distinct_with_owner_star_without_order_by" >
<from>
- <join-table>
+ <join-table join-type="COMMA">
<left>
<simple-table name="t_order" start-index="54"
stop-index="60" />
</left>
@@ -2384,7 +2384,7 @@
<select sql-case-id="select_distinct_with_owner_star">
<from>
- <join-table>
+ <join-table join-type="COMMA">
<left>
<simple-table name="t_order" start-index="54"
stop-index="60" />
</left>
@@ -3466,7 +3466,7 @@
<select
sql-case-id="select_with_binding_tables_with_subquery_without_join">
<from>
- <join-table>
+ <join-table join-type="COMMA">
<left>
<subquery-table alias="a">
<subquery>
@@ -3548,7 +3548,7 @@
<select sql-case-id="select_with_binding_tables_without_join">
<from>
- <join-table>
+ <join-table join-type="COMMA">
<left>
<simple-table name="employees" start-index="74"
stop-index="82" />
</left>
@@ -3590,7 +3590,7 @@
<select sql-case-id="select_with_lateral_clause">
<from>
- <join-table>
+ <join-table join-type="COMMA">
<left>
<simple-table name="employees" alias="e" start-index="14"
stop-index="24" />
</left>
@@ -4282,7 +4282,7 @@
<select sql-case-id="select_with_for_xml_clause">
<from>
- <join-table>
+ <join-table join-type="INNER">
<left>
<simple-table name="t_order" alias="o" start-index="44"
stop-index="52" />
</left>