You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by pa...@apache.org on 2020/10/30 06:23:55 UTC
[shardingsphere] branch master updated: fix some sql parse
exception and ddl, dcl route logic (#7949)
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 e549d5d fix some sql parse exception and ddl, dcl route logic (#7949)
e549d5d is described below
commit e549d5d4c81222f6c91458d38e6c96ffdad095ee
Author: DuanZhengqiang <st...@gmail.com>
AuthorDate: Fri Oct 30 14:23:26 2020 +0800
fix some sql parse exception and ddl, dcl route logic (#7949)
* fix some sql parse exception and ddl, dcl route logic
* add sharding route engine test
* fix UnknownFormatConversionException when sql include % sign
* fix set statement parse error
* add a constructor to solve UnknownFormatConversionException
* support password function in set password statement
---
.../engine/type/ShardingRouteEngineFactory.java | 27 +++----
.../type/ShardingRouteEngineFactoryTest.java | 91 ++++++++++++----------
.../src/main/antlr4/imports/mysql/BaseRule.g4 | 4 +-
.../src/main/antlr4/imports/mysql/DCLStatement.g4 | 2 +-
.../src/main/antlr4/imports/mysql/RLStatement.g4 | 8 +-
.../sql/parser/exception/SQLParsingException.java | 4 +
6 files changed, 75 insertions(+), 61 deletions(-)
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/main/java/org/apache/shardingsphere/sharding/route/engine/type/ShardingRouteEngineFactory.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/main/java/org/apache/shardingsphere/sharding/route/engine/type/ShardingRouteEngineFactory.java
index d11afc8..ac6d65a 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/main/java/org/apache/shardingsphere/sharding/route/engine/type/ShardingRouteEngineFactory.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/main/java/org/apache/shardingsphere/sharding/route/engine/type/ShardingRouteEngineFactory.java
@@ -41,17 +41,11 @@ import org.apache.shardingsphere.sql.parser.sql.common.statement.dal.SetStatemen
import org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.DCLStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterFunctionStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterProcedureStatement;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterTableStatement;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterViewStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateFunctionStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateProcedureStatement;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateTableStatement;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateViewStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DDLStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DropFunctionStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DropProcedureStatement;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DropTableStatement;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DropViewStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.dml.DMLStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.tcl.TCLStatement;
@@ -92,7 +86,7 @@ public final class ShardingRouteEngineFactory {
return getDALRoutingEngine(shardingRule, metaData.getSchemaMetaData().getUnconfiguredSchemaMetaDataMap(), sqlStatement, tableNames);
}
if (sqlStatement instanceof DCLStatement) {
- return getDCLRoutingEngine(sqlStatementContext, metaData);
+ return getDCLRoutingEngine(shardingRule, metaData.getSchemaMetaData().getUnconfiguredSchemaMetaDataMap(), sqlStatementContext, metaData);
}
if (shardingRule.isAllBroadcastTables(tableNames)) {
return sqlStatement instanceof SelectStatement ? new ShardingUnicastRoutingEngine(tableNames) : new ShardingDatabaseBroadcastRoutingEngine();
@@ -113,11 +107,8 @@ public final class ShardingRouteEngineFactory {
if (functionStatement || procedureStatement) {
return new ShardingDatabaseBroadcastRoutingEngine();
}
- boolean viewStatement = sqlStatement instanceof CreateViewStatement || sqlStatement instanceof AlterViewStatement || sqlStatement instanceof DropViewStatement;
- boolean tableStatement = sqlStatement instanceof CreateTableStatement || sqlStatement instanceof AlterTableStatement || sqlStatement instanceof DropTableStatement;
Collection<String> tableNames = sqlStatementContext.getTablesContext().getTableNames();
- boolean modifyTableWithoutShardingRule = tableStatement && !tableNames.isEmpty() && !shardingRule.tableRuleExists(tableNames);
- if (viewStatement || modifyTableWithoutShardingRule) {
+ if (!tableNames.isEmpty() && !shardingRule.tableRuleExists(tableNames)) {
return new ShardingUnconfiguredTablesRoutingEngine(tableNames, schemaMetaData.getUnconfiguredSchemaMetaDataMap(), sqlStatement);
}
return new ShardingTableBroadcastRoutingEngine(schemaMetaData.getConfiguredSchemaMetaData(), sqlStatementContext);
@@ -140,10 +131,16 @@ public final class ShardingRouteEngineFactory {
return new ShardingDataSourceGroupBroadcastRoutingEngine();
}
- private static ShardingRouteEngine getDCLRoutingEngine(final SQLStatementContext sqlStatementContext, final ShardingSphereMetaData metaData) {
- return isDCLForSingleTable(sqlStatementContext)
- ? new ShardingTableBroadcastRoutingEngine(metaData.getSchemaMetaData().getConfiguredSchemaMetaData(), sqlStatementContext)
- : new ShardingInstanceBroadcastRoutingEngine(metaData.getDataSourcesMetaData());
+ private static ShardingRouteEngine getDCLRoutingEngine(final ShardingRule shardingRule, final Map<String, Collection<String>> unconfiguredSchemaMetaDataMap,
+ final SQLStatementContext sqlStatementContext, final ShardingSphereMetaData metaData) {
+ if (isDCLForSingleTable(sqlStatementContext)) {
+ Collection<String> tableNames = sqlStatementContext.getTablesContext().getTableNames();
+ return !shardingRule.tableRuleExists(tableNames)
+ ? new ShardingUnconfiguredTablesRoutingEngine(tableNames, unconfiguredSchemaMetaDataMap, sqlStatementContext.getSqlStatement())
+ : new ShardingTableBroadcastRoutingEngine(metaData.getSchemaMetaData().getConfiguredSchemaMetaData(), sqlStatementContext);
+ } else {
+ return new ShardingInstanceBroadcastRoutingEngine(metaData.getDataSourcesMetaData());
+ }
}
private static boolean isDCLForSingleTable(final SQLStatementContext sqlStatementContext) {
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/ShardingRouteEngineFactoryTest.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/ShardingRouteEngineFactoryTest.java
index 4560b4a..8536508 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/ShardingRouteEngineFactoryTest.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/ShardingRouteEngineFactoryTest.java
@@ -17,6 +17,9 @@
package org.apache.shardingsphere.sharding.route.engine.type;
+import org.apache.shardingsphere.infra.binder.segment.table.TablesContext;
+import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
+import org.apache.shardingsphere.infra.binder.statement.dcl.GrantStatementContext;
import org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
import org.apache.shardingsphere.infra.metadata.model.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.metadata.model.logic.LogicSchemaMetaData;
@@ -30,16 +33,13 @@ import org.apache.shardingsphere.sharding.route.engine.type.standard.ShardingSta
import org.apache.shardingsphere.sharding.route.engine.type.unconfigured.ShardingUnconfiguredTablesRoutingEngine;
import org.apache.shardingsphere.sharding.route.engine.type.unicast.ShardingUnicastRoutingEngine;
import org.apache.shardingsphere.sharding.rule.ShardingRule;
-import org.apache.shardingsphere.infra.binder.segment.table.TablesContext;
-import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
-import org.apache.shardingsphere.infra.binder.statement.dcl.GrantStatementContext;
import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.dal.DALStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.DCLStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.GrantStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DDLStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.dml.InsertStatement;
-import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dml.MySQLSelectStatement;
import org.apache.shardingsphere.sql.parser.sql.common.statement.tcl.TCLStatement;
import org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLSetStatement;
@@ -47,6 +47,7 @@ import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQ
import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowCreateTableStatement;
import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowDatabasesStatement;
import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dcl.MySQLGrantStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dml.MySQLSelectStatement;
import org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.dcl.OracleGrantStatement;
import org.apache.shardingsphere.sql.parser.sql.dialect.statement.postgresql.dal.PostgreSQLSetStatement;
import org.apache.shardingsphere.sql.parser.sql.dialect.statement.postgresql.dcl.PostgreSQLGrantStatement;
@@ -60,6 +61,7 @@ import org.mockito.junit.MockitoJUnitRunner;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.Properties;
import static org.hamcrest.CoreMatchers.instanceOf;
@@ -106,13 +108,24 @@ public final class ShardingRouteEngineFactoryTest {
}
@Test
- public void assertNewInstanceForDDL() {
+ public void assertNewInstanceForDDLWithShardingRule() {
when(sqlStatementContext.getSqlStatement()).thenReturn(mock(DDLStatement.class));
+ when(sqlStatementContext.getTablesContext().getTableNames()).thenReturn(Collections.singletonList("tbl"));
+ when(shardingRule.tableRuleExists(sqlStatementContext.getTablesContext().getTableNames())).thenReturn(true);
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, shardingSphereMetaData, sqlStatementContext, shardingConditions, props);
assertThat(actual, instanceOf(ShardingTableBroadcastRoutingEngine.class));
}
@Test
+ public void assertNewInstanceForDDLWithoutShardingRule() {
+ when(sqlStatementContext.getSqlStatement()).thenReturn(mock(DDLStatement.class));
+ when(sqlStatementContext.getTablesContext().getTableNames()).thenReturn(Collections.singletonList("tbl"));
+ when(shardingRule.tableRuleExists(sqlStatementContext.getTablesContext().getTableNames())).thenReturn(false);
+ ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, shardingSphereMetaData, sqlStatementContext, shardingConditions, props);
+ assertThat(actual, instanceOf(ShardingUnconfiguredTablesRoutingEngine.class));
+ }
+
+ @Test
public void assertNewInstanceForDALWithTables() {
tableNames.add("tbl");
when(shardingRule.tableRuleExists(tableNames)).thenReturn(true);
@@ -139,60 +152,60 @@ public final class ShardingRouteEngineFactoryTest {
}
@Test
- public void assertNewInstanceForMySQLDALSet() {
- DALStatement dalStatement = mock(MySQLSetStatement.class);
- when(sqlStatementContext.getSqlStatement()).thenReturn(dalStatement);
- ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, shardingSphereMetaData, sqlStatementContext, shardingConditions, props);
- assertThat(actual, instanceOf(ShardingDatabaseBroadcastRoutingEngine.class));
+ public void assertNewInstanceForDALSetForMySQL() {
+ assertNewInstanceForDALSet(mock(MySQLSetStatement.class));
}
@Test
- public void assertNewInstanceForPostgreSQLDALSet() {
- DALStatement dalStatement = mock(PostgreSQLSetStatement.class);
+ public void assertNewInstanceForDALSetForPostgreSQL() {
+ assertNewInstanceForDALSet(mock(PostgreSQLSetStatement.class));
+ }
+
+ private void assertNewInstanceForDALSet(final DALStatement dalStatement) {
when(sqlStatementContext.getSqlStatement()).thenReturn(dalStatement);
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, shardingSphereMetaData, sqlStatementContext, shardingConditions, props);
assertThat(actual, instanceOf(ShardingDatabaseBroadcastRoutingEngine.class));
}
@Test
- public void assertNewInstanceForMySQLDCLForSingleTable() {
- MySQLGrantStatement grantStatement = new MySQLGrantStatement();
- grantStatement.getTables().add(new SimpleTableSegment(0, 0, new IdentifierValue("tbl")));
- GrantStatementContext sqlStatementContext = new GrantStatementContext(grantStatement);
- ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, shardingSphereMetaData, sqlStatementContext, shardingConditions, props);
- assertThat(actual, instanceOf(ShardingTableBroadcastRoutingEngine.class));
+ public void assertNewInstanceForDCLForSingleTableForMySQL() {
+ assertNewInstanceForDCLForSingleTableWithShardingRule(new MySQLGrantStatement());
+ assertNewInstanceForDCLForSingleTableWithoutShardingRule(new MySQLGrantStatement());
}
-
+
@Test
- public void assertNewInstanceForOracleDCLForSingleTable() {
- OracleGrantStatement grantStatement = new OracleGrantStatement();
- grantStatement.getTables().add(new SimpleTableSegment(0, 0, new IdentifierValue("tbl")));
- GrantStatementContext sqlStatementContext = new GrantStatementContext(grantStatement);
- ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, shardingSphereMetaData, sqlStatementContext, shardingConditions, props);
- assertThat(actual, instanceOf(ShardingTableBroadcastRoutingEngine.class));
+ public void assertNewInstanceForDCLForSingleTableForOracle() {
+ assertNewInstanceForDCLForSingleTableWithShardingRule(new OracleGrantStatement());
+ assertNewInstanceForDCLForSingleTableWithoutShardingRule(new OracleGrantStatement());
}
-
+
@Test
- public void assertNewInstanceForPostgreSQLDCLForSingleTable() {
- PostgreSQLGrantStatement grantStatement = new PostgreSQLGrantStatement();
- grantStatement.getTables().add(new SimpleTableSegment(0, 0, new IdentifierValue("tbl")));
- GrantStatementContext sqlStatementContext = new GrantStatementContext(grantStatement);
- ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, shardingSphereMetaData, sqlStatementContext, shardingConditions, props);
- assertThat(actual, instanceOf(ShardingTableBroadcastRoutingEngine.class));
+ public void assertNewInstanceForDCLForSingleTableForPostgreSQL() {
+ assertNewInstanceForDCLForSingleTableWithShardingRule(new PostgreSQLGrantStatement());
+ assertNewInstanceForDCLForSingleTableWithoutShardingRule(new PostgreSQLGrantStatement());
}
-
+
+ @Test
+ public void assertNewInstanceForDCLForSingleTableForSQLServer() {
+ assertNewInstanceForDCLForSingleTableWithShardingRule(new SQLServerGrantStatement());
+ assertNewInstanceForDCLForSingleTableWithoutShardingRule(new SQLServerGrantStatement());
+ }
+
@Test
- public void assertNewInstanceForSQLServerDCLForSingleTable() {
- SQLServerGrantStatement grantStatement = new SQLServerGrantStatement();
+ public void assertNewInstanceForDCLForSingleTableForSQL92() {
+ assertNewInstanceForDCLForSingleTableWithShardingRule(new SQL92GrantStatement());
+ assertNewInstanceForDCLForSingleTableWithoutShardingRule(new SQL92GrantStatement());
+ }
+
+ private void assertNewInstanceForDCLForSingleTableWithShardingRule(final GrantStatement grantStatement) {
grantStatement.getTables().add(new SimpleTableSegment(0, 0, new IdentifierValue("tbl")));
GrantStatementContext sqlStatementContext = new GrantStatementContext(grantStatement);
+ when(shardingRule.tableRuleExists(sqlStatementContext.getTablesContext().getTableNames())).thenReturn(true);
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, shardingSphereMetaData, sqlStatementContext, shardingConditions, props);
assertThat(actual, instanceOf(ShardingTableBroadcastRoutingEngine.class));
}
-
- @Test
- public void assertNewInstanceForSQL92DCLForSingleTable() {
- SQL92GrantStatement grantStatement = new SQL92GrantStatement();
+
+ private void assertNewInstanceForDCLForSingleTableWithoutShardingRule(final GrantStatement grantStatement) {
grantStatement.getTables().add(new SimpleTableSegment(0, 0, new IdentifierValue("tbl")));
GrantStatementContext sqlStatementContext = new GrantStatementContext(grantStatement);
ShardingRouteEngine actual = ShardingRouteEngineFactory.newInstance(shardingRule, shardingSphereMetaData, sqlStatementContext, shardingConditions, props);
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/BaseRule.g4 b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/BaseRule.g4
index a76d4c6..dae7d43 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/BaseRule.g4
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/BaseRule.g4
@@ -86,7 +86,7 @@ nullValueLiterals
;
characterSetName
- : IDENTIFIER_
+ : IDENTIFIER_ | STRING_
;
collationName_
@@ -146,7 +146,7 @@ unreservedWord
| TIMESTAMPDIFF | TLS | TRANSACTION | TRIGGERS | TRUNCATE | TYPE | TYPES | UNBOUNDED | UNCOMMITTED | UNDEFINED
| UNDOFILE | UNDO_BUFFER_SIZE | UNICODE | UNINSTALL | UNKNOWN | UNTIL
| UPGRADE | USER | USER_RESOURCES | USE_FRM | VALIDATION | VALUE | VARIABLES | VCPU | VIEW | VISIBLE
- | WAIT | WARNINGS | WEEK | WEIGHT_STRING | WITHOUT | WORK | WRAPPER | X509 | XA | XID | XML | YEAR
+ | WAIT | WARNINGS | WEEK | WEIGHT_STRING | WITHOUT | WORK | WRAPPER | X509 | XA | XID | XML | YEAR | COLUMN_NAME
;
variable
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/DCLStatement.g4 b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/DCLStatement.g4
index 338ab73..d62442b 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/DCLStatement.g4
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/DCLStatement.g4
@@ -156,7 +156,7 @@ setPassword
;
authOption
- : EQ_ stringLiterals | TO RANDOM
+ : EQ_ stringLiterals | TO RANDOM | EQ_ PASSWORD LP_ stringLiterals RP_
;
withGrantOption
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/RLStatement.g4 b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/RLStatement.g4
index d200e9a..68ba12d 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/RLStatement.g4
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/antlr4/imports/mysql/RLStatement.g4
@@ -65,17 +65,17 @@ threadType
utilOption
: UNTIL ((SQL_BEFORE_GTIDS | SQL_AFTER_GTIDS) EQ_ identifier
- | MASTER_LOG_FILE EQ_ identifier COMMA_ MASTER_LOG_POS EQ_ identifier
- | RELAY_LOG_FILE EQ_ identifier COMMA_ RELAY_LOG_POS EQ_ identifier
+ | MASTER_LOG_FILE EQ_ STRING_ COMMA_ MASTER_LOG_POS EQ_ NUMBER_
+ | RELAY_LOG_FILE EQ_ STRING_ COMMA_ RELAY_LOG_POS EQ_ NUMBER_
| SQL_AFTER_MTS_GAPS)
;
connectionOptions
- : (USER EQ_ identifier)? (PASSWORD EQ_ identifier)? (DEFAULT_AUTH EQ_ identifier)? (PLUGIN_DIR EQ_ identifier)?
+ : (USER EQ_ STRING_)? (PASSWORD EQ_ STRING_)? (DEFAULT_AUTH EQ_ STRING_)? (PLUGIN_DIR EQ_ STRING_)?
;
channelOption
- : FOR CHANNEL identifier
+ : FOR CHANNEL STRING_
;
masterDefs
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/exception/SQLParsingException.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/exception/SQLParsingException.java
index a413eaf..c074c27 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/exception/SQLParsingException.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/exception/SQLParsingException.java
@@ -24,6 +24,10 @@ public final class SQLParsingException extends RuntimeException {
private static final long serialVersionUID = -6408790652103666096L;
+ public SQLParsingException(final String message) {
+ super(message);
+ }
+
public SQLParsingException(final String message, final Object... args) {
super(String.format(message, args));
}