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;

Reply via email to