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

zhangliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new 715b86ecdff Fix master branch ci exception caused by sql parser 
(#20224)
715b86ecdff is described below

commit 715b86ecdff0e0090e1454b5273b8c63360373a0
Author: Zhengqiang Duan <duanzhengqi...@apache.org>
AuthorDate: Wed Aug 17 08:48:22 2022 +0800

    Fix master branch ci exception caused by sql parser (#20224)
    
    * Fix master branch ci exception caused by sql parser
    
    * update grammar rule
---
 .../parser/DatabaseDiscoveryDistSQLTest.java       |  8 +++---
 .../segment/from/impl/JoinTableConverter.java      | 30 ++++++++++++++++++++--
 .../datasource/AbstractDataSourcePreparer.java     |  2 +-
 .../main/antlr4/imports/opengauss/DMLStatement.g4  |  2 +-
 .../main/antlr4/imports/postgresql/DMLStatement.g4 |  2 +-
 5 files changed, 35 insertions(+), 9 deletions(-)

diff --git 
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-parser/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/DatabaseDiscoveryDistSQLTest.java
 
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-parser/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/DatabaseDiscoveryDistSQLTest.java
index 8294028b3b3..75057e6aad3 100644
--- 
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-parser/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/DatabaseDiscoveryDistSQLTest.java
+++ 
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-parser/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/DatabaseDiscoveryDistSQLTest.java
@@ -63,7 +63,7 @@ public class DatabaseDiscoveryDistSQLTest {
         assertThat(distSQLStatement.getRules().size(), is(1));
         assertDiscoverySegment((DatabaseDiscoveryDefinitionSegment) 
distSQLStatement.getRules().iterator().next());
     }
-
+    
     @Test
     public void assertCreateDatabaseDiscoveryType() {
         String sql = "CREATE DB_DISCOVERY TYPE 
primary_replica_ds_mgr(TYPE(NAME='mgr',PROPERTIES('group-name'='92504d5b'))),primary_replica_ds_mgr_2(TYPE(NAME='mgr'))";
@@ -71,7 +71,7 @@ public class DatabaseDiscoveryDistSQLTest {
         assertThat(distSQLStatement.getProviders().size(), is(2));
         assertAlgorithmSegment(distSQLStatement.getProviders().iterator());
     }
-
+    
     @Test
     public void assertAlterDatabaseDiscoveryType() {
         String sql = "ALTER DB_DISCOVERY TYPE 
primary_replica_ds_mgr(TYPE(NAME='mgr',PROPERTIES('group-name'='92504d5b'))),primary_replica_ds_mgr_2(TYPE(NAME='mgr'))";
@@ -79,7 +79,7 @@ public class DatabaseDiscoveryDistSQLTest {
         assertThat(distSQLStatement.getProviders().size(), is(2));
         assertAlgorithmSegment(distSQLStatement.getProviders().iterator());
     }
-
+    
     private void assertDiscoverySegment(final 
DatabaseDiscoveryDefinitionSegment discoverySegment) {
         assertThat(discoverySegment.getName(), is("db_discovery_group_0"));
         assertThat(discoverySegment.getDataSources(), is(Arrays.asList("ds_0", 
"ds_1")));
@@ -91,7 +91,7 @@ public class DatabaseDiscoveryDistSQLTest {
         heartbeatProps.setProperty("keep-alive-cron", "0/5 * * * * ?");
         assertThat(discoverySegment.getDiscoveryHeartbeat(), 
is(heartbeatProps));
     }
-
+    
     private void assertAlgorithmSegment(final 
Iterator<DatabaseDiscoveryProviderAlgorithmSegment> iterator) {
         DatabaseDiscoveryProviderAlgorithmSegment providerAlgorithmSegment = 
iterator.next();
         Properties properties = new Properties();
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 6c71dc90748..89e81cbdfc5 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,6 +35,14 @@ 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);
@@ -42,7 +50,25 @@ public final class JoinTableConverter implements 
SQLSegmentConverter<JoinTableSe
         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), 
JoinType.valueOf(segment.getJoinType()).symbol(SqlParserPos.ZERO), right, 
conditionType,
-                        condition.orElse(null)));
+                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);
     }
 }
diff --git 
a/shardingsphere-kernel/shardingsphere-data-pipeline/shardingsphere-data-pipeline-core/src/main/java/org/apache/shardingsphere/data/pipeline/core/prepare/datasource/AbstractDataSourcePreparer.java
 
b/shardingsphere-kernel/shardingsphere-data-pipeline/shardingsphere-data-pipeline-core/src/main/java/org/apache/shardingsphere/data/pipeline/core/prepare/datasource/AbstractDataSourcePreparer.java
index 8fe4bd03984..15cf5495073 100644
--- 
a/shardingsphere-kernel/shardingsphere-data-pipeline/shardingsphere-data-pipeline-core/src/main/java/org/apache/shardingsphere/data/pipeline/core/prepare/datasource/AbstractDataSourcePreparer.java
+++ 
b/shardingsphere-kernel/shardingsphere-data-pipeline/shardingsphere-data-pipeline-core/src/main/java/org/apache/shardingsphere/data/pipeline/core/prepare/datasource/AbstractDataSourcePreparer.java
@@ -115,7 +115,7 @@ public abstract class AbstractDataSourcePreparer implements 
DataSourcePreparer {
         }
         return 
PATTERN_CREATE_TABLE.matcher(createTableSQL).replaceFirst("CREATE TABLE IF NOT 
EXISTS ");
     }
-
+    
     protected String getActualTable(final ShardingSphereDatabase database, 
final String tableName) {
         DataNodes dataNodes = new 
DataNodes(database.getRuleMetaData().getRules());
         Optional<DataNode> filteredDataNode = 
dataNodes.getDataNodes(tableName).stream()
diff --git 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-opengauss/src/main/antlr4/imports/opengauss/DMLStatement.g4
 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-opengauss/src/main/antlr4/imports/opengauss/DMLStatement.g4
index a53968ecdd6..68978ff8848 100644
--- 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-opengauss/src/main/antlr4/imports/opengauss/DMLStatement.g4
+++ 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-opengauss/src/main/antlr4/imports/opengauss/DMLStatement.g4
@@ -387,7 +387,7 @@ tableReference
 joinedTable
     : crossJoinType tableReference
     | innerJoinType tableReference joinQual
-    | outerJoinType tableReference
+    | outerJoinType tableReference joinQual
     | naturalJoinType tableReference
     ;
 
diff --git 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/antlr4/imports/postgresql/DMLStatement.g4
 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/antlr4/imports/postgresql/DMLStatement.g4
index 8a458c2cebd..490e74fb51c 100644
--- 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/antlr4/imports/postgresql/DMLStatement.g4
+++ 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/antlr4/imports/postgresql/DMLStatement.g4
@@ -390,7 +390,7 @@ tableReference
 joinedTable
     : crossJoinType tableReference
     | innerJoinType tableReference joinQual
-    | outerJoinType tableReference
+    | outerJoinType tableReference joinQual
     | naturalJoinType tableReference
     ;
 

Reply via email to