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 <[email protected]>
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));
}