This is an automated email from the ASF dual-hosted git repository.
panjuan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new 40a98504dd7 Use DatabaseType on ShardingSphereSQLParserEngine (#27324)
40a98504dd7 is described below
commit 40a98504dd791ea2d3163e145b929f9d78ae8ceb
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Jul 20 15:04:54 2023 +0800
Use DatabaseType on ShardingSphereSQLParserEngine (#27324)
---
.../infra/parser/ShardingSphereSQLParserEngine.java | 6 +++---
.../infra/parser/sql/SQLStatementParserEngineFactory.java | 13 +++++++------
.../parser/sql/SQLStatementParserEngineFactoryTest.java | 12 ++++++++----
.../apache/shardingsphere/parser/rule/SQLParserRule.java | 2 +-
.../MySQLComStmtPrepareParameterMarkerExtractorTest.java | 4 +++-
.../extended/bind/OpenGaussComBatchBindExecutorTest.java | 4 +++-
...reSQLAggregatedBatchedStatementsCommandExecutorTest.java | 4 +++-
.../describe/PostgreSQLComDescribeExecutorTest.java | 5 ++++-
8 files changed, 32 insertions(+), 18 deletions(-)
diff --git
a/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/ShardingSphereSQLParserEngine.java
b/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/ShardingSphereSQLParserEngine.java
index 4f43649bd7e..cef2ad75290 100644
---
a/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/ShardingSphereSQLParserEngine.java
+++
b/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/ShardingSphereSQLParserEngine.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.infra.parser;
import org.antlr.v4.runtime.misc.ParseCancellationException;
import
org.apache.shardingsphere.distsql.parser.engine.api.DistSQLStatementParserEngine;
+import org.apache.shardingsphere.infra.database.spi.DatabaseType;
import org.apache.shardingsphere.infra.parser.sql.SQLStatementParserEngine;
import
org.apache.shardingsphere.infra.parser.sql.SQLStatementParserEngineFactory;
import org.apache.shardingsphere.sql.parser.api.CacheOption;
@@ -35,9 +36,8 @@ public final class ShardingSphereSQLParserEngine implements
SQLParserEngine {
private final DistSQLStatementParserEngine distSQLStatementParserEngine;
- public ShardingSphereSQLParserEngine(final String databaseType, final
CacheOption sqlStatementCacheOption, final CacheOption parseTreeCacheOption,
final boolean isParseComment) {
- sqlStatementParserEngine =
SQLStatementParserEngineFactory.getSQLStatementParserEngine(
- databaseType, sqlStatementCacheOption, parseTreeCacheOption,
isParseComment);
+ public ShardingSphereSQLParserEngine(final DatabaseType databaseType,
final CacheOption sqlStatementCacheOption, final CacheOption
parseTreeCacheOption, final boolean isParseComment) {
+ sqlStatementParserEngine =
SQLStatementParserEngineFactory.getSQLStatementParserEngine(databaseType,
sqlStatementCacheOption, parseTreeCacheOption, isParseComment);
distSQLStatementParserEngine = new DistSQLStatementParserEngine();
}
diff --git
a/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserEngineFactory.java
b/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserEngineFactory.java
index 2f2a80eb119..0930901cc91 100644
---
a/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserEngineFactory.java
+++
b/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserEngineFactory.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.infra.parser.sql;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.infra.database.spi.DatabaseType;
import org.apache.shardingsphere.sql.parser.api.CacheOption;
import java.util.Map;
@@ -35,21 +36,21 @@ public final class SQLStatementParserEngineFactory {
/**
* Get SQL statement parser engine.
*
- * @param databaseType name of database type
+ * @param databaseType database type
* @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,
+ public static SQLStatementParserEngine getSQLStatementParserEngine(final
DatabaseType databaseType,
final
CacheOption sqlStatementCacheOption, final CacheOption parseTreeCacheOption,
final boolean isParseComment) {
- SQLStatementParserEngine result = ENGINES.get(databaseType);
+ SQLStatementParserEngine result = ENGINES.get(databaseType.getType());
if (null == result) {
- result = ENGINES.computeIfAbsent(databaseType, key -> new
SQLStatementParserEngine(key, sqlStatementCacheOption, parseTreeCacheOption,
isParseComment));
+ result = ENGINES.computeIfAbsent(databaseType.getType(), key ->
new SQLStatementParserEngine(key, sqlStatementCacheOption,
parseTreeCacheOption, isParseComment));
} else if
(!result.getSqlStatementCacheOption().equals(sqlStatementCacheOption) ||
!result.getParseTreeCacheOption().equals(parseTreeCacheOption)
|| result.isParseComment() != isParseComment) {
- result = new SQLStatementParserEngine(databaseType,
sqlStatementCacheOption, parseTreeCacheOption, isParseComment);
- ENGINES.put(databaseType, result);
+ result = new SQLStatementParserEngine(databaseType.getType(),
sqlStatementCacheOption, parseTreeCacheOption, isParseComment);
+ ENGINES.put(databaseType.getType(), result);
}
return result;
}
diff --git
a/infra/parser/src/test/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserEngineFactoryTest.java
b/infra/parser/src/test/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserEngineFactoryTest.java
index e7f219d4ecb..930e47d2c49 100644
---
a/infra/parser/src/test/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserEngineFactoryTest.java
+++
b/infra/parser/src/test/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserEngineFactoryTest.java
@@ -17,6 +17,8 @@
package org.apache.shardingsphere.infra.parser.sql;
+import org.apache.shardingsphere.infra.database.spi.DatabaseType;
+import org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPILoader;
import org.apache.shardingsphere.sql.parser.api.CacheOption;
import org.junit.jupiter.api.Test;
@@ -25,17 +27,19 @@ import static org.junit.jupiter.api.Assertions.assertSame;
class SQLStatementParserEngineFactoryTest {
+ private final DatabaseType databaseType =
TypedSPILoader.getService(DatabaseType.class, "MySQL");
+
@Test
void assertGetSQLStatementParserEngineNotSame() {
- SQLStatementParserEngine before =
SQLStatementParserEngineFactory.getSQLStatementParserEngine("MySQL", new
CacheOption(2000, 65535L), new CacheOption(128, 1024L), false);
- SQLStatementParserEngine after =
SQLStatementParserEngineFactory.getSQLStatementParserEngine("MySQL", new
CacheOption(2000, 65535L), new CacheOption(128, 1024L), true);
+ SQLStatementParserEngine before =
SQLStatementParserEngineFactory.getSQLStatementParserEngine(databaseType, new
CacheOption(2000, 65535L), new CacheOption(128, 1024L), false);
+ SQLStatementParserEngine after =
SQLStatementParserEngineFactory.getSQLStatementParserEngine(databaseType, new
CacheOption(2000, 65535L), new CacheOption(128, 1024L), true);
assertNotSame(before, after);
}
@Test
void assertGetSQLStatementParserEngineSame() {
- SQLStatementParserEngine before =
SQLStatementParserEngineFactory.getSQLStatementParserEngine("MySQL", new
CacheOption(2000, 65535L), new CacheOption(128, 1024L), false);
- SQLStatementParserEngine after =
SQLStatementParserEngineFactory.getSQLStatementParserEngine("MySQL", new
CacheOption(2000, 65535L), new CacheOption(128, 1024L), false);
+ SQLStatementParserEngine before =
SQLStatementParserEngineFactory.getSQLStatementParserEngine(databaseType, new
CacheOption(2000, 65535L), new CacheOption(128, 1024L), false);
+ SQLStatementParserEngine after =
SQLStatementParserEngineFactory.getSQLStatementParserEngine(databaseType, new
CacheOption(2000, 65535L), new CacheOption(128, 1024L), false);
assertSame(before, after);
}
}
diff --git
a/kernel/sql-parser/core/src/main/java/org/apache/shardingsphere/parser/rule/SQLParserRule.java
b/kernel/sql-parser/core/src/main/java/org/apache/shardingsphere/parser/rule/SQLParserRule.java
index 8314640452a..3fc3ed2ba19 100644
---
a/kernel/sql-parser/core/src/main/java/org/apache/shardingsphere/parser/rule/SQLParserRule.java
+++
b/kernel/sql-parser/core/src/main/java/org/apache/shardingsphere/parser/rule/SQLParserRule.java
@@ -58,7 +58,7 @@ public final class SQLParserRule implements GlobalRule {
*/
public SQLParserEngine getSQLParserEngine(final DatabaseType databaseType)
{
return "Standard".equals(engineType)
- ? new ShardingSphereSQLParserEngine(databaseType.getType(),
sqlStatementCache, parseTreeCache, sqlCommentParseEnabled)
+ ? new ShardingSphereSQLParserEngine(databaseType,
sqlStatementCache, parseTreeCache, sqlCommentParseEnabled)
: new SimpleSQLParserEngine();
}
diff --git
a/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareParameterMarkerExtractorTest.java
b/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareParameterMarkerExtractorTest.java
index d4562a9fe0c..f3186df0075 100644
---
a/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareParameterMarkerExtractorTest.java
+++
b/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareParameterMarkerExtractorTest.java
@@ -17,10 +17,12 @@
package
org.apache.shardingsphere.proxy.frontend.mysql.command.query.binary.prepare;
+import org.apache.shardingsphere.infra.database.spi.DatabaseType;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereColumn;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
import org.apache.shardingsphere.infra.parser.ShardingSphereSQLParserEngine;
+import org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPILoader;
import org.apache.shardingsphere.sql.parser.api.CacheOption;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.ParameterMarkerSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
@@ -40,7 +42,7 @@ class MySQLComStmtPrepareParameterMarkerExtractorTest {
@Test
void assertFindColumnsOfParameterMarkersForInsertStatement() {
String sql = "insert into user (id, name, age) values (1, ?, ?), (?,
'bar', ?)";
- SQLStatement sqlStatement = new ShardingSphereSQLParserEngine("MySQL",
new CacheOption(0, 0), new CacheOption(0, 0), false).parse(sql, false);
+ SQLStatement sqlStatement = new
ShardingSphereSQLParserEngine(TypedSPILoader.getService(DatabaseType.class,
"MySQL"), new CacheOption(0, 0), new CacheOption(0, 0), false).parse(sql,
false);
ShardingSphereSchema schema = prepareSchema();
Map<ParameterMarkerSegment, ShardingSphereColumn> actual =
MySQLComStmtPrepareParameterMarkerExtractor.findColumnsOfParameterMarkers(sqlStatement,
schema);
List<ParameterMarkerSegment> parameterMarkerSegments = new
ArrayList<>(((AbstractSQLStatement) sqlStatement).getParameterMarkerSegments());
diff --git
a/proxy/frontend/type/opengauss/src/test/java/org/apache/shardingsphere/proxy/frontend/opengauss/command/query/extended/bind/OpenGaussComBatchBindExecutorTest.java
b/proxy/frontend/type/opengauss/src/test/java/org/apache/shardingsphere/proxy/frontend/opengauss/command/query/extended/bind/OpenGaussComBatchBindExecutorTest.java
index 64ddbbb9223..d077f1560ab 100644
---
a/proxy/frontend/type/opengauss/src/test/java/org/apache/shardingsphere/proxy/frontend/opengauss/command/query/extended/bind/OpenGaussComBatchBindExecutorTest.java
+++
b/proxy/frontend/type/opengauss/src/test/java/org/apache/shardingsphere/proxy/frontend/opengauss/command/query/extended/bind/OpenGaussComBatchBindExecutorTest.java
@@ -34,6 +34,7 @@ import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import
org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
import org.apache.shardingsphere.infra.parser.ShardingSphereSQLParserEngine;
import org.apache.shardingsphere.infra.session.connection.ConnectionContext;
+import org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPILoader;
import org.apache.shardingsphere.logging.rule.LoggingRule;
import
org.apache.shardingsphere.logging.rule.builder.DefaultLoggingRuleConfigurationBuilder;
import org.apache.shardingsphere.mode.manager.ContextManager;
@@ -75,7 +76,8 @@ import static org.mockito.Mockito.when;
@StaticMockSettings(ProxyContext.class)
class OpenGaussComBatchBindExecutorTest {
- private final ShardingSphereSQLParserEngine parserEngine = new
ShardingSphereSQLParserEngine("openGauss", new CacheOption(2000, 65535L), new
CacheOption(128, 1024L), false);
+ private final ShardingSphereSQLParserEngine parserEngine = new
ShardingSphereSQLParserEngine(
+ TypedSPILoader.getService(DatabaseType.class, "openGauss"), new
CacheOption(2000, 65535L), new CacheOption(128, 1024L), false);
@Test
void assertExecute() throws SQLException {
diff --git
a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLAggregatedBatchedStatementsCommandExecutorTest.java
b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLAggregatedBatchedStatementsCommandExecutorTest.java
index 4fe6e82c730..2f48401f007 100644
---
a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLAggregatedBatchedStatementsCommandExecutorTest.java
+++
b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLAggregatedBatchedStatementsCommandExecutorTest.java
@@ -39,6 +39,7 @@ import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import
org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
import org.apache.shardingsphere.infra.parser.ShardingSphereSQLParserEngine;
import org.apache.shardingsphere.infra.session.connection.ConnectionContext;
+import org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPILoader;
import org.apache.shardingsphere.logging.rule.LoggingRule;
import
org.apache.shardingsphere.logging.rule.builder.DefaultLoggingRuleConfigurationBuilder;
import org.apache.shardingsphere.mode.manager.ContextManager;
@@ -88,7 +89,8 @@ class
PostgreSQLAggregatedBatchedStatementsCommandExecutorTest {
private static final int BATCH_SIZE = 10;
- private final ShardingSphereSQLParserEngine parserEngine = new
ShardingSphereSQLParserEngine("PostgreSQL", new CacheOption(2000, 65535L), new
CacheOption(128, 1024L), false);
+ private final ShardingSphereSQLParserEngine parserEngine = new
ShardingSphereSQLParserEngine(
+ TypedSPILoader.getService(DatabaseType.class, "PostgreSQL"), new
CacheOption(2000, 65535L), new CacheOption(128, 1024L), false);
@Test
void assertExecute() throws SQLException {
diff --git
a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/describe/PostgreSQLComDescribeExecutorTest.java
b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/describe/PostgreSQLComDescribeExecutorTest.java
index d15543950c9..df915afb836 100644
---
a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/describe/PostgreSQLComDescribeExecutorTest.java
+++
b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/describe/PostgreSQLComDescribeExecutorTest.java
@@ -32,6 +32,7 @@ import
org.apache.shardingsphere.infra.binder.statement.dml.InsertStatementConte
import
org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementContext;
import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
import
org.apache.shardingsphere.infra.database.postgresql.PostgreSQLDatabaseType;
+import org.apache.shardingsphere.infra.database.spi.DatabaseType;
import
org.apache.shardingsphere.infra.executor.sql.execute.engine.ConnectionMode;
import org.apache.shardingsphere.infra.hint.HintValueContext;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
@@ -41,6 +42,7 @@ import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSp
import org.apache.shardingsphere.infra.parser.SQLParserEngine;
import org.apache.shardingsphere.infra.parser.ShardingSphereSQLParserEngine;
import
org.apache.shardingsphere.infra.util.exception.external.sql.type.generic.UnsupportedSQLOperationException;
+import org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPILoader;
import org.apache.shardingsphere.logging.rule.LoggingRule;
import
org.apache.shardingsphere.logging.rule.builder.DefaultLoggingRuleConfigurationBuilder;
import org.apache.shardingsphere.mode.manager.ContextManager;
@@ -101,7 +103,8 @@ class PostgreSQLComDescribeExecutorTest {
private static final String TABLE_NAME = "t_order";
- private static final SQLParserEngine SQL_PARSER_ENGINE = new
ShardingSphereSQLParserEngine("PostgreSQL", new CacheOption(2000, 65535L), new
CacheOption(128, 1024L), false);
+ private static final SQLParserEngine SQL_PARSER_ENGINE = new
ShardingSphereSQLParserEngine(
+ TypedSPILoader.getService(DatabaseType.class, "PostgreSQL"), new
CacheOption(2000, 65535L), new CacheOption(128, 1024L), false);
@Mock
private PortalContext portalContext;