This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang 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 a4268dc Decouple SQLParserRule and shardingsphere-infra-parser module
(#16393)
a4268dc is described below
commit a4268dcd97603c91509141b573c30ba232adc6f7
Author: Liang Zhang <[email protected]>
AuthorDate: Sat Mar 26 15:59:14 2022 +0800
Decouple SQLParserRule and shardingsphere-infra-parser module (#16393)
* Refactor ParseASTNode
* Merge ParseContext and ParseASTNode
* Merge ParseContext and ParseASTNode
* Merge ParseContext and ParseASTNode
* Refactor AbstractSQLStatement
* For code format
* Decouple SQLParserRule and shardingsphere-infra-parser module
* Decouple SQLParserRule and shardingsphere-infra-parser module
* Add ParserConfiguration
---
.../autogen/AdvancedDistSQLStatementParser.java | 353 +++++++++++++++++++++
...ableAvailableAndSqlStatementContextFixture.java | 51 ---
.../ShadowDeleteStatementRoutingEngineTest.java | 29 +-
.../ShadowInsertStatementRoutingEngineTest.java | 10 +-
.../ShadowSelectStatementRoutingEngineTest.java | 6 +-
.../ShadowUpdateStatementRoutingEngineTest.java | 6 +-
.../ShadowNonDMLStatementRoutingEngineTest.java | 8 +-
.../engine/type/standard/AbstractSQLRouteTest.java | 6 +-
.../table/FilterableTableScanExecutor.java | 4 +-
.../pom.xml | 5 +
.../optimizer/ShardingSphereOptimizerTest.java | 33 +-
.../shardingsphere-infra-parser/pom.xml | 5 -
.../infra/parser/ParserConfiguration.java | 22 +-
.../parser/ShardingSphereSQLParserEngine.java | 6 +-
.../parser/cache/SQLStatementCacheBuilder.java | 13 +-
.../parser/cache/SQLStatementCacheLoader.java | 6 +-
.../infra/parser/sql/SQLStatementParserEngine.java | 8 +-
.../sql/SQLStatementParserEngineFactory.java | 11 +-
.../parser/sql/SQLStatementParserExecutor.java | 8 +-
.../parser/cache/SQLStatementCacheBuilderTest.java | 6 +-
.../parser/cache/SQLStatementCacheLoaderTest.java | 6 +-
.../statement/ShardingSpherePreparedStatement.java | 4 +-
.../core/statement/ShardingSphereStatement.java | 9 +-
.../shardingsphere-parser-core/pom.xml | 10 +-
.../shardingsphere/parser/rule/SQLParserRule.java | 10 +
.../text/TextProtocolBackendHandlerFactory.java | 4 +-
.../ral/advanced/ParseDistSQLBackendHandler.java | 5 +-
.../ral/advanced/PreviewDistSQLBackendHandler.java | 4 +-
.../information/SelectInformationExecutorTest.java | 9 +-
.../executor/SelectDatabaseExecutorTest.java | 11 +-
.../SchemaAssignedDatabaseBackendHandlerTest.java | 2 +-
.../advance/ParseDistSQLBackendHandlerTest.java | 2 +-
.../execute/MySQLComStmtExecuteExecutor.java | 4 +-
.../prepare/MySQLComStmtPrepareExecutor.java | 7 +-
.../fieldlist/MySQLComFieldListPacketExecutor.java | 4 +-
.../bind/OpenGaussComBatchBindExecutorTest.java | 7 +-
.../extended/parse/PostgreSQLComParseExecutor.java | 8 +-
...egatedBatchedStatementsCommandExecutorTest.java | 7 +-
.../PostgreSQLComDescribeExecutorTest.java | 7 +-
.../ReactiveMySQLComStmtExecuteExecutor.java | 6 +-
.../ReactiveMySQLComFieldListPacketExecutor.java | 4 +-
.../core/database/visitor/SQLVisitorFactory.java | 12 +-
.../core/database/visitor/SQLVisitorRule.java | 68 ++--
.../sql/common/statement/AbstractSQLStatement.java | 6 +-
.../AbstractSQLRewriterParameterizedTest.java | 3 +-
45 files changed, 571 insertions(+), 244 deletions(-)
diff --git
a/shardingsphere-distsql/shardingsphere-distsql-parser/target/generated-sources/antlr4/org/apache/shardingsphere/distsql/parser/autogen/AdvancedDistSQLStatementParser.java
b/shardingsphere-distsql/shardingsphere-distsql-parser/target/generated-sources/antlr4/org/apache/shardingsphere/distsql/parser/autogen/AdvancedDistSQLStatementParser.java
new file mode 100644
index 0000000..10bf9dc
--- /dev/null
+++
b/shardingsphere-distsql/shardingsphere-distsql-parser/target/generated-sources/antlr4/org/apache/shardingsphere/distsql/parser/autogen/AdvancedDistSQLStatementParser.java
@@ -0,0 +1,353 @@
+// Generated from
org/apache/shardingsphere/distsql/parser/autogen/AdvancedDistSQLStatement.g4 by
ANTLR 4.9.2
+package org.apache.shardingsphere.distsql.parser.autogen;
+import org.antlr.v4.runtime.atn.*;
+import org.antlr.v4.runtime.dfa.DFA;
+import org.antlr.v4.runtime.*;
+import org.antlr.v4.runtime.misc.*;
+import org.antlr.v4.runtime.tree.*;
+import java.util.List;
+import java.util.Iterator;
+import java.util.ArrayList;
+
+@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
+public class AdvancedDistSQLStatementParser extends Parser {
+ static { RuntimeMetaData.checkVersion("4.9.2",
RuntimeMetaData.VERSION); }
+
+ protected static final DFA[] _decisionToDFA;
+ protected static final PredictionContextCache _sharedContextCache =
+ new PredictionContextCache();
+ public static final int
+ AND=1, OR=2, NOT=3, TILDE=4, VERTICALBAR=5, AMPERSAND=6,
SIGNEDLEFTSHIFT=7,
+ SIGNEDRIGHTSHIFT=8, CARET=9, MOD=10, COLON=11, PLUS=12,
MINUS=13, ASTERISK=14,
+ SLASH=15, BACKSLASH=16, DOT=17, DOTASTERISK=18, SAFEEQ=19,
DEQ=20, EQ=21,
+ NEQ=22, GT=23, GTE=24, LT=25, LTE=26, POUND=27, LP=28, RP=29,
LBE=30,
+ RBE=31, LBT=32, RBT=33, COMMA=34, DQ=35, SQ=36, BQ=37,
QUESTION=38, AT=39,
+ SEMI=40, JSONSEPARATOR=41, UL=42, DL=43, WS=44, PREVIEW=45,
PARSE=46,
+ FORMAT=47, SQLString=48, FOR_GENERATOR=49;
+ public static final int
+ RULE_execute = 0, RULE_previewSQL = 1, RULE_parseSQL = 2,
RULE_formatSQL = 3,
+ RULE_sql = 4;
+ private static String[] makeRuleNames() {
+ return new String[] {
+ "execute", "previewSQL", "parseSQL", "formatSQL", "sql"
+ };
+ }
+ public static final String[] ruleNames = makeRuleNames();
+
+ private static String[] makeLiteralNames() {
+ return new String[] {
+ null, "'&&'", "'||'", "'!'", "'~'", "'|'", "'&'",
"'<<'", "'>>'", "'^'",
+ "'%'", "':'", "'+'", "'-'", "'*'", "'/'", "'\\'",
"'.'", "'.*'", "'<=>'",
+ "'=='", "'='", null, "'>'", "'>='", "'<'", "'<='",
"'#'", "'('", "')'",
+ "'{'", "'}'", "'['", "']'", "','", "'\"'", "'''",
"'`'", "'?'", "'@'",
+ "';'", "'->>'", "'_'", "'$'", null, null, null, null,
null, "'DO NOT MATCH ANY THING, JUST FOR GENERATOR'"
+ };
+ }
+ private static final String[] _LITERAL_NAMES = makeLiteralNames();
+ private static String[] makeSymbolicNames() {
+ return new String[] {
+ null, "AND", "OR", "NOT", "TILDE", "VERTICALBAR",
"AMPERSAND", "SIGNEDLEFTSHIFT",
+ "SIGNEDRIGHTSHIFT", "CARET", "MOD", "COLON", "PLUS",
"MINUS", "ASTERISK",
+ "SLASH", "BACKSLASH", "DOT", "DOTASTERISK", "SAFEEQ",
"DEQ", "EQ", "NEQ",
+ "GT", "GTE", "LT", "LTE", "POUND", "LP", "RP", "LBE",
"RBE", "LBT", "RBT",
+ "COMMA", "DQ", "SQ", "BQ", "QUESTION", "AT", "SEMI",
"JSONSEPARATOR",
+ "UL", "DL", "WS", "PREVIEW", "PARSE", "FORMAT",
"SQLString", "FOR_GENERATOR"
+ };
+ }
+ private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
+ public static final Vocabulary VOCABULARY = new
VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
+
+ /**
+ * @deprecated Use {@link #VOCABULARY} instead.
+ */
+ @Deprecated
+ public static final String[] tokenNames;
+ static {
+ tokenNames = new String[_SYMBOLIC_NAMES.length];
+ for (int i = 0; i < tokenNames.length; i++) {
+ tokenNames[i] = VOCABULARY.getLiteralName(i);
+ if (tokenNames[i] == null) {
+ tokenNames[i] = VOCABULARY.getSymbolicName(i);
+ }
+
+ if (tokenNames[i] == null) {
+ tokenNames[i] = "<INVALID>";
+ }
+ }
+ }
+
+ @Override
+ @Deprecated
+ public String[] getTokenNames() {
+ return tokenNames;
+ }
+
+ @Override
+
+ public Vocabulary getVocabulary() {
+ return VOCABULARY;
+ }
+
+ @Override
+ public String getGrammarFileName() { return
"AdvancedDistSQLStatement.g4"; }
+
+ @Override
+ public String[] getRuleNames() { return ruleNames; }
+
+ @Override
+ public String getSerializedATN() { return _serializedATN; }
+
+ @Override
+ public ATN getATN() { return _ATN; }
+
+ public AdvancedDistSQLStatementParser(TokenStream input) {
+ super(input);
+ _interp = new
ParserATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache);
+ }
+
+ public static class ExecuteContext extends ParserRuleContext {
+ public PreviewSQLContext previewSQL() {
+ return getRuleContext(PreviewSQLContext.class,0);
+ }
+ public ParseSQLContext parseSQL() {
+ return getRuleContext(ParseSQLContext.class,0);
+ }
+ public FormatSQLContext formatSQL() {
+ return getRuleContext(FormatSQLContext.class,0);
+ }
+ public TerminalNode SEMI() { return
getToken(AdvancedDistSQLStatementParser.SEMI, 0); }
+ public ExecuteContext(ParserRuleContext parent, int
invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_execute; }
+ @Override
+ public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+ if ( visitor instanceof AdvancedDistSQLStatementVisitor
) return ((AdvancedDistSQLStatementVisitor<? extends
T>)visitor).visitExecute(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final ExecuteContext execute() throws RecognitionException {
+ ExecuteContext _localctx = new ExecuteContext(_ctx, getState());
+ enterRule(_localctx, 0, RULE_execute);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(13);
+ _errHandler.sync(this);
+ switch (_input.LA(1)) {
+ case PREVIEW:
+ {
+ setState(10);
+ previewSQL();
+ }
+ break;
+ case PARSE:
+ {
+ setState(11);
+ parseSQL();
+ }
+ break;
+ case FORMAT:
+ {
+ setState(12);
+ formatSQL();
+ }
+ break;
+ default:
+ throw new NoViableAltException(this);
+ }
+ setState(16);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==SEMI) {
+ {
+ setState(15);
+ match(SEMI);
+ }
+ }
+
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class PreviewSQLContext extends ParserRuleContext {
+ public TerminalNode PREVIEW() { return
getToken(AdvancedDistSQLStatementParser.PREVIEW, 0); }
+ public SqlContext sql() {
+ return getRuleContext(SqlContext.class,0);
+ }
+ public PreviewSQLContext(ParserRuleContext parent, int
invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_previewSQL; }
+ @Override
+ public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+ if ( visitor instanceof AdvancedDistSQLStatementVisitor
) return ((AdvancedDistSQLStatementVisitor<? extends
T>)visitor).visitPreviewSQL(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final PreviewSQLContext previewSQL() throws RecognitionException
{
+ PreviewSQLContext _localctx = new PreviewSQLContext(_ctx,
getState());
+ enterRule(_localctx, 2, RULE_previewSQL);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(18);
+ match(PREVIEW);
+ setState(19);
+ sql();
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class ParseSQLContext extends ParserRuleContext {
+ public TerminalNode PARSE() { return
getToken(AdvancedDistSQLStatementParser.PARSE, 0); }
+ public SqlContext sql() {
+ return getRuleContext(SqlContext.class,0);
+ }
+ public ParseSQLContext(ParserRuleContext parent, int
invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_parseSQL; }
+ @Override
+ public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+ if ( visitor instanceof AdvancedDistSQLStatementVisitor
) return ((AdvancedDistSQLStatementVisitor<? extends
T>)visitor).visitParseSQL(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final ParseSQLContext parseSQL() throws RecognitionException {
+ ParseSQLContext _localctx = new ParseSQLContext(_ctx,
getState());
+ enterRule(_localctx, 4, RULE_parseSQL);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(21);
+ match(PARSE);
+ setState(22);
+ sql();
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class FormatSQLContext extends ParserRuleContext {
+ public TerminalNode FORMAT() { return
getToken(AdvancedDistSQLStatementParser.FORMAT, 0); }
+ public SqlContext sql() {
+ return getRuleContext(SqlContext.class,0);
+ }
+ public FormatSQLContext(ParserRuleContext parent, int
invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_formatSQL; }
+ @Override
+ public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+ if ( visitor instanceof AdvancedDistSQLStatementVisitor
) return ((AdvancedDistSQLStatementVisitor<? extends
T>)visitor).visitFormatSQL(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final FormatSQLContext formatSQL() throws RecognitionException {
+ FormatSQLContext _localctx = new FormatSQLContext(_ctx,
getState());
+ enterRule(_localctx, 6, RULE_formatSQL);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(24);
+ match(FORMAT);
+ setState(25);
+ sql();
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class SqlContext extends ParserRuleContext {
+ public TerminalNode SQLString() { return
getToken(AdvancedDistSQLStatementParser.SQLString, 0); }
+ public SqlContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_sql; }
+ @Override
+ public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+ if ( visitor instanceof AdvancedDistSQLStatementVisitor
) return ((AdvancedDistSQLStatementVisitor<? extends T>)visitor).visitSql(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final SqlContext sql() throws RecognitionException {
+ SqlContext _localctx = new SqlContext(_ctx, getState());
+ enterRule(_localctx, 8, RULE_sql);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(27);
+ match(SQLString);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static final String _serializedATN =
+ "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\63
\4\2\t\2\4\3\t"+
+
"\3\4\4\t\4\4\5\t\5\4\6\t\6\3\2\3\2\3\2\5\2\20\n\2\3\2\5\2\23\n\2\3\3\3"+
+
"\3\3\3\3\4\3\4\3\4\3\5\3\5\3\5\3\6\3\6\3\6\2\2\7\2\4\6\b\n\2\2\2\35\2"+
+
"\17\3\2\2\2\4\24\3\2\2\2\6\27\3\2\2\2\b\32\3\2\2\2\n\35\3\2\2\2\f\20\5"+
+
"\4\3\2\r\20\5\6\4\2\16\20\5\b\5\2\17\f\3\2\2\2\17\r\3\2\2\2\17\16\3\2"+
+
"\2\2\20\22\3\2\2\2\21\23\7*\2\2\22\21\3\2\2\2\22\23\3\2\2\2\23\3\3\2\2"+
+
"\2\24\25\7/\2\2\25\26\5\n\6\2\26\5\3\2\2\2\27\30\7\60\2\2\30\31\5\n\6"+
+
"\2\31\7\3\2\2\2\32\33\7\61\2\2\33\34\5\n\6\2\34\t\3\2\2\2\35\36\7\62\2"+
+ "\2\36\13\3\2\2\2\4\17\22";
+ public static final ATN _ATN =
+ new ATNDeserializer().deserialize(_serializedATN.toCharArray());
+ static {
+ _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
+ for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) {
+ _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i),
i);
+ }
+ }
+}
\ No newline at end of file
diff --git
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/merge/dql/fixture/TableAvailableAndSqlStatementContextFixture.java
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/merge/dql/fixture/TableAvailableAndSqlStatementContextFixture.java
deleted file mode 100644
index b6b318c..0000000
---
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/merge/dql/fixture/TableAvailableAndSqlStatementContextFixture.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.encrypt.merge.dql.fixture;
-
-import org.apache.shardingsphere.infra.binder.segment.table.TablesContext;
-import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
-import org.apache.shardingsphere.infra.binder.type.TableAvailable;
-import org.apache.shardingsphere.infra.database.type.DatabaseType;
-import org.apache.shardingsphere.infra.database.type.DatabaseTypeRegistry;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
-
-import java.util.Collection;
-
-public final class TableAvailableAndSqlStatementContextFixture implements
TableAvailable, SQLStatementContext {
-
- @Override
- public SQLStatement getSqlStatement() {
- return null;
- }
-
- @Override
- public Collection<SimpleTableSegment> getAllTables() {
- return null;
- }
-
- @Override
- public TablesContext getTablesContext() {
- return null;
- }
-
- @Override
- public DatabaseType getDatabaseType() {
- return DatabaseTypeRegistry.getDefaultDatabaseType();
- }
-}
diff --git
a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/test/java/org/apache/shardingsphere/shadow/route/engine/dml/ShadowDeleteStatementRoutingEngineTest.java
b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/test/java/org/apache/shardingsphere/shadow/route/engine/dml/ShadowDeleteStatementRoutingEngineTest.java
index 6e97c28..3641d1b 100644
---
a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/test/java/org/apache/shardingsphere/shadow/route/engine/dml/ShadowDeleteStatementRoutingEngineTest.java
+++
b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/test/java/org/apache/shardingsphere/shadow/route/engine/dml/ShadowDeleteStatementRoutingEngineTest.java
@@ -54,14 +54,14 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public final class ShadowDeleteStatementRoutingEngineTest {
-
+
private ShadowDeleteStatementRoutingEngine
shadowDeleteStatementRoutingEngine;
-
+
@Before
public void init() {
shadowDeleteStatementRoutingEngine = new
ShadowDeleteStatementRoutingEngine(createDeleteStatementContext(),
Collections.emptyList());
}
-
+
private DeleteStatementContext createDeleteStatementContext() {
DeleteStatementContext result = mock(DeleteStatementContext.class);
Collection<SimpleTableSegment> allTables = new LinkedList<>();
@@ -72,15 +72,13 @@ public final class ShadowDeleteStatementRoutingEngineTest {
when(binaryOperationExpression.getRight()).thenReturn(new
LiteralExpressionSegment(0, 0, "1"));
WhereSegment whereSegment = new WhereSegment(0, 0,
binaryOperationExpression);
when(result.getWhereSegments()).thenReturn(Collections.singletonList(whereSegment));
- MySQLDeleteStatement mySQLDeleteStatement = new MySQLDeleteStatement();
- Collection<CommentSegment> commentSegments = new LinkedList<>();
- commentSegments.add(new CommentSegment("/*shadow:true,foo:bar*/", 0,
20));
- commentSegments.add(new CommentSegment("/*aaa:bbb*/", 21, 30));
- mySQLDeleteStatement.setCommentSegments(commentSegments);
- when(result.getSqlStatement()).thenReturn(mySQLDeleteStatement);
+ MySQLDeleteStatement deleteStatement = new MySQLDeleteStatement();
+ deleteStatement.getCommentSegments().add(new
CommentSegment("/*shadow:true,foo:bar*/", 0, 20));
+ deleteStatement.getCommentSegments().add(new
CommentSegment("/*aaa:bbb*/", 21, 30));
+ when(result.getSqlStatement()).thenReturn(deleteStatement);
return result;
}
-
+
@Test
public void assertRouteAndParseShadowColumnConditions() {
RouteContext routeContext = mock(RouteContext.class);
@@ -95,7 +93,7 @@ public final class ShadowDeleteStatementRoutingEngineTest {
assertThat(sqlNotesIt.next(), is("/*shadow:true,foo:bar*/"));
assertThat(sqlNotesIt.next(), is("/*aaa:bbb*/"));
}
-
+
private AlgorithmProvidedShadowRuleConfiguration
createAlgorithmProvidedShadowRuleConfiguration() {
AlgorithmProvidedShadowRuleConfiguration result = new
AlgorithmProvidedShadowRuleConfiguration();
result.setDataSources(createDataSources());
@@ -103,13 +101,13 @@ public final class ShadowDeleteStatementRoutingEngineTest
{
result.setShadowAlgorithms(createShadowAlgorithms());
return result;
}
-
+
private Map<String, ShadowAlgorithm> createShadowAlgorithms() {
Map<String, ShadowAlgorithm> result = new LinkedHashMap<>();
result.put("user-id-delete-regex-algorithm",
createColumnShadowAlgorithm());
return result;
}
-
+
private ShadowAlgorithm createColumnShadowAlgorithm() {
Properties properties = new Properties();
properties.setProperty("column", "user_id");
@@ -120,7 +118,7 @@ public final class ShadowDeleteStatementRoutingEngineTest {
columnRegexMatchShadowAlgorithm.init();
return columnRegexMatchShadowAlgorithm;
}
-
+
private Map<String, ShadowTableConfiguration> createTables() {
Map<String, ShadowTableConfiguration> result = new LinkedHashMap<>();
Collection<String> shadowAlgorithmNames = new LinkedList<>();
@@ -128,7 +126,7 @@ public final class ShadowDeleteStatementRoutingEngineTest {
result.put("t_order", new
ShadowTableConfiguration(Collections.singletonList("shadow-data-source-0"),
shadowAlgorithmNames));
return result;
}
-
+
private Map<String, ShadowDataSourceConfiguration> createDataSources() {
Map<String, ShadowDataSourceConfiguration> result = new
LinkedHashMap<>();
result.put("shadow-data-source-0", new
ShadowDataSourceConfiguration("ds", "ds_shadow"));
@@ -142,4 +140,3 @@ public final class ShadowDeleteStatementRoutingEngineTest {
assertThat(allTables.iterator().next().getTableName().getIdentifier().getValue(),
is("t_order"));
}
}
-
diff --git
a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/test/java/org/apache/shardingsphere/shadow/route/engine/dml/ShadowInsertStatementRoutingEngineTest.java
b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/test/java/org/apache/shardingsphere/shadow/route/engine/dml/ShadowInsertStatementRoutingEngineTest.java
index 02924de..b0d546b 100644
---
a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/test/java/org/apache/shardingsphere/shadow/route/engine/dml/ShadowInsertStatementRoutingEngineTest.java
+++
b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/test/java/org/apache/shardingsphere/shadow/route/engine/dml/ShadowInsertStatementRoutingEngineTest.java
@@ -77,12 +77,10 @@ public final class ShadowInsertStatementRoutingEngineTest {
valueExpressions.add(new LiteralExpressionSegment(21, 30,
"orderName"));
insertValueContexts.add(new InsertValueContext(valueExpressions, new
ArrayList<>(), 0));
when(result.getInsertValueContexts()).thenReturn(insertValueContexts);
- MySQLInsertStatement mySQLInsertStatement = new MySQLInsertStatement();
- Collection<CommentSegment> commentSegments = new LinkedList<>();
- commentSegments.add(new CommentSegment("/*shadow:true,foo:bar*/", 0,
20));
- commentSegments.add(new CommentSegment("/*aaa:bbb*/", 21, 30));
- mySQLInsertStatement.setCommentSegments(commentSegments);
- when(result.getSqlStatement()).thenReturn(mySQLInsertStatement);
+ MySQLInsertStatement insertStatement = new MySQLInsertStatement();
+ insertStatement.getCommentSegments().add(new
CommentSegment("/*shadow:true,foo:bar*/", 0, 20));
+ insertStatement.getCommentSegments().add(new
CommentSegment("/*aaa:bbb*/", 21, 30));
+ when(result.getSqlStatement()).thenReturn(insertStatement);
return result;
}
diff --git
a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/test/java/org/apache/shardingsphere/shadow/route/engine/dml/ShadowSelectStatementRoutingEngineTest.java
b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/test/java/org/apache/shardingsphere/shadow/route/engine/dml/ShadowSelectStatementRoutingEngineTest.java
index e554705..414a20f 100644
---
a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/test/java/org/apache/shardingsphere/shadow/route/engine/dml/ShadowSelectStatementRoutingEngineTest.java
+++
b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/test/java/org/apache/shardingsphere/shadow/route/engine/dml/ShadowSelectStatementRoutingEngineTest.java
@@ -73,10 +73,8 @@ public final class ShadowSelectStatementRoutingEngineTest {
WhereSegment whereSegment = new WhereSegment(0, 0,
binaryOperationExpression);
when(result.getWhereSegments()).thenReturn(Collections.singletonList(whereSegment));
MySQLSelectStatement selectStatement = new MySQLSelectStatement();
- Collection<CommentSegment> commentSegments = new LinkedList<>();
- commentSegments.add(new CommentSegment("/*shadow:true,foo:bar*/", 0,
20));
- commentSegments.add(new CommentSegment("/*aaa:bbb*/", 21, 30));
- selectStatement.setCommentSegments(commentSegments);
+ selectStatement.getCommentSegments().add(new
CommentSegment("/*shadow:true,foo:bar*/", 0, 20));
+ selectStatement.getCommentSegments().add(new
CommentSegment("/*aaa:bbb*/", 21, 30));
when(result.getSqlStatement()).thenReturn(selectStatement);
return result;
}
diff --git
a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/test/java/org/apache/shardingsphere/shadow/route/engine/dml/ShadowUpdateStatementRoutingEngineTest.java
b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/test/java/org/apache/shardingsphere/shadow/route/engine/dml/ShadowUpdateStatementRoutingEngineTest.java
index 914a32b..f507a25 100644
---
a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/test/java/org/apache/shardingsphere/shadow/route/engine/dml/ShadowUpdateStatementRoutingEngineTest.java
+++
b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/test/java/org/apache/shardingsphere/shadow/route/engine/dml/ShadowUpdateStatementRoutingEngineTest.java
@@ -73,10 +73,8 @@ public final class ShadowUpdateStatementRoutingEngineTest {
WhereSegment whereSegment = new WhereSegment(0, 0,
binaryOperationExpression);
when(result.getWhereSegments()).thenReturn(Collections.singletonList(whereSegment));
MySQLUpdateStatement updateStatement = new MySQLUpdateStatement();
- Collection<CommentSegment> commentSegments = new LinkedList<>();
- commentSegments.add(new CommentSegment("/*shadow:true,foo:bar*/", 0,
20));
- commentSegments.add(new CommentSegment("/*aaa:bbb*/", 21, 30));
- updateStatement.setCommentSegments(commentSegments);
+ updateStatement.getCommentSegments().add(new
CommentSegment("/*shadow:true,foo:bar*/", 0, 20));
+ updateStatement.getCommentSegments().add(new
CommentSegment("/*aaa:bbb*/", 21, 30));
when(result.getSqlStatement()).thenReturn(updateStatement);
return result;
}
diff --git
a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/test/java/org/apache/shardingsphere/shadow/route/engine/impl/ShadowNonDMLStatementRoutingEngineTest.java
b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/test/java/org/apache/shardingsphere/shadow/route/engine/impl/ShadowNonDMLStatementRoutingEngineTest.java
index d511a80..95d6670 100644
---
a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/test/java/org/apache/shardingsphere/shadow/route/engine/impl/ShadowNonDMLStatementRoutingEngineTest.java
+++
b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/test/java/org/apache/shardingsphere/shadow/route/engine/impl/ShadowNonDMLStatementRoutingEngineTest.java
@@ -54,11 +54,9 @@ public final class ShadowNonDMLStatementRoutingEngineTest {
private SQLStatementContext<?> createSQLStatementContext() {
CreateTableStatementContext result =
mock(CreateTableStatementContext.class);
- MySQLCreateTableStatement mySQLCreateTableStatement = new
MySQLCreateTableStatement();
- Collection<CommentSegment> commentSegments = new LinkedList<>();
- commentSegments.add(new CommentSegment("/*shadow:true*/", 0, 20));
- mySQLCreateTableStatement.setCommentSegments(commentSegments);
- when(result.getSqlStatement()).thenReturn(mySQLCreateTableStatement);
+ MySQLCreateTableStatement createTableStatement = new
MySQLCreateTableStatement();
+ createTableStatement.getCommentSegments().add(new
CommentSegment("/*shadow:true*/", 0, 20));
+ when(result.getSqlStatement()).thenReturn(createTableStatement);
return result;
}
diff --git
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/standard/AbstractSQLRouteTest.java
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/standard/AbstractSQLRouteTest.java
index bbb406c..62f2aa4 100644
---
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/standard/AbstractSQLRouteTest.java
+++
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/standard/AbstractSQLRouteTest.java
@@ -32,10 +32,10 @@ import
org.apache.shardingsphere.infra.metadata.schema.model.TableMetaData;
import org.apache.shardingsphere.infra.parser.sql.SQLStatementParserEngine;
import org.apache.shardingsphere.infra.route.context.RouteContext;
import org.apache.shardingsphere.infra.route.engine.SQLRouteEngine;
-import org.apache.shardingsphere.parser.rule.SQLParserRule;
import
org.apache.shardingsphere.sharding.route.engine.fixture.AbstractRoutingEngineTest;
import org.apache.shardingsphere.sharding.rule.ShardingRule;
import org.apache.shardingsphere.singletable.rule.SingleTableRule;
+import org.apache.shardingsphere.sql.parser.api.CacheOption;
import java.sql.Types;
import java.util.Arrays;
@@ -59,9 +59,9 @@ public abstract class AbstractSQLRouteTest extends
AbstractRoutingEngineTest {
ShardingRule shardingRule = createAllShardingRule();
SingleTableRule singleTableRule =
createAllSingleTableRule(Collections.singletonList(shardingRule));
Map<String, ShardingSphereSchema> schemas = buildSchemas();
- SQLParserRule sqlParserRule = createDefaultSQLParserRule();
ConfigurationProperties props = new ConfigurationProperties(new
Properties());
- SQLStatementParserEngine sqlStatementParserEngine = new
SQLStatementParserEngine("MySQL", sqlParserRule);
+ SQLStatementParserEngine sqlStatementParserEngine = new
SQLStatementParserEngine("MySQL",
+ new CacheOption(2000, 65535L, 4), new CacheOption(128, 1024L,
4), false);
ShardingSphereRuleMetaData ruleMetaData = new
ShardingSphereRuleMetaData(Collections.emptyList(), Arrays.asList(shardingRule,
singleTableRule));
ShardingSphereResource resource = mock(ShardingSphereResource.class,
RETURNS_DEEP_STUBS);
when(resource.getDatabaseType()).thenReturn(new MySQLDatabaseType());
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-executor/src/main/java/org/apache/shardingsphere/infra/federation/executor/original/table/FilterableTableScanExecutor.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-executor/src/main/java/org/apache/shardingsphere/infra/federation/executor/original/table/FilterableTableScanExecutor.java
index 5a4aedf..e1e5b59 100644
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-executor/src/main/java/org/apache/shardingsphere/infra/federation/executor/original/table/FilterableTableScanExecutor.java
+++
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-executor/src/main/java/org/apache/shardingsphere/infra/federation/executor/original/table/FilterableTableScanExecutor.java
@@ -254,7 +254,9 @@ public final class FilterableTableScanExecutor {
private LogicSQL createLogicSQL(final Map<String, ShardingSphereMetaData>
metaDataMap, final SqlString sqlString, final DatabaseType databaseType) {
String sql = sqlString.getSql().replace("\n", " ");
- SQLStatement sqlStatement = new
SQLStatementParserEngine(databaseType.getName(),
optimizerContext.getSqlParserRule()).parse(sql, false);
+ SQLStatement sqlStatement = new
SQLStatementParserEngine(databaseType.getName(),
+ optimizerContext.getSqlParserRule().getSqlStatementCache(),
optimizerContext.getSqlParserRule().getParseTreeCache(),
+
optimizerContext.getSqlParserRule().isSqlCommentParseEnabled()).parse(sql,
false);
List<Object> parameters =
getParameters(sqlString.getDynamicParameters());
SQLStatementContext<?> sqlStatementContext =
SQLStatementContextFactory.newInstance(metaDataMap, parameters, sqlStatement,
executorContext.getSchemaName());
return new LogicSQL(sqlStatementContext, sql, parameters);
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/pom.xml
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/pom.xml
index f0a891f..349f5bd 100644
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/pom.xml
+++
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/pom.xml
@@ -41,6 +41,11 @@
<dependency>
<groupId>org.apache.shardingsphere</groupId>
+ <artifactId>shardingsphere-parser-core</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-sql-parser-sql92</artifactId>
<version>${project.version}</version>
<scope>test</scope>
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/test/java/org/apache/shardingsphere/infra/federation/optimizer/ShardingSphereOptimizerTest.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/test/java/org/apache/shardingsphere/infra/federation/optimizer/ShardingSphereOptimizerTest.java
index 2ec395e..7fbdcc3 100644
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/test/java/org/apache/shardingsphere/infra/federation/optimizer/ShardingSphereOptimizerTest.java
+++
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/test/java/org/apache/shardingsphere/infra/federation/optimizer/ShardingSphereOptimizerTest.java
@@ -26,6 +26,7 @@ import
org.apache.shardingsphere.infra.metadata.rule.ShardingSphereRuleMetaData;
import org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema;
import org.apache.shardingsphere.infra.metadata.schema.model.ColumnMetaData;
import org.apache.shardingsphere.infra.metadata.schema.model.TableMetaData;
+import org.apache.shardingsphere.infra.parser.ParserConfiguration;
import org.apache.shardingsphere.infra.parser.ShardingSphereSQLParserEngine;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.parser.config.SQLParserRuleConfiguration;
@@ -98,7 +99,7 @@ public final class ShardingSphereOptimizerTest {
private final String schemaName = "federate_jdbc";
- private final SQLParserRule sqlParserRule = new SQLParserRule(new
DefaultSQLParserRuleConfigurationBuilder().build());
+ private final ParserConfiguration parserConfig = new SQLParserRule(new
DefaultSQLParserRuleConfigurationBuilder().build()).toParserConfiguration();
private ShardingSphereOptimizer optimizer;
@@ -139,8 +140,7 @@ public final class ShardingSphereOptimizerTest {
@Test
public void assertSelectCrossJoinCondition() {
- ShardingSphereSQLParserEngine sqlParserEngine = new
ShardingSphereSQLParserEngine(
- DatabaseTypeRegistry.getTrunkDatabaseTypeName(new
H2DatabaseType()), sqlParserRule);
+ ShardingSphereSQLParserEngine sqlParserEngine = new
ShardingSphereSQLParserEngine(DatabaseTypeRegistry.getTrunkDatabaseTypeName(new
H2DatabaseType()), parserConfig);
SQLStatement sqlStatement =
sqlParserEngine.parse(SELECT_CROSS_JOIN_CONDITION, false);
String actual = optimizer.optimize(databaseName, schemaName,
sqlStatement).explain();
String expected =
@@ -155,8 +155,7 @@ public final class ShardingSphereOptimizerTest {
@Test
public void assertSelectWhereAllFields() {
- ShardingSphereSQLParserEngine sqlParserEngine = new
ShardingSphereSQLParserEngine(
- DatabaseTypeRegistry.getTrunkDatabaseTypeName(new
H2DatabaseType()), sqlParserRule);
+ ShardingSphereSQLParserEngine sqlParserEngine = new
ShardingSphereSQLParserEngine(DatabaseTypeRegistry.getTrunkDatabaseTypeName(new
H2DatabaseType()), parserConfig);
SQLStatement sqlStatement =
sqlParserEngine.parse(SELECT_WHERE_ALL_FIELDS, false);
String actual = optimizer.optimize(databaseName, schemaName,
sqlStatement).explain();
String expected =
@@ -167,8 +166,7 @@ public final class ShardingSphereOptimizerTest {
@Test
public void assertSelectWhereSingleField() {
- ShardingSphereSQLParserEngine sqlParserEngine = new
ShardingSphereSQLParserEngine(
- DatabaseTypeRegistry.getTrunkDatabaseTypeName(new
H2DatabaseType()), sqlParserRule);
+ ShardingSphereSQLParserEngine sqlParserEngine = new
ShardingSphereSQLParserEngine(DatabaseTypeRegistry.getTrunkDatabaseTypeName(new
H2DatabaseType()), parserConfig);
SQLStatement sqlStatement =
sqlParserEngine.parse(SELECT_WHERE_SINGLE_FIELD, false);
String actual = optimizer.optimize(databaseName, schemaName,
sqlStatement).explain();
String expected =
@@ -179,8 +177,7 @@ public final class ShardingSphereOptimizerTest {
@Test
public void assertSelectCrossWhere() {
- ShardingSphereSQLParserEngine sqlParserEngine = new
ShardingSphereSQLParserEngine(
- DatabaseTypeRegistry.getTrunkDatabaseTypeName(new
H2DatabaseType()), sqlParserRule);
+ ShardingSphereSQLParserEngine sqlParserEngine = new
ShardingSphereSQLParserEngine(DatabaseTypeRegistry.getTrunkDatabaseTypeName(new
H2DatabaseType()), parserConfig);
SQLStatement sqlStatement = sqlParserEngine.parse(SELECT_CROSS_WHERE,
false);
String actual = optimizer.optimize(databaseName, schemaName,
sqlStatement).explain();
String expected =
@@ -197,8 +194,7 @@ public final class ShardingSphereOptimizerTest {
@Test
public void assertSelectCrossJoin() {
- ShardingSphereSQLParserEngine sqlParserEngine = new
ShardingSphereSQLParserEngine(
- DatabaseTypeRegistry.getTrunkDatabaseTypeName(new
H2DatabaseType()), sqlParserRule);
+ ShardingSphereSQLParserEngine sqlParserEngine = new
ShardingSphereSQLParserEngine(DatabaseTypeRegistry.getTrunkDatabaseTypeName(new
H2DatabaseType()), parserConfig);
SQLStatement sqlStatement = sqlParserEngine.parse(SELECT_CROSS_JOIN,
false);
String actual = optimizer.optimize(databaseName, schemaName,
sqlStatement).explain();
String expected =
@@ -215,8 +211,7 @@ public final class ShardingSphereOptimizerTest {
@Test
public void assertSelectJoinWhere() {
- ShardingSphereSQLParserEngine sqlParserEngine = new
ShardingSphereSQLParserEngine(
- DatabaseTypeRegistry.getTrunkDatabaseTypeName(new
H2DatabaseType()), sqlParserRule);
+ ShardingSphereSQLParserEngine sqlParserEngine = new
ShardingSphereSQLParserEngine(DatabaseTypeRegistry.getTrunkDatabaseTypeName(new
H2DatabaseType()), parserConfig);
SQLStatement sqlStatement =
sqlParserEngine.parse(SELECT_CROSS_WHERE_CONDITION, false);
String actual = optimizer.optimize(databaseName, schemaName,
sqlStatement).explain();
String expected =
@@ -229,8 +224,7 @@ public final class ShardingSphereOptimizerTest {
@Test
public void assertSelectSubQueryFrom() {
- ShardingSphereSQLParserEngine sqlParserEngine = new
ShardingSphereSQLParserEngine(
- DatabaseTypeRegistry.getTrunkDatabaseTypeName(new
H2DatabaseType()), sqlParserRule);
+ ShardingSphereSQLParserEngine sqlParserEngine = new
ShardingSphereSQLParserEngine(DatabaseTypeRegistry.getTrunkDatabaseTypeName(new
H2DatabaseType()), parserConfig);
SQLStatement sqlStatement =
sqlParserEngine.parse(SELECT_SUBQUERY_FROM, false);
String actual = optimizer.optimize(databaseName, schemaName,
sqlStatement).explain();
String expected =
@@ -241,8 +235,7 @@ public final class ShardingSphereOptimizerTest {
@Test
public void assertSelectSubQueryWhereExist() {
- ShardingSphereSQLParserEngine sqlParserEngine = new
ShardingSphereSQLParserEngine(
- DatabaseTypeRegistry.getTrunkDatabaseTypeName(new
H2DatabaseType()), sqlParserRule);
+ ShardingSphereSQLParserEngine sqlParserEngine = new
ShardingSphereSQLParserEngine(DatabaseTypeRegistry.getTrunkDatabaseTypeName(new
H2DatabaseType()), parserConfig);
SQLStatement sqlStatement =
sqlParserEngine.parse(SELECT_SUBQUERY_WHERE_EXIST, false);
String actual = optimizer.optimize(databaseName, schemaName,
sqlStatement).explain();
String expected =
@@ -257,8 +250,7 @@ public final class ShardingSphereOptimizerTest {
@Test
public void assertSelectSubQueryWhereIn() {
- ShardingSphereSQLParserEngine sqlParserEngine = new
ShardingSphereSQLParserEngine(
- DatabaseTypeRegistry.getTrunkDatabaseTypeName(new
H2DatabaseType()), sqlParserRule);
+ ShardingSphereSQLParserEngine sqlParserEngine = new
ShardingSphereSQLParserEngine(DatabaseTypeRegistry.getTrunkDatabaseTypeName(new
H2DatabaseType()), parserConfig);
SQLStatement sqlStatement =
sqlParserEngine.parse(SELECT_SUBQUERY_WHERE_IN, false);
String actual = optimizer.optimize(databaseName, schemaName,
sqlStatement).explain();
String expected =
@@ -272,8 +264,7 @@ public final class ShardingSphereOptimizerTest {
@Test
public void assertSelectSubQueryWhereBetween() {
- ShardingSphereSQLParserEngine sqlParserEngine = new
ShardingSphereSQLParserEngine(
- DatabaseTypeRegistry.getTrunkDatabaseTypeName(new
H2DatabaseType()), sqlParserRule);
+ ShardingSphereSQLParserEngine sqlParserEngine = new
ShardingSphereSQLParserEngine(DatabaseTypeRegistry.getTrunkDatabaseTypeName(new
H2DatabaseType()), parserConfig);
SQLStatement sqlStatement =
sqlParserEngine.parse(SELECT_SUBQUERY_WHERE_BETWEEN, false);
String actual = optimizer.optimize(databaseName, schemaName,
sqlStatement).explain();
String expected =
diff --git a/shardingsphere-infra/shardingsphere-infra-parser/pom.xml
b/shardingsphere-infra/shardingsphere-infra-parser/pom.xml
index 6a1517c..2beffc1 100644
--- a/shardingsphere-infra/shardingsphere-infra-parser/pom.xml
+++ b/shardingsphere-infra/shardingsphere-infra-parser/pom.xml
@@ -39,10 +39,5 @@
<artifactId>shardingsphere-infra-common</artifactId>
<version>${project.version}</version>
</dependency>
- <dependency>
- <groupId>org.apache.shardingsphere</groupId>
- <artifactId>shardingsphere-parser-core</artifactId>
- <version>${project.version}</version>
- </dependency>
</dependencies>
</project>
diff --git
a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/AbstractSQLStatement.java
b/shardingsphere-infra/shardingsphere-infra-parser/src/main/java/org/apache/shardingsphere/infra/parser/ParserConfiguration.java
similarity index 57%
copy from
shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/AbstractSQLStatement.java
copy to
shardingsphere-infra/shardingsphere-infra-parser/src/main/java/org/apache/shardingsphere/infra/parser/ParserConfiguration.java
index 05c4a9d..92ffd75 100644
---
a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/AbstractSQLStatement.java
+++
b/shardingsphere-infra/shardingsphere-infra-parser/src/main/java/org/apache/shardingsphere/infra/parser/ParserConfiguration.java
@@ -15,26 +15,22 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.sql.parser.sql.common.statement;
+package org.apache.shardingsphere.infra.parser;
import lombok.Getter;
-import lombok.Setter;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.CommentSegment;
-import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.ParameterMarkerSegment;
-
-import java.util.Collection;
-import java.util.LinkedList;
+import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.sql.parser.api.CacheOption;
/**
- * SQL statement abstract class.
+ * Parser configuration.
*/
+@RequiredArgsConstructor
@Getter
-@Setter
-public abstract class AbstractSQLStatement implements SQLStatement {
+public final class ParserConfiguration {
- private int parameterCount;
+ private final CacheOption sqlStatementCacheOption;
- private Collection<ParameterMarkerSegment> parameterMarkerSegments = new
LinkedList<>();
+ private final CacheOption parseTreeCacheOption;
- private Collection<CommentSegment> commentSegments = new LinkedList<>();
+ private final boolean isParseComment;
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-parser/src/main/java/org/apache/shardingsphere/infra/parser/ShardingSphereSQLParserEngine.java
b/shardingsphere-infra/shardingsphere-infra-parser/src/main/java/org/apache/shardingsphere/infra/parser/ShardingSphereSQLParserEngine.java
index 4625eb5..3e66f78 100644
---
a/shardingsphere-infra/shardingsphere-infra-parser/src/main/java/org/apache/shardingsphere/infra/parser/ShardingSphereSQLParserEngine.java
+++
b/shardingsphere-infra/shardingsphere-infra-parser/src/main/java/org/apache/shardingsphere/infra/parser/ShardingSphereSQLParserEngine.java
@@ -22,7 +22,6 @@ import org.antlr.v4.runtime.misc.ParseCancellationException;
import
org.apache.shardingsphere.distsql.parser.engine.api.DistSQLStatementParserEngine;
import org.apache.shardingsphere.infra.parser.sql.SQLStatementParserEngine;
import
org.apache.shardingsphere.infra.parser.sql.SQLStatementParserEngineFactory;
-import org.apache.shardingsphere.parser.rule.SQLParserRule;
import org.apache.shardingsphere.sql.parser.exception.SQLParsingException;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import org.apache.shardingsphere.sql.parser.sql.common.util.SQLUtil;
@@ -36,8 +35,9 @@ public final class ShardingSphereSQLParserEngine {
private final DistSQLStatementParserEngine distSQLStatementParserEngine;
- public ShardingSphereSQLParserEngine(final String databaseTypeName, final
SQLParserRule sqlParserRule) {
- sqlStatementParserEngine =
SQLStatementParserEngineFactory.getSQLStatementParserEngine(databaseTypeName,
sqlParserRule);
+ public ShardingSphereSQLParserEngine(final String databaseTypeName, final
ParserConfiguration config) {
+ sqlStatementParserEngine =
SQLStatementParserEngineFactory.getSQLStatementParserEngine(
+ databaseTypeName, config.getSqlStatementCacheOption(),
config.getParseTreeCacheOption(), config.isParseComment());
distSQLStatementParserEngine = new DistSQLStatementParserEngine();
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-parser/src/main/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheBuilder.java
b/shardingsphere-infra/shardingsphere-infra-parser/src/main/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheBuilder.java
index c0ad1ad..d37801b 100644
---
a/shardingsphere-infra/shardingsphere-infra-parser/src/main/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheBuilder.java
+++
b/shardingsphere-infra/shardingsphere-infra-parser/src/main/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheBuilder.java
@@ -21,7 +21,6 @@ import com.google.common.cache.CacheBuilder;
import com.google.common.cache.LoadingCache;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
-import org.apache.shardingsphere.parser.rule.SQLParserRule;
import org.apache.shardingsphere.sql.parser.api.CacheOption;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
@@ -34,13 +33,15 @@ public final class SQLStatementCacheBuilder {
/**
* Build SQL statement cache.
*
- * @param sqlParserRule sql parser rule
+ * @param sqlStatementCacheOption SQL statement cache option
+ * @param parseTreeCacheOption parse tree cache option
+ * @param isParseComment is parse comment
* @param databaseType database type
* @return built SQL statement cache
*/
- public static LoadingCache<String, SQLStatement> build(final SQLParserRule
sqlParserRule, final String databaseType) {
- CacheOption sqlStatementCache = sqlParserRule.getSqlStatementCache();
- return
CacheBuilder.newBuilder().softValues().initialCapacity(sqlStatementCache.getInitialCapacity()).maximumSize(sqlStatementCache.getMaximumSize())
-
.concurrencyLevel(sqlStatementCache.getConcurrencyLevel()).build(new
SQLStatementCacheLoader(databaseType, sqlParserRule));
+ public static LoadingCache<String, SQLStatement> build(final String
databaseType,
+ final CacheOption
sqlStatementCacheOption, final CacheOption parseTreeCacheOption, final boolean
isParseComment) {
+ return
CacheBuilder.newBuilder().softValues().initialCapacity(sqlStatementCacheOption.getInitialCapacity()).maximumSize(sqlStatementCacheOption.getMaximumSize())
+
.concurrencyLevel(sqlStatementCacheOption.getConcurrencyLevel()).build(new
SQLStatementCacheLoader(databaseType, parseTreeCacheOption, isParseComment));
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-parser/src/main/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheLoader.java
b/shardingsphere-infra/shardingsphere-infra-parser/src/main/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheLoader.java
index 5987165..a161f50 100644
---
a/shardingsphere-infra/shardingsphere-infra-parser/src/main/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheLoader.java
+++
b/shardingsphere-infra/shardingsphere-infra-parser/src/main/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheLoader.java
@@ -19,7 +19,7 @@ package org.apache.shardingsphere.infra.parser.cache;
import com.google.common.cache.CacheLoader;
import org.apache.shardingsphere.infra.parser.sql.SQLStatementParserExecutor;
-import org.apache.shardingsphere.parser.rule.SQLParserRule;
+import org.apache.shardingsphere.sql.parser.api.CacheOption;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import javax.annotation.ParametersAreNonnullByDefault;
@@ -31,8 +31,8 @@ public final class SQLStatementCacheLoader extends
CacheLoader<String, SQLStatem
private final SQLStatementParserExecutor sqlStatementParserExecutor;
- public SQLStatementCacheLoader(final String databaseType, final
SQLParserRule sqlParserRule) {
- sqlStatementParserExecutor = new
SQLStatementParserExecutor(databaseType, sqlParserRule);
+ public SQLStatementCacheLoader(final String databaseType, final
CacheOption parseTreeCacheOption, final boolean isParseComment) {
+ sqlStatementParserExecutor = new
SQLStatementParserExecutor(databaseType, parseTreeCacheOption, isParseComment);
}
@ParametersAreNonnullByDefault
diff --git
a/shardingsphere-infra/shardingsphere-infra-parser/src/main/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserEngine.java
b/shardingsphere-infra/shardingsphere-infra-parser/src/main/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserEngine.java
index 33a7418..20221eb 100644
---
a/shardingsphere-infra/shardingsphere-infra-parser/src/main/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserEngine.java
+++
b/shardingsphere-infra/shardingsphere-infra-parser/src/main/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserEngine.java
@@ -19,7 +19,7 @@ package org.apache.shardingsphere.infra.parser.sql;
import com.google.common.cache.LoadingCache;
import org.apache.shardingsphere.infra.parser.cache.SQLStatementCacheBuilder;
-import org.apache.shardingsphere.parser.rule.SQLParserRule;
+import org.apache.shardingsphere.sql.parser.api.CacheOption;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
/**
@@ -31,9 +31,9 @@ public final class SQLStatementParserEngine {
private final LoadingCache<String, SQLStatement> sqlStatementCache;
- public SQLStatementParserEngine(final String databaseType, final
SQLParserRule sqlParserRule) {
- sqlStatementParserExecutor = new
SQLStatementParserExecutor(databaseType, sqlParserRule);
- sqlStatementCache = SQLStatementCacheBuilder.build(sqlParserRule,
databaseType);
+ public SQLStatementParserEngine(final String databaseType, final
CacheOption sqlStatementCacheOption, final CacheOption parseTreeCacheOption,
final boolean isParseComment) {
+ sqlStatementParserExecutor = new
SQLStatementParserExecutor(databaseType, parseTreeCacheOption, isParseComment);
+ sqlStatementCache = SQLStatementCacheBuilder.build(databaseType,
sqlStatementCacheOption, parseTreeCacheOption, isParseComment);
}
/**
diff --git
a/shardingsphere-infra/shardingsphere-infra-parser/src/main/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserEngineFactory.java
b/shardingsphere-infra/shardingsphere-infra-parser/src/main/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserEngineFactory.java
index ce5278b..4b80b04 100644
---
a/shardingsphere-infra/shardingsphere-infra-parser/src/main/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserEngineFactory.java
+++
b/shardingsphere-infra/shardingsphere-infra-parser/src/main/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserEngineFactory.java
@@ -19,7 +19,7 @@ package org.apache.shardingsphere.infra.parser.sql;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
-import org.apache.shardingsphere.parser.rule.SQLParserRule;
+import org.apache.shardingsphere.sql.parser.api.CacheOption;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@@ -36,13 +36,16 @@ public final class SQLStatementParserEngineFactory {
* Get SQL statement parser engine.
*
* @param databaseType name of database type
- * @param sqlParserRule sql parser rule
+ * @param sqlStatementCacheOption SQL statement cache option
+ * @param parseTreeCacheOption parse tree cache option
+ * @param isParseComment is parse comment
* @return SQL statement parser engine
*/
- public static SQLStatementParserEngine getSQLStatementParserEngine(final
String databaseType, final SQLParserRule sqlParserRule) {
+ public static SQLStatementParserEngine getSQLStatementParserEngine(final
String databaseType,
+ final
CacheOption sqlStatementCacheOption, final CacheOption parseTreeCacheOption,
final boolean isParseComment) {
SQLStatementParserEngine result = ENGINES.get(databaseType);
if (null == result) {
- result = ENGINES.computeIfAbsent(databaseType, key -> new
SQLStatementParserEngine(key, sqlParserRule));
+ result = ENGINES.computeIfAbsent(databaseType, key -> new
SQLStatementParserEngine(key, sqlStatementCacheOption, parseTreeCacheOption,
isParseComment));
}
return result;
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-parser/src/main/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserExecutor.java
b/shardingsphere-infra/shardingsphere-infra-parser/src/main/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserExecutor.java
index 3fae837..89a5ac2 100644
---
a/shardingsphere-infra/shardingsphere-infra-parser/src/main/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserExecutor.java
+++
b/shardingsphere-infra/shardingsphere-infra-parser/src/main/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserExecutor.java
@@ -17,7 +17,7 @@
package org.apache.shardingsphere.infra.parser.sql;
-import org.apache.shardingsphere.parser.rule.SQLParserRule;
+import org.apache.shardingsphere.sql.parser.api.CacheOption;
import org.apache.shardingsphere.sql.parser.api.SQLParserEngine;
import org.apache.shardingsphere.sql.parser.api.SQLVisitorEngine;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
@@ -33,9 +33,9 @@ public final class SQLStatementParserExecutor {
private final SQLVisitorEngine visitorEngine;
- public SQLStatementParserExecutor(final String databaseType, final
SQLParserRule sqlParserRule) {
- parserEngine = new SQLParserEngine(databaseType,
sqlParserRule.getParseTreeCache());
- visitorEngine = new SQLVisitorEngine(databaseType, "STATEMENT",
sqlParserRule.isSqlCommentParseEnabled(), new Properties());
+ public SQLStatementParserExecutor(final String databaseType, final
CacheOption parseTreeCacheOption, final boolean isParseComment) {
+ parserEngine = new SQLParserEngine(databaseType, parseTreeCacheOption);
+ visitorEngine = new SQLVisitorEngine(databaseType, "STATEMENT",
isParseComment, new Properties());
}
/**
diff --git
a/shardingsphere-infra/shardingsphere-infra-parser/src/test/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheBuilderTest.java
b/shardingsphere-infra/shardingsphere-infra-parser/src/test/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheBuilderTest.java
index 897d663..3ec9fc1 100644
---
a/shardingsphere-infra/shardingsphere-infra-parser/src/test/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheBuilderTest.java
+++
b/shardingsphere-infra/shardingsphere-infra-parser/src/test/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheBuilderTest.java
@@ -18,8 +18,7 @@
package org.apache.shardingsphere.infra.parser.cache;
import com.google.common.cache.LoadingCache;
-import org.apache.shardingsphere.parser.rule.SQLParserRule;
-import
org.apache.shardingsphere.parser.rule.builder.DefaultSQLParserRuleConfigurationBuilder;
+import org.apache.shardingsphere.sql.parser.api.CacheOption;
import org.junit.Test;
import static org.hamcrest.CoreMatchers.isA;
@@ -29,7 +28,6 @@ public final class SQLStatementCacheBuilderTest {
@Test
public void assertBuild() {
- SQLParserRule sqlParserRule = new SQLParserRule(new
DefaultSQLParserRuleConfigurationBuilder().build());
- assertThat(SQLStatementCacheBuilder.build(sqlParserRule, "MySQL"),
isA(LoadingCache.class));
+ assertThat(SQLStatementCacheBuilder.build("MySQL", new
CacheOption(2000, 65535L, 4), new CacheOption(128, 1024L, 4), false),
isA(LoadingCache.class));
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-parser/src/test/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheLoaderTest.java
b/shardingsphere-infra/shardingsphere-infra-parser/src/test/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheLoaderTest.java
index 898da99..05a9e48 100644
---
a/shardingsphere-infra/shardingsphere-infra-parser/src/test/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheLoaderTest.java
+++
b/shardingsphere-infra/shardingsphere-infra-parser/src/test/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheLoaderTest.java
@@ -19,8 +19,7 @@ package org.apache.shardingsphere.infra.parser.cache;
import lombok.SneakyThrows;
import org.apache.shardingsphere.infra.parser.sql.SQLStatementParserExecutor;
-import org.apache.shardingsphere.parser.rule.SQLParserRule;
-import
org.apache.shardingsphere.parser.rule.builder.DefaultSQLParserRuleConfigurationBuilder;
+import org.apache.shardingsphere.sql.parser.api.CacheOption;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import org.junit.Test;
@@ -38,8 +37,7 @@ public final class SQLStatementCacheLoaderTest {
@SneakyThrows
@Test
public void assertSQLStatementCacheLoad() {
- SQLParserRule parserRule = new SQLParserRule(new
DefaultSQLParserRuleConfigurationBuilder().build());
- SQLStatementCacheLoader sqlStatementCacheLoader = new
SQLStatementCacheLoader("MySQL", parserRule);
+ SQLStatementCacheLoader sqlStatementCacheLoader = new
SQLStatementCacheLoader("MySQL", new CacheOption(128, 1024L, 4), false);
Field sqlStatementParserExecutorField =
sqlStatementCacheLoader.getClass().getDeclaredField("sqlStatementParserExecutor");
SQLStatementParserExecutor executor =
mock(SQLStatementParserExecutor.class, RETURNS_DEEP_STUBS);
sqlStatementParserExecutorField.setAccessible(true);
diff --git
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
index 39414d0..16a1e75 100644
---
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
+++
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
@@ -17,6 +17,7 @@
package org.apache.shardingsphere.driver.jdbc.core.statement;
+import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
import lombok.AccessLevel;
import lombok.Getter;
@@ -173,8 +174,9 @@ public final class ShardingSpherePreparedStatement extends
AbstractPreparedState
statements = new ArrayList<>();
parameterSets = new ArrayList<>();
Optional<SQLParserRule> sqlParserRule =
metaDataContexts.getGlobalRuleMetaData().findSingleRule(SQLParserRule.class);
+ Preconditions.checkState(sqlParserRule.isPresent());
ShardingSphereSQLParserEngine sqlParserEngine = new
ShardingSphereSQLParserEngine(
-
DatabaseTypeRegistry.getTrunkDatabaseTypeName(metaDataContexts.getMetaData(connection.getSchema()).getResource().getDatabaseType()),
sqlParserRule.get());
+
DatabaseTypeRegistry.getTrunkDatabaseTypeName(metaDataContexts.getMetaData(connection.getSchema()).getResource().getDatabaseType()),
sqlParserRule.get().toParserConfiguration());
sqlStatement = sqlParserEngine.parse(sql, true);
sqlStatementContext =
SQLStatementContextFactory.newInstance(metaDataContexts.getMetaDataMap(),
sqlStatement, connection.getSchema());
parameterMetaData = new ShardingSphereParameterMetaData(sqlStatement);
diff --git
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
index e3092b6..f92e324 100644
---
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
+++
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
@@ -17,6 +17,7 @@
package org.apache.shardingsphere.driver.jdbc.core.statement;
+import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
import lombok.AccessLevel;
import lombok.Getter;
@@ -454,16 +455,18 @@ public final class ShardingSphereStatement extends
AbstractStatementAdapter {
}
private LogicSQL createLogicSQL(final String sql) {
+ SQLParserRule sqlParserRule = findSQLParserRule();
ShardingSphereSQLParserEngine sqlParserEngine = new
ShardingSphereSQLParserEngine(
-
DatabaseTypeRegistry.getTrunkDatabaseTypeName(metaDataContexts.getMetaData(connection.getSchema()).getResource().getDatabaseType()),
findSQLParserRule());
+
DatabaseTypeRegistry.getTrunkDatabaseTypeName(metaDataContexts.getMetaData(connection.getSchema()).getResource().getDatabaseType()),
sqlParserRule.toParserConfiguration());
SQLStatement sqlStatement = sqlParserEngine.parse(sql, false);
SQLStatementContext<?> sqlStatementContext =
SQLStatementContextFactory.newInstance(metaDataContexts.getMetaDataMap(),
sqlStatement, connection.getSchema());
return new LogicSQL(sqlStatementContext, sql, Collections.emptyList());
}
private SQLParserRule findSQLParserRule() {
- Optional<SQLParserRule> optionalSQLParserRule =
metaDataContexts.getGlobalRuleMetaData().findSingleRule(SQLParserRule.class);
- return optionalSQLParserRule.orElse(null);
+ Optional<SQLParserRule> result =
metaDataContexts.getGlobalRuleMetaData().findSingleRule(SQLParserRule.class);
+ Preconditions.checkState(result.isPresent());
+ return result.get();
}
private ExecutionContext createExecutionContext(final LogicSQL logicSQL)
throws SQLException {
diff --git
a/shardingsphere-kernel/shardingsphere-parser/shardingsphere-parser-core/pom.xml
b/shardingsphere-kernel/shardingsphere-parser/shardingsphere-parser-core/pom.xml
index b419af1..fc6b704 100644
---
a/shardingsphere-kernel/shardingsphere-parser/shardingsphere-parser-core/pom.xml
+++
b/shardingsphere-kernel/shardingsphere-parser/shardingsphere-parser-core/pom.xml
@@ -27,13 +27,17 @@
</parent>
<artifactId>shardingsphere-parser-core</artifactId>
<name>${project.artifactId}</name>
-
+
<dependencies>
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-parser-api</artifactId>
<version>${project.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.shardingsphere</groupId>
+ <artifactId>shardingsphere-infra-parser</artifactId>
+ <version>${project.version}</version>
+ </dependency>
</dependencies>
-
-</project>
\ No newline at end of file
+</project>
diff --git
a/shardingsphere-kernel/shardingsphere-parser/shardingsphere-parser-core/src/main/java/org/apache/shardingsphere/parser/rule/SQLParserRule.java
b/shardingsphere-kernel/shardingsphere-parser/shardingsphere-parser-core/src/main/java/org/apache/shardingsphere/parser/rule/SQLParserRule.java
index 5300332..6eeb973 100644
---
a/shardingsphere-kernel/shardingsphere-parser/shardingsphere-parser-core/src/main/java/org/apache/shardingsphere/parser/rule/SQLParserRule.java
+++
b/shardingsphere-kernel/shardingsphere-parser/shardingsphere-parser-core/src/main/java/org/apache/shardingsphere/parser/rule/SQLParserRule.java
@@ -18,6 +18,7 @@
package org.apache.shardingsphere.parser.rule;
import lombok.Getter;
+import org.apache.shardingsphere.infra.parser.ParserConfiguration;
import org.apache.shardingsphere.infra.rule.identifier.scope.GlobalRule;
import org.apache.shardingsphere.parser.config.SQLParserRuleConfiguration;
import org.apache.shardingsphere.sql.parser.api.CacheOption;
@@ -40,6 +41,15 @@ public final class SQLParserRule implements GlobalRule {
parseTreeCache = ruleConfig.getParseTreeCache();
}
+ /**
+ * Convert to parser configuration.
+ *
+ * @return parser configuration
+ */
+ public ParserConfiguration toParserConfiguration() {
+ return new ParserConfiguration(sqlStatementCache, parseTreeCache,
sqlCommentParseEnabled);
+ }
+
@Override
public String getType() {
return SQLParserRule.class.getSimpleName();
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/TextProtocolBackendHandlerFactory.java
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/TextProtocolBackendHandlerFactory.java
index 4b425ff..aea7107 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/TextProtocolBackendHandlerFactory.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/TextProtocolBackendHandlerFactory.java
@@ -17,6 +17,7 @@
package org.apache.shardingsphere.proxy.backend.text;
+import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
@@ -87,7 +88,8 @@ public final class TextProtocolBackendHandlerFactory {
}
SQLStatement sqlStatement = sqlStatementSupplier.get().orElseGet(() ->
{
Optional<SQLParserRule> sqlParserRule =
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getGlobalRuleMetaData().findSingleRule(SQLParserRule.class);
- return new
ShardingSphereSQLParserEngine(getBackendDatabaseType(databaseType,
connectionSession).getName(), sqlParserRule.orElse(null)).parse(sql, false);
+ Preconditions.checkState(sqlParserRule.isPresent());
+ return new
ShardingSphereSQLParserEngine(getBackendDatabaseType(databaseType,
connectionSession).getName(),
sqlParserRule.get().toParserConfiguration()).parse(sql, false);
});
databaseType.handleRollbackOnly(connectionSession.getTransactionStatus().isRollbackOnly(),
sqlStatement);
checkUnsupportedSQLStatement(sqlStatement);
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advanced/ParseDistSQLBackendHandler.java
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advanced/ParseDistSQLBackendHandler.java
index bdca492..ba816a0 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advanced/ParseDistSQLBackendHandler.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advanced/ParseDistSQLBackendHandler.java
@@ -17,6 +17,7 @@
package org.apache.shardingsphere.proxy.backend.text.distsql.ral.advanced;
+import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
import com.google.gson.Gson;
import
org.apache.shardingsphere.distsql.parser.statement.ral.advanced.ParseStatement;
@@ -64,9 +65,11 @@ public final class ParseDistSQLBackendHandler extends
QueryableRALBackendHandler
@Override
protected Collection<List<Object>> getRows(final ContextManager
contextManager) {
Optional<SQLParserRule> sqlParserRule =
contextManager.getMetaDataContexts().getGlobalRuleMetaData().findSingleRule(SQLParserRule.class);
+ Preconditions.checkState(sqlParserRule.isPresent());
SQLStatement parsedSqlStatement;
try {
- parsedSqlStatement = new
ShardingSphereSQLParserEngine(getBackendDatabaseType(databaseType,
connectionSession).getName(),
sqlParserRule.orElse(null)).parse(sqlStatement.getSql(), false);
+ parsedSqlStatement = new ShardingSphereSQLParserEngine(
+ getBackendDatabaseType(databaseType,
connectionSession).getName(),
sqlParserRule.get().toParserConfiguration()).parse(sqlStatement.getSql(),
false);
} catch (SQLParsingException ex) {
throw new SQLParsingException("You have a syntax error in your
parsed statement");
}
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advanced/PreviewDistSQLBackendHandler.java
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advanced/PreviewDistSQLBackendHandler.java
index 0b9a1da..87d8c2a 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advanced/PreviewDistSQLBackendHandler.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advanced/PreviewDistSQLBackendHandler.java
@@ -17,6 +17,7 @@
package org.apache.shardingsphere.proxy.backend.text.distsql.ral.advanced;
+import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
import
org.apache.shardingsphere.distsql.parser.statement.ral.advanced.PreviewStatement;
import org.apache.shardingsphere.infra.binder.LogicSQL;
@@ -101,7 +102,8 @@ public final class PreviewDistSQLBackendHandler extends
QueryableRALBackendHandl
String schemaName = getSchemaName();
String databaseType =
DatabaseTypeRegistry.getTrunkDatabaseTypeName(metaDataContexts.getMetaData(schemaName).getResource().getDatabaseType());
Optional<SQLParserRule> sqlParserRule =
metaDataContexts.getGlobalRuleMetaData().findSingleRule(SQLParserRule.class);
- SQLStatement previewedStatement = new
ShardingSphereSQLParserEngine(databaseType,
sqlParserRule.get()).parse(sqlStatement.getSql(), false);
+ Preconditions.checkState(sqlParserRule.isPresent());
+ SQLStatement previewedStatement = new
ShardingSphereSQLParserEngine(databaseType,
sqlParserRule.get().toParserConfiguration()).parse(sqlStatement.getSql(),
false);
SQLStatementContext<?> sqlStatementContext =
SQLStatementContextFactory.newInstance(metaDataContexts.getMetaDataMap(),
previewedStatement, schemaName);
// TODO optimize SQLStatementSchemaHolder
if (sqlStatementContext instanceof TableAvailable) {
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/information/SelectInformationExecutorTest.java
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/information/SelectInformationExecutorTest.java
index 1f042cc..37e9953 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/information/SelectInformationExecutorTest.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/information/SelectInformationExecutorTest.java
@@ -30,6 +30,7 @@ import
org.apache.shardingsphere.infra.metadata.resource.DataSourcesMetaData;
import
org.apache.shardingsphere.infra.metadata.resource.ShardingSphereResource;
import
org.apache.shardingsphere.infra.metadata.rule.ShardingSphereRuleMetaData;
import org.apache.shardingsphere.infra.metadata.user.Grantee;
+import org.apache.shardingsphere.infra.parser.ParserConfiguration;
import org.apache.shardingsphere.infra.parser.ShardingSphereSQLParserEngine;
import org.apache.shardingsphere.mode.manager.ContextManager;
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
@@ -77,7 +78,7 @@ public final class SelectInformationExecutorTest {
private static final ResultSet RESULT_SET =
mock(HikariProxyResultSet.class);
- private final SQLParserRule sqlParserRule = new SQLParserRule(new
DefaultSQLParserRuleConfigurationBuilder().build());
+ private final ParserConfiguration parserConfig = new SQLParserRule(new
DefaultSQLParserRuleConfigurationBuilder().build()).toParserConfiguration();
@Mock
private ConnectionSession connectionSession;
@@ -142,7 +143,7 @@ public final class SelectInformationExecutorTest {
@Test
public void assertSelectSchemataExecute() throws SQLException {
final String sql = "SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME,
DEFAULT_COLLATION_NAME FROM information_schema.SCHEMATA";
- final SQLStatement sqlStatement = new
ShardingSphereSQLParserEngine("MySQL", sqlParserRule).parse(sql, false);
+ final SQLStatement sqlStatement = new
ShardingSphereSQLParserEngine("MySQL", parserConfig).parse(sql, false);
Map<String, String> mockResultSetMap = new HashMap<>();
mockResultSetMap.put("SCHEMA_NAME", "demo_ds_0");
mockResultSetMap.put("DEFAULT_CHARACTER_SET_NAME",
"utf8mb4_0900_ai_ci");
@@ -173,7 +174,7 @@ public final class SelectInformationExecutorTest {
@Test
public void assertSelectSchemataInSchemaWithoutDataSourceExecute() throws
SQLException {
final String sql = "SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME,
DEFAULT_COLLATION_NAME, DEFAULT_ENCRYPTION FROM information_schema.SCHEMATA";
- final SQLStatement sqlStatement = new
ShardingSphereSQLParserEngine("MySQL", sqlParserRule).parse(sql, false);
+ final SQLStatement sqlStatement = new
ShardingSphereSQLParserEngine("MySQL", parserConfig).parse(sql, false);
Map<String, String> mockResultSetMap = new HashMap<>();
mockResultSetMap.put("SCHEMA_NAME", "demo_ds_0");
mockResultSetMap.put("DEFAULT_CHARACTER_SET_NAME",
"utf8mb4_0900_ai_ci");
@@ -196,7 +197,7 @@ public final class SelectInformationExecutorTest {
@Test
public void assertSelectSchemataInNoSchemaExecute() throws SQLException {
final String sql = "SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME,
DEFAULT_COLLATION_NAME, DEFAULT_ENCRYPTION FROM information_schema.SCHEMATA";
- final SQLStatement sqlStatement = new
ShardingSphereSQLParserEngine("MySQL", sqlParserRule).parse(sql, false);
+ final SQLStatement sqlStatement = new
ShardingSphereSQLParserEngine("MySQL", parserConfig).parse(sql, false);
SelectInformationSchemataExecutor selectSchemataExecutor = new
SelectInformationSchemataExecutor((SelectStatement) sqlStatement, sql);
selectSchemataExecutor.execute(connectionSession);
assertThat(selectSchemataExecutor.getQueryResultMetaData().getColumnCount(),
is(0));
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/postgresql/executor/SelectDatabaseExecutorTest.java
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/postgresql/executor/SelectDatabaseExecutorTest.java
index c0be3bb..2648cdd 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/postgresql/executor/SelectDatabaseExecutorTest.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/postgresql/executor/SelectDatabaseExecutorTest.java
@@ -27,6 +27,7 @@ import
org.apache.shardingsphere.infra.metadata.resource.CachedDatabaseMetaData;
import org.apache.shardingsphere.infra.metadata.resource.DataSourcesMetaData;
import
org.apache.shardingsphere.infra.metadata.resource.ShardingSphereResource;
import
org.apache.shardingsphere.infra.metadata.rule.ShardingSphereRuleMetaData;
+import org.apache.shardingsphere.infra.parser.ParserConfiguration;
import org.apache.shardingsphere.infra.parser.ShardingSphereSQLParserEngine;
import org.apache.shardingsphere.mode.manager.ContextManager;
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
@@ -67,7 +68,7 @@ public final class SelectDatabaseExecutorTest {
private static final ResultSet RESULT_SET =
mock(HikariProxyResultSet.class);
- private final SQLParserRule sqlParserRule = new SQLParserRule(new
DefaultSQLParserRuleConfigurationBuilder().build());
+ private final ParserConfiguration parserConfig = new SQLParserRule(new
DefaultSQLParserRuleConfigurationBuilder().build()).toParserConfiguration();
@Before
public void setUp() throws IllegalAccessException, NoSuchFieldException,
SQLException {
@@ -128,7 +129,7 @@ public final class SelectDatabaseExecutorTest {
final String sql = "SELECT d.oid, d.datname AS databasename, d.datacl,
d.datistemplate, d.datallowconn, pg_get_userbyid(d.datdba) AS databaseowner,"
+ " d.datcollate, d.datctype, shobj_description(d.oid,
'pg_database') AS description, d.datconnlimit, t.spcname, d.encoding,
pg_encoding_to_char(d.encoding) AS encodingname "
+ "FROM pg_database d LEFT JOIN pg_tablespace t ON
d.dattablespace = t.oid;";
- final SQLStatement sqlStatement = new
ShardingSphereSQLParserEngine("PostgreSQL", sqlParserRule).parse(sql, false);
+ final SQLStatement sqlStatement = new
ShardingSphereSQLParserEngine("PostgreSQL", parserConfig).parse(sql, false);
Map<String, String> mockResultSetMap = new HashMap<>();
mockResultSetMap.put("databasename", "demo_ds_0");
mockResultSetMap.put("databaseowner", "postgres");
@@ -162,7 +163,7 @@ public final class SelectDatabaseExecutorTest {
final String sql = "SELECT d.oid, d.datname AS databasename, d.datacl,
d.datistemplate, d.datallowconn, pg_get_userbyid(d.datdba) AS databaseowner, "
+ "d.datcollate, d.datctype, shobj_description(d.oid,
'pg_database') AS description, d.datconnlimit, t.spcname, d.encoding,
pg_encoding_to_char(d.encoding) AS encodingname "
+ "FROM pg_database d LEFT JOIN pg_tablespace t ON
d.dattablespace = t.oid;";
- final SQLStatement sqlStatement = new
ShardingSphereSQLParserEngine("PostgreSQL", sqlParserRule).parse(sql, false);
+ final SQLStatement sqlStatement = new
ShardingSphereSQLParserEngine("PostgreSQL", parserConfig).parse(sql, false);
Map<String, String> mockResultSetMap = new HashMap<>();
mockResultSetMap.put("databasename", "demo_ds_0");
mockResultSetMap.put("databaseowner", "postgres");
@@ -181,7 +182,7 @@ public final class SelectDatabaseExecutorTest {
@Test
public void
assertSelectSchemataWithoutDataSourceExecuteAndWithColumnProjectionSegment()
throws SQLException {
final String sql = "SELECT d.oid, d.datname AS databasename, d.datacl,
d.datistemplate FROM pg_database d LEFT JOIN pg_tablespace t ON d.dattablespace
= t.oid;";
- final SQLStatement sqlStatement = new
ShardingSphereSQLParserEngine("PostgreSQL", sqlParserRule).parse(sql, false);
+ final SQLStatement sqlStatement = new
ShardingSphereSQLParserEngine("PostgreSQL", parserConfig).parse(sql, false);
Map<String, String> mockResultSetMap = new HashMap<>();
mockResultSetMap.put("databasename", "demo_ds_0");
mockResultSetMap.put("databaseowner", "postgres");
@@ -203,7 +204,7 @@ public final class SelectDatabaseExecutorTest {
@Test
public void assertSelectSchemataInNoSchemaExecute() throws SQLException {
final String sql = "SELECT d.oid, d.datname AS databasename, d.datacl,
d.datistemplate FROM pg_database d LEFT JOIN pg_tablespace t ON d.dattablespace
= t.oid;";
- final SQLStatement sqlStatement = new
ShardingSphereSQLParserEngine("PostgreSQL", sqlParserRule).parse(sql, false);
+ final SQLStatement sqlStatement = new
ShardingSphereSQLParserEngine("PostgreSQL", parserConfig).parse(sql, false);
SelectDatabaseExecutor selectSchemataExecutor = new
SelectDatabaseExecutor((SelectStatement) sqlStatement, sql);
selectSchemataExecutor.execute(mock(ConnectionSession.class));
assertThat(selectSchemataExecutor.getQueryResultMetaData().getColumnCount(),
is(0));
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/data/impl/SchemaAssignedDatabaseBackendHandlerTest.java
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/data/impl/SchemaAssignedDatabaseBackendHandlerTest.java
index 8d27c93..5a50e53 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/data/impl/SchemaAssignedDatabaseBackendHandlerTest.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/data/impl/SchemaAssignedDatabaseBackendHandlerTest.java
@@ -87,7 +87,7 @@ public final class SchemaAssignedDatabaseBackendHandlerTest {
contextManagerField.set(ProxyContext.getInstance(), contextManager);
when(connectionSession.getSchemaName()).thenReturn(String.format(SCHEMA_PATTERN,
0));
mockDatabaseCommunicationEngine(new
UpdateResponseHeader(mock(SQLStatement.class)));
- SQLStatementContext sqlStatementContext =
mock(SQLStatementContext.class);
+ SQLStatementContext<?> sqlStatementContext =
mock(SQLStatementContext.class);
when(sqlStatementContext.getDatabaseType()).thenReturn(new
MySQLDatabaseType());
schemaAssignedDatabaseBackendHandler = new
SchemaAssignedDatabaseBackendHandler(sqlStatementContext, EXECUTE_SQL,
connectionSession);
setBackendHandlerFactory(schemaAssignedDatabaseBackendHandler);
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advance/ParseDistSQLBackendHandlerTest.java
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advance/ParseDistSQLBackendHandlerTest.java
index ddfcabd..2f5e854 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advance/ParseDistSQLBackendHandlerTest.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advance/ParseDistSQLBackendHandlerTest.java
@@ -68,7 +68,7 @@ public final class ParseDistSQLBackendHandlerTest {
.init(new
HandlerParameter<ParseStatement>().setStatement(parseStatement).setConnectionSession(mock(ConnectionSession.class)).setDatabaseType(new
MySQLDatabaseType()));
parseDistSQLBackendHandler.execute();
parseDistSQLBackendHandler.next();
- SQLStatement statement = new ShardingSphereSQLParserEngine("MySQL",
sqlParserRule).parse(sql, false);
+ SQLStatement statement = new ShardingSphereSQLParserEngine("MySQL",
sqlParserRule.toParserConfiguration()).parse(sql, false);
assertThat(new
LinkedList<>(parseDistSQLBackendHandler.getRowData()).getFirst(),
is("MySQLSelectStatement"));
assertThat(new
LinkedList<>(parseDistSQLBackendHandler.getRowData()).getLast(), is(new
Gson().toJson(statement)));
}
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutor.java
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutor.java
index 1e2fb32..e8ab3ec 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutor.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutor.java
@@ -17,6 +17,7 @@
package
org.apache.shardingsphere.proxy.frontend.mysql.command.query.binary.execute;
+import com.google.common.base.Preconditions;
import lombok.Getter;
import org.apache.shardingsphere.db.protocol.binary.BinaryCell;
import org.apache.shardingsphere.db.protocol.binary.BinaryRow;
@@ -82,8 +83,9 @@ public final class MySQLComStmtExecuteExecutor implements
QueryCommandExecutor {
String schemaName = connectionSession.getSchemaName();
MetaDataContexts metaDataContexts =
ProxyContext.getInstance().getContextManager().getMetaDataContexts();
Optional<SQLParserRule> sqlParserRule =
metaDataContexts.getGlobalRuleMetaData().findSingleRule(SQLParserRule.class);
+ Preconditions.checkState(sqlParserRule.isPresent());
ShardingSphereSQLParserEngine sqlStatementParserEngine = new
ShardingSphereSQLParserEngine(DatabaseTypeRegistry.getTrunkDatabaseTypeName(
-
metaDataContexts.getMetaData(schemaName).getResource().getDatabaseType()),
sqlParserRule.orElse(null));
+
metaDataContexts.getMetaData(schemaName).getResource().getDatabaseType()),
sqlParserRule.get().toParserConfiguration());
SQLStatement sqlStatement =
sqlStatementParserEngine.parse(packet.getSql(), true);
SQLStatementContext<?> sqlStatementContext =
SQLStatementContextFactory.newInstance(metaDataContexts.getMetaDataMap(),
packet.getParameters(),
sqlStatement, connectionSession.getDefaultSchemaName());
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareExecutor.java
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareExecutor.java
index eb4c9a3..5d4dc55 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareExecutor.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareExecutor.java
@@ -17,6 +17,7 @@
package
org.apache.shardingsphere.proxy.frontend.mysql.command.query.binary.prepare;
+import com.google.common.base.Preconditions;
import
org.apache.shardingsphere.db.protocol.mysql.constant.MySQLBinaryColumnType;
import org.apache.shardingsphere.db.protocol.mysql.constant.MySQLConstants;
import
org.apache.shardingsphere.db.protocol.mysql.packet.command.query.MySQLColumnDefinition41Packet;
@@ -42,6 +43,7 @@ import
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectState
import java.util.Collection;
import java.util.LinkedList;
import java.util.Map;
+import java.util.Optional;
/**
* COM_STMT_PREPARE command executor for MySQL.
@@ -65,9 +67,10 @@ public final class MySQLComStmtPrepareExecutor implements
CommandExecutor {
@Override
public Collection<DatabasePacket<?>> execute() {
MetaDataContexts metaDataContexts =
ProxyContext.getInstance().getContextManager().getMetaDataContexts();
+ Optional<SQLParserRule> sqlParserRule =
metaDataContexts.getGlobalRuleMetaData().findSingleRule(SQLParserRule.class);
+ Preconditions.checkState(sqlParserRule.isPresent());
ShardingSphereSQLParserEngine sqlStatementParserEngine = new
ShardingSphereSQLParserEngine(DatabaseTypeRegistry.getTrunkDatabaseTypeName(
-
metaDataContexts.getMetaData(connectionSession.getSchemaName()).getResource().getDatabaseType()),
-
metaDataContexts.getGlobalRuleMetaData().findSingleRule(SQLParserRule.class).orElse(null));
+
metaDataContexts.getMetaData(connectionSession.getSchemaName()).getResource().getDatabaseType()),
sqlParserRule.get().toParserConfiguration());
SQLStatement sqlStatement =
sqlStatementParserEngine.parse(packet.getSql(), true);
if (!MySQLComStmtPrepareChecker.isStatementAllowed(sqlStatement)) {
throw new UnsupportedPreparedStatementException();
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/fieldlist/MySQLComFieldListPacketExecutor.java
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/fieldlist/MySQLComFieldListPacketExecutor.java
index 1e52875..90540db 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/fieldlist/MySQLComFieldListPacketExecutor.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/fieldlist/MySQLComFieldListPacketExecutor.java
@@ -17,6 +17,7 @@
package
org.apache.shardingsphere.proxy.frontend.mysql.command.query.text.fieldlist;
+import com.google.common.base.Preconditions;
import
org.apache.shardingsphere.db.protocol.mysql.constant.MySQLBinaryColumnType;
import org.apache.shardingsphere.db.protocol.mysql.constant.MySQLConstants;
import
org.apache.shardingsphere.db.protocol.mysql.packet.command.query.MySQLColumnDefinition41Packet;
@@ -65,8 +66,9 @@ public final class MySQLComFieldListPacketExecutor implements
CommandExecutor {
String sql = String.format(SQL, packet.getTable(), schemaName);
MetaDataContexts metaDataContexts =
ProxyContext.getInstance().getContextManager().getMetaDataContexts();
Optional<SQLParserRule> sqlParserRule =
metaDataContexts.getGlobalRuleMetaData().findSingleRule(SQLParserRule.class);
+ Preconditions.checkState(sqlParserRule.isPresent());
ShardingSphereSQLParserEngine sqlStatementParserEngine = new
ShardingSphereSQLParserEngine(
-
DatabaseTypeRegistry.getTrunkDatabaseTypeName(metaDataContexts.getMetaData(schemaName).getResource().getDatabaseType()),
sqlParserRule.orElse(null));
+
DatabaseTypeRegistry.getTrunkDatabaseTypeName(metaDataContexts.getMetaData(schemaName).getResource().getDatabaseType()),
sqlParserRule.get().toParserConfiguration());
SQLStatement sqlStatement = sqlStatementParserEngine.parse(sql, false);
SQLStatementContext<?> sqlStatementContext =
SQLStatementContextFactory.newInstance(metaDataContexts.getMetaDataMap(),
sqlStatement, schemaName);
JDBCBackendConnection backendConnection = (JDBCBackendConnection)
connectionSession.getBackendConnection();
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-opengauss/src/test/java/org/apache/shardingsphere/proxy/frontend/opengauss/command/query/extended/bind/OpenGaussComBatchBindExecutorTest.java
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-opengauss/src/test/java/org/apache/shardingsphere/proxy/frontend/opengauss/command/query/extended/bind/OpenGaussComBatchBindExecutorTest.java
index 961585e..9f1caa5 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-opengauss/src/test/java/org/apache/shardingsphere/proxy/frontend/opengauss/command/query/extended/bind/OpenGaussComBatchBindExecutorTest.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-opengauss/src/test/java/org/apache/shardingsphere/proxy/frontend/opengauss/command/query/extended/bind/OpenGaussComBatchBindExecutorTest.java
@@ -26,14 +26,14 @@ import
org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
import org.apache.shardingsphere.infra.executor.sql.context.ExecutionUnit;
import
org.apache.shardingsphere.infra.executor.sql.execute.engine.ConnectionMode;
import
org.apache.shardingsphere.infra.executor.sql.prepare.driver.jdbc.StatementOption;
+import org.apache.shardingsphere.infra.parser.ParserConfiguration;
import org.apache.shardingsphere.infra.parser.ShardingSphereSQLParserEngine;
import org.apache.shardingsphere.mode.manager.ContextManager;
-import org.apache.shardingsphere.parser.rule.SQLParserRule;
-import
org.apache.shardingsphere.parser.rule.builder.DefaultSQLParserRuleConfigurationBuilder;
import
org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.JDBCBackendConnection;
import
org.apache.shardingsphere.proxy.backend.communication.jdbc.statement.JDBCBackendStatement;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
+import org.apache.shardingsphere.sql.parser.api.CacheOption;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import org.junit.After;
import org.junit.Before;
@@ -59,7 +59,8 @@ import static org.mockito.Mockito.when;
public final class OpenGaussComBatchBindExecutorTest {
- private static final ShardingSphereSQLParserEngine SQL_PARSER_ENGINE = new
ShardingSphereSQLParserEngine("openGauss", new SQLParserRule(new
DefaultSQLParserRuleConfigurationBuilder().build()));
+ private static final ShardingSphereSQLParserEngine SQL_PARSER_ENGINE = new
ShardingSphereSQLParserEngine("openGauss",
+ new ParserConfiguration(new CacheOption(2000, 65535L, 4), new
CacheOption(128, 1024L, 4), false));
private ContextManager contextManagerBefore;
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/parse/PostgreSQLComParseExecutor.java
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/parse/PostgreSQLComParseExecutor.java
index 2386db8..e37bba6 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/parse/PostgreSQLComParseExecutor.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/parse/PostgreSQLComParseExecutor.java
@@ -17,6 +17,7 @@
package
org.apache.shardingsphere.proxy.frontend.postgresql.command.query.extended.parse;
+import com.google.common.base.Preconditions;
import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.db.protocol.packet.DatabasePacket;
import
org.apache.shardingsphere.db.protocol.postgresql.packet.command.query.extended.PostgreSQLColumnType;
@@ -42,6 +43,7 @@ import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
+import java.util.Optional;
/**
* PostgreSQL command parse executor.
@@ -69,8 +71,10 @@ public final class PostgreSQLComParseExecutor implements
CommandExecutor {
private ShardingSphereSQLParserEngine
createShardingSphereSQLParserEngine(final String schemaName) {
MetaDataContexts metaDataContexts =
ProxyContext.getInstance().getContextManager().getMetaDataContexts();
- return new
ShardingSphereSQLParserEngine(DatabaseTypeRegistry.getTrunkDatabaseTypeName(metaDataContexts.getMetaData(schemaName).getResource().getDatabaseType()),
-
metaDataContexts.getGlobalRuleMetaData().findSingleRule(SQLParserRule.class).orElse(null));
+ Optional<SQLParserRule> sqlParserRule =
metaDataContexts.getGlobalRuleMetaData().findSingleRule(SQLParserRule.class);
+ Preconditions.checkState(sqlParserRule.isPresent());
+ return new ShardingSphereSQLParserEngine(
+
DatabaseTypeRegistry.getTrunkDatabaseTypeName(metaDataContexts.getMetaData(schemaName).getResource().getDatabaseType()),
sqlParserRule.get().toParserConfiguration());
}
private String convertSQLToJDBCStyle(final SQLStatement sqlStatement,
final String sql) {
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLAggregatedBatchedStatementsCommandExecutorTest.java
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLAggregatedBatchedStatementsCommandExecutorTest.java
index 4ddfdee..11b84f8 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLAggregatedBatchedStatementsCommandExecutorTest.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLAggregatedBatchedStatementsCommandExecutorTest.java
@@ -31,14 +31,14 @@ import
org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
import org.apache.shardingsphere.infra.executor.sql.context.ExecutionUnit;
import
org.apache.shardingsphere.infra.executor.sql.execute.engine.ConnectionMode;
import
org.apache.shardingsphere.infra.executor.sql.prepare.driver.jdbc.StatementOption;
+import org.apache.shardingsphere.infra.parser.ParserConfiguration;
import org.apache.shardingsphere.infra.parser.ShardingSphereSQLParserEngine;
import org.apache.shardingsphere.mode.manager.ContextManager;
-import org.apache.shardingsphere.parser.rule.SQLParserRule;
-import
org.apache.shardingsphere.parser.rule.builder.DefaultSQLParserRuleConfigurationBuilder;
import
org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.JDBCBackendConnection;
import
org.apache.shardingsphere.proxy.backend.communication.jdbc.statement.JDBCBackendStatement;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
+import org.apache.shardingsphere.sql.parser.api.CacheOption;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -62,7 +62,8 @@ import static org.mockito.Mockito.when;
public final class PostgreSQLAggregatedBatchedStatementsCommandExecutorTest {
- private static final ShardingSphereSQLParserEngine SQL_PARSER_ENGINE = new
ShardingSphereSQLParserEngine("PostgreSQL", new SQLParserRule(new
DefaultSQLParserRuleConfigurationBuilder().build()));
+ private static final ShardingSphereSQLParserEngine SQL_PARSER_ENGINE = new
ShardingSphereSQLParserEngine("PostgreSQL",
+ new ParserConfiguration(new CacheOption(2000, 65535L, 4), new
CacheOption(128, 1024L, 4), false));
private static final int CONNECTION_ID = 1;
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/describe/PostgreSQLComDescribeExecutorTest.java
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/describe/PostgreSQLComDescribeExecutorTest.java
index 308d96d..43e49d6 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/describe/PostgreSQLComDescribeExecutorTest.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/describe/PostgreSQLComDescribeExecutorTest.java
@@ -31,15 +31,15 @@ import
org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
import
org.apache.shardingsphere.infra.executor.sql.execute.engine.ConnectionMode;
import org.apache.shardingsphere.infra.metadata.schema.model.ColumnMetaData;
import org.apache.shardingsphere.infra.metadata.schema.model.TableMetaData;
+import org.apache.shardingsphere.infra.parser.ParserConfiguration;
import org.apache.shardingsphere.infra.parser.ShardingSphereSQLParserEngine;
import org.apache.shardingsphere.mode.manager.ContextManager;
-import org.apache.shardingsphere.parser.rule.SQLParserRule;
-import
org.apache.shardingsphere.parser.rule.builder.DefaultSQLParserRuleConfigurationBuilder;
import
org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.JDBCBackendConnection;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
import
org.apache.shardingsphere.proxy.frontend.postgresql.command.PostgreSQLConnectionContext;
import
org.apache.shardingsphere.proxy.frontend.postgresql.command.query.extended.Portal;
+import org.apache.shardingsphere.sql.parser.api.CacheOption;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import org.junit.After;
import org.junit.Before;
@@ -82,7 +82,8 @@ public final class PostgreSQLComDescribeExecutorTest {
private static final String TABLE_NAME = "t_order";
- private static final ShardingSphereSQLParserEngine SQL_PARSER_ENGINE = new
ShardingSphereSQLParserEngine("PostgreSQL", new SQLParserRule(new
DefaultSQLParserRuleConfigurationBuilder().build()));
+ private static final ShardingSphereSQLParserEngine SQL_PARSER_ENGINE = new
ShardingSphereSQLParserEngine("PostgreSQL",
+ new ParserConfiguration(new CacheOption(2000, 65535L, 4), new
CacheOption(128, 1024L, 4), false));
private ContextManager contextManagerBefore;
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-reactive-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/reactive/mysql/command/query/binary/execute/ReactiveMySQLComStmtExecuteExecutor.java
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-reactive-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/reactive/mysql/command/query/binary/execute/ReactiveMySQLComStmtExecuteExecutor.java
index 3236aff..d8d392a 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-reactive-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/reactive/mysql/command/query/binary/execute/ReactiveMySQLComStmtExecuteExecutor.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-reactive-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/reactive/mysql/command/query/binary/execute/ReactiveMySQLComStmtExecuteExecutor.java
@@ -17,6 +17,7 @@
package
org.apache.shardingsphere.proxy.frontend.reactive.mysql.command.query.binary.execute;
+import com.google.common.base.Preconditions;
import io.vertx.core.Future;
import lombok.Getter;
import org.apache.shardingsphere.db.protocol.binary.BinaryCell;
@@ -83,8 +84,9 @@ public final class ReactiveMySQLComStmtExecuteExecutor
implements ReactiveComman
String schemaName = connectionSession.getSchemaName();
MetaDataContexts metaDataContexts =
ProxyContext.getInstance().getContextManager().getMetaDataContexts();
Optional<SQLParserRule> sqlParserRule =
metaDataContexts.getGlobalRuleMetaData().findSingleRule(SQLParserRule.class);
- ShardingSphereSQLParserEngine sqlStatementParserEngine = new
ShardingSphereSQLParserEngine(DatabaseTypeRegistry.getTrunkDatabaseTypeName(
-
metaDataContexts.getMetaData(schemaName).getResource().getDatabaseType()),
sqlParserRule.orElse(null));
+ Preconditions.checkState(sqlParserRule.isPresent());
+ ShardingSphereSQLParserEngine sqlStatementParserEngine = new
ShardingSphereSQLParserEngine(
+
DatabaseTypeRegistry.getTrunkDatabaseTypeName(metaDataContexts.getMetaData(schemaName).getResource().getDatabaseType()),
sqlParserRule.get().toParserConfiguration());
SQLStatement sqlStatement =
sqlStatementParserEngine.parse(packet.getSql(), true);
SQLStatementContext<?> sqlStatementContext =
SQLStatementContextFactory.newInstance(metaDataContexts.getMetaDataMap(),
packet.getParameters(),
sqlStatement, connectionSession.getDefaultSchemaName());
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-reactive-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/reactive/mysql/command/query/text/fieldlist/ReactiveMySQLComFieldListPacketExecutor.java
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-reactive-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/reactive/mysql/command/query/text/fieldlist/ReactiveMySQLComFieldListPacketExecutor.java
index db17d16..605f60f 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-reactive-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/reactive/mysql/command/query/text/fieldlist/ReactiveMySQLComFieldListPacketExecutor.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-reactive-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/reactive/mysql/command/query/text/fieldlist/ReactiveMySQLComFieldListPacketExecutor.java
@@ -17,6 +17,7 @@
package
org.apache.shardingsphere.proxy.frontend.reactive.mysql.command.query.text.fieldlist;
+import com.google.common.base.Preconditions;
import io.vertx.core.Future;
import
org.apache.shardingsphere.db.protocol.mysql.constant.MySQLBinaryColumnType;
import org.apache.shardingsphere.db.protocol.mysql.constant.MySQLConstants;
@@ -65,8 +66,9 @@ public final class ReactiveMySQLComFieldListPacketExecutor
implements ReactiveCo
String sql = String.format(SQL, packet.getTable(), schemaName);
MetaDataContexts metaDataContexts =
ProxyContext.getInstance().getContextManager().getMetaDataContexts();
Optional<SQLParserRule> sqlParserRule =
metaDataContexts.getGlobalRuleMetaData().findSingleRule(SQLParserRule.class);
+ Preconditions.checkState(sqlParserRule.isPresent());
ShardingSphereSQLParserEngine sqlStatementParserEngine = new
ShardingSphereSQLParserEngine(
-
DatabaseTypeRegistry.getTrunkDatabaseTypeName(metaDataContexts.getMetaData(schemaName).getResource().getDatabaseType()),
sqlParserRule.orElse(null));
+
DatabaseTypeRegistry.getTrunkDatabaseTypeName(metaDataContexts.getMetaData(schemaName).getResource().getDatabaseType()),
sqlParserRule.get().toParserConfiguration());
SQLStatement sqlStatement = sqlStatementParserEngine.parse(sql, false);
SQLStatementContext<?> sqlStatementContext =
SQLStatementContextFactory.newInstance(metaDataContexts.getMetaDataMap(),
sqlStatement, schemaName);
databaseCommunicationEngine =
DatabaseCommunicationEngineFactory.getInstance().newTextProtocolInstance(sqlStatementContext,
sql, connectionSession.getBackendConnection());
diff --git
a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/visitor/SQLVisitorFactory.java
b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/visitor/SQLVisitorFactory.java
index 4939e72..bd37652 100644
---
a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/visitor/SQLVisitorFactory.java
+++
b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/visitor/SQLVisitorFactory.java
@@ -53,17 +53,17 @@ public final class SQLVisitorFactory {
private static <T> ParseTreeVisitor<T> createParseTreeVisitor(final
SQLVisitorFacade visitorFacade, final SQLStatementType type, final Properties
props) {
switch (type) {
case DML:
- return (ParseTreeVisitor)
visitorFacade.getDMLVisitorClass().getConstructor(Properties.class).newInstance(props);
+ return (ParseTreeVisitor<T>)
visitorFacade.getDMLVisitorClass().getConstructor(Properties.class).newInstance(props);
case DDL:
- return (ParseTreeVisitor)
visitorFacade.getDDLVisitorClass().getConstructor(Properties.class).newInstance(props);
+ return (ParseTreeVisitor<T>)
visitorFacade.getDDLVisitorClass().getConstructor(Properties.class).newInstance(props);
case TCL:
- return (ParseTreeVisitor)
visitorFacade.getTCLVisitorClass().getConstructor(Properties.class).newInstance(props);
+ return (ParseTreeVisitor<T>)
visitorFacade.getTCLVisitorClass().getConstructor(Properties.class).newInstance(props);
case DCL:
- return (ParseTreeVisitor)
visitorFacade.getDCLVisitorClass().getConstructor(Properties.class).newInstance(props);
+ return (ParseTreeVisitor<T>)
visitorFacade.getDCLVisitorClass().getConstructor(Properties.class).newInstance(props);
case DAL:
- return (ParseTreeVisitor)
visitorFacade.getDALVisitorClass().getConstructor(Properties.class).newInstance(props);
+ return (ParseTreeVisitor<T>)
visitorFacade.getDALVisitorClass().getConstructor(Properties.class).newInstance(props);
case RL:
- return (ParseTreeVisitor)
visitorFacade.getRLVisitorClass().getConstructor(Properties.class).newInstance(props);
+ return (ParseTreeVisitor<T>)
visitorFacade.getRLVisitorClass().getConstructor(Properties.class).newInstance(props);
default:
throw new SQLParsingException("Can not support SQL statement
type: `%s`", type);
}
diff --git
a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/visitor/SQLVisitorRule.java
b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/visitor/SQLVisitorRule.java
index 5f11a6d..f3c107f 100644
---
a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/visitor/SQLVisitorRule.java
+++
b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/visitor/SQLVisitorRule.java
@@ -77,9 +77,9 @@ public enum SQLVisitorRule {
CREATE_PROCEDURE("CreateProcedure", SQLStatementType.DDL),
ALTER_PROCEDURE("AlterProcedure", SQLStatementType.DDL),
-
+
ALTER_STATEMENT("AlterStatement", SQLStatementType.DDL),
-
+
DROP_PROCEDURE("DropProcedure", SQLStatementType.DDL),
CREATE_FUNCTION("CreateFunction", SQLStatementType.DDL),
@@ -89,7 +89,7 @@ public enum SQLVisitorRule {
DROP_FUNCTION("DropFunction", SQLStatementType.DDL),
CREATE_DATABASE("CreateDatabase", SQLStatementType.DDL),
-
+
CREATE_DATABASE_LINK("CreateDatabaseLink", SQLStatementType.DDL),
ALTER_DATABASE("AlterDatabase", SQLStatementType.DDL),
@@ -99,9 +99,9 @@ public enum SQLVisitorRule {
DROP_DATABASE_LINK("DropDatabaseLink", SQLStatementType.DDL),
CREATE_DIMENSION("CreateDimension", SQLStatementType.DDL),
-
+
ALTER_DIMENSION("AlterDimension", SQLStatementType.DDL),
-
+
DROP_DIMENSION("DropDimension", SQLStatementType.DDL),
CREATE_EVENT("CreateEvent", SQLStatementType.DDL),
@@ -129,7 +129,7 @@ public enum SQLVisitorRule {
DROP_SERVER("DropServer", SQLStatementType.DDL),
CREATE_TRIGGER("CreateTrigger", SQLStatementType.DDL),
-
+
ALTER_TRIGGER("AlterTrigger", SQLStatementType.DDL),
DROP_TRIGGER("DropTrigger", SQLStatementType.DDL),
@@ -139,13 +139,13 @@ public enum SQLVisitorRule {
ALTER_VIEW("AlterView", SQLStatementType.DDL),
DROP_VIEW("DropView", SQLStatementType.DDL),
-
+
ANALYZE("Analyze", SQLStatementType.DDL),
-
+
CREATE_SEQUENCE("CreateSequence", SQLStatementType.DDL),
-
+
ALTER_SEQUENCE("AlterSequence", SQLStatementType.DDL),
-
+
DROP_SEQUENCE("DropSequence", SQLStatementType.DDL),
ALTER_SYNONYM("AlterSynonym", SQLStatementType.DDL),
@@ -169,15 +169,15 @@ public enum SQLVisitorRule {
AUDIT("Audit", SQLStatementType.DDL),
NOAUDIT("NoAudit", SQLStatementType.DDL),
-
+
COMMENT("Comment", SQLStatementType.DDL),
-
+
FLASHBACK_DATABASE("FlashbackDatabase", SQLStatementType.DDL),
-
+
FLASHBACK_TABLE("FlashbackTable", SQLStatementType.DDL),
PURGE("Purge", SQLStatementType.DDL),
-
+
RENAME("Rename", SQLStatementType.DDL),
CREATE_EXTENSION("CreateExtension", SQLStatementType.DDL),
@@ -271,7 +271,7 @@ public enum SQLVisitorRule {
USE("Use", SQLStatementType.DAL),
DESC("Desc", SQLStatementType.DAL),
-
+
HELP("Help", SQLStatementType.DAL),
EXPLAIN("Explain", SQLStatementType.DAL),
@@ -309,15 +309,15 @@ public enum SQLVisitorRule {
SHOW_STATUS("ShowStatus", SQLStatementType.DAL),
SHOW("Show", SQLStatementType.DAL),
-
+
SHOW_RELAYLOG_EVENTS("ShowRelaylogEventsStatement", SQLStatementType.DAL),
-
+
SHOW_PROCEDURE_CODE("ShowProcedureCodeStatement", SQLStatementType.DAL),
SHOW_OPEN_TABLES("ShowOpenTables", SQLStatementType.DAL),
-
+
SHOW_TRIGGERS("ShowTriggers", SQLStatementType.DAL),
-
+
SET_VARIABLE("SetVariable", SQLStatementType.DAL),
SET("Set", SQLStatementType.DAL),
@@ -341,11 +341,11 @@ public enum SQLVisitorRule {
UNINSTALL("Uninstall", SQLStatementType.DAL),
FLUSH("Flush", SQLStatementType.DAL),
-
+
RESTART("Restart", SQLStatementType.DAL),
SHUTDOWN("Shutdown", SQLStatementType.DAL),
-
+
CREATE_RESOURCE_GROUP("CreateResourceGroup", SQLStatementType.DAL),
SET_RESOURCE_GROUP("SetResourceGroup", SQLStatementType.DAL),
@@ -353,7 +353,7 @@ public enum SQLVisitorRule {
BINLOG("Binlog", SQLStatementType.DAL),
OPTIMIZE_TABLE("OptimizeTable", SQLStatementType.DAL),
-
+
CLONE("Clone", SQLStatementType.DAL),
REPAIR_TABLE("RepairTable", SQLStatementType.DAL),
@@ -361,9 +361,9 @@ public enum SQLVisitorRule {
KILL("Kill", SQLStatementType.DAL),
RESET("ResetStatement", SQLStatementType.DAL),
-
+
RESET_PERSIST("ResetPersistStatement", SQLStatementType.DAL),
-
+
CACHE_INDEX("CacheIndex", SQLStatementType.DAL),
LOAD_INDEX_INFO("LoadIndexInfo", SQLStatementType.DAL),
@@ -385,21 +385,21 @@ public enum SQLVisitorRule {
START_SLAVE("StartSlave", SQLStatementType.RL),
STOP_SLAVE("StopSlave", SQLStatementType.RL),
-
+
XA("Xa", SQLStatementType.TCL),
ABORT("Abort", SQLStatementType.TCL),
-
+
CREATE_SCHEMA("CreateSchema", SQLStatementType.DDL),
-
+
ALTER_SCHEMA("AlterSchema", SQLStatementType.DDL),
-
+
DROP_SCHEMA("DropSchema", SQLStatementType.DDL),
-
+
CREATE_SERVICE("CreateService", SQLStatementType.DDL),
-
+
ALTER_SERVICE("AlterService", SQLStatementType.DDL),
-
+
DROP_SERVICE("DropService", SQLStatementType.DDL),
DROP_DOMAIN("DropDomain", SQLStatementType.DDL),
@@ -431,13 +431,13 @@ public enum SQLVisitorRule {
ALTER_TEXT_SEARCH_TEMPLATE("AlterTextSearchTemplate",
SQLStatementType.DDL),
ALTER_TEXT_SEARCH_PARSER("AlterTextSearchParser", SQLStatementType.DDL),
-
+
DROP_POLICY("DropPolicy", SQLStatementType.DDL),
-
+
DROP_OWNED("DropOwned", SQLStatementType.DDL),
DROP_OPERATOR("DropOperator", SQLStatementType.DDL);
-
+
private final String name;
@Getter
diff --git
a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/AbstractSQLStatement.java
b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/AbstractSQLStatement.java
index 05c4a9d..2f34c0e 100644
---
a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/AbstractSQLStatement.java
+++
b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/AbstractSQLStatement.java
@@ -29,12 +29,12 @@ import java.util.LinkedList;
* SQL statement abstract class.
*/
@Getter
-@Setter
public abstract class AbstractSQLStatement implements SQLStatement {
+ @Setter
private int parameterCount;
- private Collection<ParameterMarkerSegment> parameterMarkerSegments = new
LinkedList<>();
+ private final Collection<ParameterMarkerSegment> parameterMarkerSegments =
new LinkedList<>();
- private Collection<CommentSegment> commentSegments = new LinkedList<>();
+ private final Collection<CommentSegment> commentSegments = new
LinkedList<>();
}
diff --git
a/shardingsphere-test/shardingsphere-rewrite-test/src/test/java/org/apache/shardingsphere/sharding/rewrite/parameterized/engine/AbstractSQLRewriterParameterizedTest.java
b/shardingsphere-test/shardingsphere-rewrite-test/src/test/java/org/apache/shardingsphere/sharding/rewrite/parameterized/engine/AbstractSQLRewriterParameterizedTest.java
index 491c3e4..8262524 100644
---
a/shardingsphere-test/shardingsphere-rewrite-test/src/test/java/org/apache/shardingsphere/sharding/rewrite/parameterized/engine/AbstractSQLRewriterParameterizedTest.java
+++
b/shardingsphere-test/shardingsphere-rewrite-test/src/test/java/org/apache/shardingsphere/sharding/rewrite/parameterized/engine/AbstractSQLRewriterParameterizedTest.java
@@ -99,7 +99,8 @@ public abstract class AbstractSQLRewriterParameterizedTest {
Collection<ShardingSphereRule> rules =
SchemaRulesBuilder.buildRules("schema_name", schemaConfig, new
ConfigurationProperties(new Properties()));
mockRules(rules);
rules.add(sqlParserRule);
- SQLStatementParserEngine sqlStatementParserEngine = new
SQLStatementParserEngine(databaseType, sqlParserRule);
+ SQLStatementParserEngine sqlStatementParserEngine = new
SQLStatementParserEngine(databaseType,
+ sqlParserRule.getSqlStatementCache(),
sqlParserRule.getParseTreeCache(), sqlParserRule.isSqlCommentParseEnabled());
Map<String, ShardingSphereSchema> schemas = mockSchemas();
ShardingSphereResource resource = mock(ShardingSphereResource.class);
when(resource.getDatabaseType()).thenReturn(new MySQLDatabaseType());