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 ;