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>

Reply via email to