This is an automated email from the ASF dual-hosted git repository.

zhangliang 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 10d4b210654 Spilt protocol and parser database types in 
ProxySQLComQueryParser (#35900)
10d4b210654 is described below

commit 10d4b21065428a27b18eae9b5b2100cee49306de
Author: Liang Zhang <[email protected]>
AuthorDate: Sat Jul 5 22:06:06 2025 +0800

    Spilt protocol and parser database types in ProxySQLComQueryParser (#35900)
    
    * Spilt protocol and parser database types in ProxySQLComQueryParser
    
    * Spilt protocol and parser database types in ProxySQLComQueryParser
---
 .../handler/ProxyBackendHandlerFactory.java        | 10 ++--
 .../backend/handler/ProxySQLComQueryParser.java    | 14 ++++--
 .../handler/ProxyBackendHandlerFactoryTest.java    | 58 +++++++++++-----------
 .../text/query/MySQLComQueryPacketExecutor.java    |  7 +--
 .../query/simple/OpenGaussComQueryExecutor.java    |  7 +--
 .../query/simple/PostgreSQLComQueryExecutor.java   |  7 +--
 .../command/query/extended/PortalTest.java         |  4 +-
 7 files changed, 59 insertions(+), 48 deletions(-)

diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactory.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactory.java
index 585ff772e7d..a275425610d 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactory.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactory.java
@@ -77,7 +77,8 @@ public final class ProxyBackendHandlerFactory {
     /**
      * Create new instance of backend handler.
      *
-     * @param databaseType database type
+     * @param protocolDatabaseType protocol database type
+     * @param parserDatabaseType parser database type
      * @param sql SQL to be executed
      * @param sqlStatement SQL statement
      * @param connectionSession connection session
@@ -85,7 +86,8 @@ public final class ProxyBackendHandlerFactory {
      * @return created instance
      * @throws SQLException SQL exception
      */
-    public static ProxyBackendHandler newInstance(final DatabaseType 
databaseType, final String sql, final SQLStatement sqlStatement,
+    public static ProxyBackendHandler newInstance(final DatabaseType 
protocolDatabaseType, final DatabaseType parserDatabaseType,
+                                                  final String sql, final 
SQLStatement sqlStatement,
                                                   final ConnectionSession 
connectionSession, final HintValueContext hintValueContext) throws SQLException 
{
         if (sqlStatement instanceof EmptyStatement) {
             return new SkipBackendHandler(sqlStatement);
@@ -93,11 +95,11 @@ public final class ProxyBackendHandlerFactory {
         SQLStatementContext sqlStatementContext = sqlStatement instanceof 
DistSQLStatement
                 ? new DistSQLStatementContext((DistSQLStatement) sqlStatement)
                 : new 
SQLBindEngine(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData(),
-                        connectionSession.getCurrentDatabaseName(), 
hintValueContext).bind(databaseType, sqlStatement, Collections.emptyList());
+                        connectionSession.getCurrentDatabaseName(), 
hintValueContext).bind(parserDatabaseType, sqlStatement, 
Collections.emptyList());
         QueryContext queryContext = new QueryContext(sqlStatementContext, sql, 
Collections.emptyList(), hintValueContext, 
connectionSession.getConnectionContext(),
                 
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData());
         connectionSession.setQueryContext(queryContext);
-        return newInstance(databaseType, queryContext, connectionSession, 
false);
+        return newInstance(protocolDatabaseType, queryContext, 
connectionSession, false);
     }
     
     /**
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/ProxySQLComQueryParser.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/ProxySQLComQueryParser.java
index ca51c78c543..b3c53230100 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/ProxySQLComQueryParser.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/ProxySQLComQueryParser.java
@@ -39,18 +39,24 @@ public final class ProxySQLComQueryParser {
      *
      * @param sql SQL to be parsed
      * @param databaseType database type
-     * @param connectionSession connection session
      * @return SQL statement
      */
-    public static SQLStatement parse(final String sql, final DatabaseType 
databaseType, final ConnectionSession connectionSession) {
+    public static SQLStatement parse(final String sql, final DatabaseType 
databaseType) {
         if (SQLUtils.trimComment(sql).isEmpty()) {
             return new EmptyStatement();
         }
         SQLParserRule rule = 
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getSingleRule(SQLParserRule.class);
-        return rule.getSQLParserEngine(getProtocolType(databaseType, 
connectionSession)).parse(sql, false);
+        return rule.getSQLParserEngine(databaseType).parse(sql, false);
     }
     
-    private static DatabaseType getProtocolType(final DatabaseType 
defaultDatabaseType, final ConnectionSession connectionSession) {
+    /**
+     * Get parser database type.
+     *
+     * @param defaultDatabaseType default database type
+     * @param connectionSession connection session
+     * @return parser database type
+     */
+    public static DatabaseType getParserDatabaseType(final DatabaseType 
defaultDatabaseType, final ConnectionSession connectionSession) {
         String databaseName = connectionSession.getUsedDatabaseName();
         return Strings.isNullOrEmpty(databaseName) || 
!ProxyContext.getInstance().databaseExists(databaseName)
                 ? defaultDatabaseType
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactoryTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactoryTest.java
index 27a334fde3e..bcce26cf7e6 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactoryTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactoryTest.java
@@ -130,44 +130,44 @@ class ProxyBackendHandlerFactoryTest {
     @Test
     void assertNewInstanceWithDistSQL() throws SQLException {
         String sql = "set dist variable sql_show='true'";
-        SQLStatement sqlStatement = ProxySQLComQueryParser.parse(sql, 
databaseType, connectionSession);
-        ProxyBackendHandler actual = 
ProxyBackendHandlerFactory.newInstance(databaseType, sql, sqlStatement, 
connectionSession, new HintValueContext());
+        SQLStatement sqlStatement = ProxySQLComQueryParser.parse(sql, 
databaseType);
+        ProxyBackendHandler actual = 
ProxyBackendHandlerFactory.newInstance(databaseType, databaseType, sql, 
sqlStatement, connectionSession, new HintValueContext());
         assertThat(actual, instanceOf(DistSQLUpdateBackendHandler.class));
         sql = "show dist variable where name = sql_show";
-        sqlStatement = ProxySQLComQueryParser.parse(sql, databaseType, 
connectionSession);
-        actual = ProxyBackendHandlerFactory.newInstance(databaseType, sql, 
sqlStatement, connectionSession, new HintValueContext());
+        sqlStatement = ProxySQLComQueryParser.parse(sql, databaseType);
+        actual = ProxyBackendHandlerFactory.newInstance(databaseType, 
databaseType, sql, sqlStatement, connectionSession, new HintValueContext());
         assertThat(actual, instanceOf(DistSQLQueryBackendHandler.class));
         sql = "show dist variables";
-        sqlStatement = ProxySQLComQueryParser.parse(sql, databaseType, 
connectionSession);
-        actual = ProxyBackendHandlerFactory.newInstance(databaseType, sql, 
sqlStatement, connectionSession, new HintValueContext());
+        sqlStatement = ProxySQLComQueryParser.parse(sql, databaseType);
+        actual = ProxyBackendHandlerFactory.newInstance(databaseType, 
databaseType, sql, sqlStatement, connectionSession, new HintValueContext());
         assertThat(actual, instanceOf(DistSQLQueryBackendHandler.class));
     }
     
     @ParameterizedTest(name = "{0}")
     @ArgumentsSource(TCLTestCaseArgumentsProvider.class)
     void assertNewInstanceWithTCL(final String sql) throws SQLException {
-        SQLStatement sqlStatement = ProxySQLComQueryParser.parse(sql, 
databaseType, connectionSession);
-        ProxyBackendHandler actual = 
ProxyBackendHandlerFactory.newInstance(databaseType, sql, sqlStatement, 
connectionSession, new HintValueContext());
+        SQLStatement sqlStatement = ProxySQLComQueryParser.parse(sql, 
databaseType);
+        ProxyBackendHandler actual = 
ProxyBackendHandlerFactory.newInstance(databaseType, databaseType, sql, 
sqlStatement, connectionSession, new HintValueContext());
         assertThat(actual, instanceOf(TCLBackendHandler.class));
     }
     
     @Test
     void assertNewInstanceWithShow() throws SQLException {
         String sql = "SHOW VARIABLES LIKE '%x%'";
-        SQLStatement sqlStatement = ProxySQLComQueryParser.parse(sql, 
databaseType, connectionSession);
-        ProxyBackendHandler actual = 
ProxyBackendHandlerFactory.newInstance(databaseType, sql, sqlStatement, 
connectionSession, new HintValueContext());
+        SQLStatement sqlStatement = ProxySQLComQueryParser.parse(sql, 
databaseType);
+        ProxyBackendHandler actual = 
ProxyBackendHandlerFactory.newInstance(databaseType, databaseType, sql, 
sqlStatement, connectionSession, new HintValueContext());
         assertThat(actual, instanceOf(UnicastDatabaseBackendHandler.class));
         sql = "SHOW VARIABLES WHERE Variable_name ='language'";
-        sqlStatement = ProxySQLComQueryParser.parse(sql, databaseType, 
connectionSession);
-        actual = ProxyBackendHandlerFactory.newInstance(databaseType, sql, 
sqlStatement, connectionSession, new HintValueContext());
+        sqlStatement = ProxySQLComQueryParser.parse(sql, databaseType);
+        actual = ProxyBackendHandlerFactory.newInstance(databaseType, 
databaseType, sql, sqlStatement, connectionSession, new HintValueContext());
         assertThat(actual, instanceOf(UnicastDatabaseBackendHandler.class));
         sql = "SHOW CHARACTER SET";
-        sqlStatement = ProxySQLComQueryParser.parse(sql, databaseType, 
connectionSession);
-        actual = ProxyBackendHandlerFactory.newInstance(databaseType, sql, 
sqlStatement, connectionSession, new HintValueContext());
+        sqlStatement = ProxySQLComQueryParser.parse(sql, databaseType);
+        actual = ProxyBackendHandlerFactory.newInstance(databaseType, 
databaseType, sql, sqlStatement, connectionSession, new HintValueContext());
         assertThat(actual, instanceOf(UnicastDatabaseBackendHandler.class));
         sql = "SHOW COLLATION";
-        sqlStatement = ProxySQLComQueryParser.parse(sql, databaseType, 
connectionSession);
-        actual = ProxyBackendHandlerFactory.newInstance(databaseType, sql, 
sqlStatement, connectionSession, new HintValueContext());
+        sqlStatement = ProxySQLComQueryParser.parse(sql, databaseType);
+        actual = ProxyBackendHandlerFactory.newInstance(databaseType, 
databaseType, sql, sqlStatement, connectionSession, new HintValueContext());
         assertThat(actual, instanceOf(UnicastDatabaseBackendHandler.class));
     }
     
@@ -179,19 +179,19 @@ class ProxyBackendHandlerFactoryTest {
         ProxyContext proxyContext = ProxyContext.getInstance();
         when(proxyContext.getAllDatabaseNames()).thenReturn(new 
HashSet<>(Collections.singletonList("db")));
         
when(proxyContext.getContextManager().getDatabase("db").containsDataSource()).thenReturn(true);
-        SQLStatement sqlStatement = ProxySQLComQueryParser.parse(sql, 
databaseType, connectionSession);
-        ProxyBackendHandler actual = 
ProxyBackendHandlerFactory.newInstance(databaseType, sql, sqlStatement, 
connectionSession, new HintValueContext());
+        SQLStatement sqlStatement = ProxySQLComQueryParser.parse(sql, 
databaseType);
+        ProxyBackendHandler actual = 
ProxyBackendHandlerFactory.newInstance(databaseType, databaseType, sql, 
sqlStatement, connectionSession, new HintValueContext());
         assertThat(actual, instanceOf(DatabaseConnector.class));
         sql = "SELECT * FROM information_schema.schemata LIMIT 1";
-        sqlStatement = ProxySQLComQueryParser.parse(sql, databaseType, 
connectionSession);
-        actual = ProxyBackendHandlerFactory.newInstance(databaseType, sql, 
sqlStatement, connectionSession, new HintValueContext());
+        sqlStatement = ProxySQLComQueryParser.parse(sql, databaseType);
+        actual = ProxyBackendHandlerFactory.newInstance(databaseType, 
databaseType, sql, sqlStatement, connectionSession, new HintValueContext());
         assertThat(actual, instanceOf(DatabaseAdminQueryBackendHandler.class));
     }
     
     @Test
     void assertNewInstanceWithEmptyString() throws SQLException {
         String sql = "";
-        ProxyBackendHandler actual = 
ProxyBackendHandlerFactory.newInstance(databaseType, sql, new EmptyStatement(), 
connectionSession, new HintValueContext());
+        ProxyBackendHandler actual = 
ProxyBackendHandlerFactory.newInstance(databaseType, databaseType, sql, new 
EmptyStatement(), connectionSession, new HintValueContext());
         assertThat(actual, instanceOf(SkipBackendHandler.class));
     }
     
@@ -199,16 +199,16 @@ class ProxyBackendHandlerFactoryTest {
     void assertNewInstanceWithUnsupportedNonQueryDistSQLInTransaction() {
         
when(connectionSession.getTransactionStatus().isInTransaction()).thenReturn(true);
         String sql = "CREATE SHARDING TABLE RULE t_order 
(STORAGE_UNITS(ms_group_0,ms_group_1), SHARDING_COLUMN=order_id, 
TYPE(NAME='hash_mod', PROPERTIES('sharding-count'='4')));";
-        SQLStatement sqlStatement = ProxySQLComQueryParser.parse(sql, 
databaseType, connectionSession);
-        assertThrows(UnsupportedSQLOperationException.class, () -> 
ProxyBackendHandlerFactory.newInstance(databaseType, sql, sqlStatement, 
connectionSession, new HintValueContext()));
+        SQLStatement sqlStatement = ProxySQLComQueryParser.parse(sql, 
databaseType);
+        assertThrows(UnsupportedSQLOperationException.class, () -> 
ProxyBackendHandlerFactory.newInstance(databaseType, databaseType, sql, 
sqlStatement, connectionSession, new HintValueContext()));
     }
     
     @Test
     void assertNewInstanceWithQueryableRALStatementInTransaction() throws 
SQLException {
         
when(connectionSession.getTransactionStatus().isInTransaction()).thenReturn(true);
         String sql = "SHOW TRANSACTION RULE;";
-        SQLStatement sqlStatement = ProxySQLComQueryParser.parse(sql, 
databaseType, connectionSession);
-        ProxyBackendHandler actual = 
ProxyBackendHandlerFactory.newInstance(databaseType, sql, sqlStatement, 
connectionSession, new HintValueContext());
+        SQLStatement sqlStatement = ProxySQLComQueryParser.parse(sql, 
databaseType);
+        ProxyBackendHandler actual = 
ProxyBackendHandlerFactory.newInstance(databaseType, databaseType, sql, 
sqlStatement, connectionSession, new HintValueContext());
         assertThat(actual, instanceOf(DistSQLQueryBackendHandler.class));
     }
     
@@ -216,8 +216,8 @@ class ProxyBackendHandlerFactoryTest {
     void assertNewInstanceWithRQLStatementInTransaction() throws SQLException {
         
when(connectionSession.getTransactionStatus().isInTransaction()).thenReturn(true);
         String sql = "SHOW DEFAULT SINGLE TABLE STORAGE UNIT";
-        SQLStatement sqlStatement = ProxySQLComQueryParser.parse(sql, 
databaseType, connectionSession);
-        ProxyBackendHandler actual = 
ProxyBackendHandlerFactory.newInstance(databaseType, sql, sqlStatement, 
connectionSession, new HintValueContext());
+        SQLStatement sqlStatement = ProxySQLComQueryParser.parse(sql, 
databaseType);
+        ProxyBackendHandler actual = 
ProxyBackendHandlerFactory.newInstance(databaseType, databaseType, sql, 
sqlStatement, connectionSession, new HintValueContext());
         assertThat(actual, instanceOf(DistSQLQueryBackendHandler.class));
     }
     
@@ -225,8 +225,8 @@ class ProxyBackendHandlerFactoryTest {
     void assertNewInstanceWithRULStatementInTransaction() throws SQLException {
         
when(connectionSession.getTransactionStatus().isInTransaction()).thenReturn(true);
         String sql = "PREVIEW INSERT INTO account VALUES(1, 1, 1)";
-        SQLStatement sqlStatement = ProxySQLComQueryParser.parse(sql, 
databaseType, connectionSession);
-        ProxyBackendHandler actual = 
ProxyBackendHandlerFactory.newInstance(databaseType, sql, sqlStatement, 
connectionSession, new HintValueContext());
+        SQLStatement sqlStatement = ProxySQLComQueryParser.parse(sql, 
databaseType);
+        ProxyBackendHandler actual = 
ProxyBackendHandlerFactory.newInstance(databaseType, databaseType, sql, 
sqlStatement, connectionSession, new HintValueContext());
         assertThat(actual, instanceOf(DistSQLQueryBackendHandler.class));
     }
     
diff --git 
a/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLComQueryPacketExecutor.java
 
b/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLComQueryPacketExecutor.java
index 56ffbcac698..a9f7fc6d0c4 100644
--- 
a/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLComQueryPacketExecutor.java
+++ 
b/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLComQueryPacketExecutor.java
@@ -63,10 +63,11 @@ public final class MySQLComQueryPacketExecutor implements 
QueryCommandExecutor {
     
     public MySQLComQueryPacketExecutor(final MySQLComQueryPacket packet, final 
ConnectionSession connectionSession) throws SQLException {
         this.connectionSession = connectionSession;
-        DatabaseType databaseType = 
TypedSPILoader.getService(DatabaseType.class, "MySQL");
-        SQLStatement sqlStatement = 
ProxySQLComQueryParser.parse(packet.getSQL(), databaseType, connectionSession);
+        DatabaseType protocolDatabaseType = 
TypedSPILoader.getService(DatabaseType.class, "MySQL");
+        DatabaseType parserDatabaseType = 
ProxySQLComQueryParser.getParserDatabaseType(protocolDatabaseType, 
connectionSession);
+        SQLStatement sqlStatement = 
ProxySQLComQueryParser.parse(packet.getSQL(), parserDatabaseType);
         proxyBackendHandler = areMultiStatements(connectionSession, 
sqlStatement, packet.getSQL()) ? new 
MySQLMultiStatementsHandler(connectionSession, sqlStatement, packet.getSQL())
-                : ProxyBackendHandlerFactory.newInstance(databaseType, 
packet.getSQL(), sqlStatement, connectionSession, packet.getHintValueContext());
+                : ProxyBackendHandlerFactory.newInstance(protocolDatabaseType, 
parserDatabaseType, packet.getSQL(), sqlStatement, connectionSession, 
packet.getHintValueContext());
         characterSet = 
connectionSession.getAttributeMap().attr(MySQLConstants.CHARACTER_SET_ATTRIBUTE_KEY).get().getId();
     }
     
diff --git 
a/proxy/frontend/type/opengauss/src/main/java/org/apache/shardingsphere/proxy/frontend/opengauss/command/query/simple/OpenGaussComQueryExecutor.java
 
b/proxy/frontend/type/opengauss/src/main/java/org/apache/shardingsphere/proxy/frontend/opengauss/command/query/simple/OpenGaussComQueryExecutor.java
index b9de437e480..11cdb59ae43 100644
--- 
a/proxy/frontend/type/opengauss/src/main/java/org/apache/shardingsphere/proxy/frontend/opengauss/command/query/simple/OpenGaussComQueryExecutor.java
+++ 
b/proxy/frontend/type/opengauss/src/main/java/org/apache/shardingsphere/proxy/frontend/opengauss/command/query/simple/OpenGaussComQueryExecutor.java
@@ -69,9 +69,10 @@ public final class OpenGaussComQueryExecutor implements 
QueryCommandExecutor {
     
     public OpenGaussComQueryExecutor(final PortalContext portalContext, final 
PostgreSQLComQueryPacket packet, final ConnectionSession connectionSession) 
throws SQLException {
         this.portalContext = portalContext;
-        DatabaseType databaseType = 
TypedSPILoader.getService(DatabaseType.class, "openGauss");
-        SQLStatement sqlStatement = 
ProxySQLComQueryParser.parse(packet.getSQL(), databaseType, connectionSession);
-        proxyBackendHandler = 
ProxyBackendHandlerFactory.newInstance(databaseType, packet.getSQL(), 
sqlStatement, connectionSession, packet.getHintValueContext());
+        DatabaseType protocolDatabaseType = 
TypedSPILoader.getService(DatabaseType.class, "openGauss");
+        DatabaseType parserDatabaseType = 
ProxySQLComQueryParser.getParserDatabaseType(protocolDatabaseType, 
connectionSession);
+        SQLStatement sqlStatement = 
ProxySQLComQueryParser.parse(packet.getSQL(), parserDatabaseType);
+        proxyBackendHandler = 
ProxyBackendHandlerFactory.newInstance(protocolDatabaseType, 
parserDatabaseType, packet.getSQL(), sqlStatement, connectionSession, 
packet.getHintValueContext());
     }
     
     @Override
diff --git 
a/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/simple/PostgreSQLComQueryExecutor.java
 
b/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/simple/PostgreSQLComQueryExecutor.java
index 2b4c0c68a25..f12dabd5e08 100644
--- 
a/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/simple/PostgreSQLComQueryExecutor.java
+++ 
b/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/simple/PostgreSQLComQueryExecutor.java
@@ -69,9 +69,10 @@ public final class PostgreSQLComQueryExecutor implements 
QueryCommandExecutor {
     
     public PostgreSQLComQueryExecutor(final PortalContext portalContext, final 
PostgreSQLComQueryPacket packet, final ConnectionSession connectionSession) 
throws SQLException {
         this.portalContext = portalContext;
-        DatabaseType databaseType = 
TypedSPILoader.getService(DatabaseType.class, "PostgreSQL");
-        SQLStatement sqlStatement = 
ProxySQLComQueryParser.parse(packet.getSQL(), databaseType, connectionSession);
-        proxyBackendHandler = 
ProxyBackendHandlerFactory.newInstance(databaseType, packet.getSQL(), 
sqlStatement, connectionSession, packet.getHintValueContext());
+        DatabaseType protocolDatabaseType = 
TypedSPILoader.getService(DatabaseType.class, "PostgreSQL");
+        DatabaseType parserDatabaseType = 
ProxySQLComQueryParser.getParserDatabaseType(protocolDatabaseType, 
connectionSession);
+        SQLStatement sqlStatement = 
ProxySQLComQueryParser.parse(packet.getSQL(), parserDatabaseType);
+        proxyBackendHandler = 
ProxyBackendHandlerFactory.newInstance(protocolDatabaseType, 
parserDatabaseType, packet.getSQL(), sqlStatement, connectionSession, 
packet.getHintValueContext());
     }
     
     @Override
diff --git 
a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PortalTest.java
 
b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PortalTest.java
index 575dbd25a7f..cea4032f526 100644
--- 
a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PortalTest.java
+++ 
b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PortalTest.java
@@ -28,8 +28,8 @@ import 
org.apache.shardingsphere.db.protocol.postgresql.packet.command.query.Pos
 import 
org.apache.shardingsphere.db.protocol.postgresql.packet.command.query.extended.execute.PostgreSQLPortalSuspendedPacket;
 import 
org.apache.shardingsphere.db.protocol.postgresql.packet.generic.PostgreSQLCommandCompletePacket;
 import 
org.apache.shardingsphere.db.protocol.postgresql.packet.handshake.PostgreSQLParameterStatusPacket;
-import 
org.apache.shardingsphere.infra.binder.context.statement.type.CommonSQLStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
+import 
org.apache.shardingsphere.infra.binder.context.statement.type.CommonSQLStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.type.dml.InsertStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.type.dml.SelectStatementContext;
 import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
@@ -113,7 +113,7 @@ class PortalTest {
         when(connectionSession.getCurrentDatabaseName()).thenReturn("foo_db");
         ConnectionContext connectionContext = mockConnectionContext();
         
when(connectionSession.getConnectionContext()).thenReturn(connectionContext);
-        when(ProxyBackendHandlerFactory.newInstance(eq(databaseType), 
anyString(), any(SQLStatement.class), eq(connectionSession), 
any(HintValueContext.class)))
+        when(ProxyBackendHandlerFactory.newInstance(eq(databaseType), 
eq(databaseType), anyString(), any(SQLStatement.class), eq(connectionSession), 
any(HintValueContext.class)))
                 .thenReturn(proxyBackendHandler);
         when(ProxyBackendHandlerFactory.newInstance(eq(databaseType), 
any(QueryContext.class), eq(connectionSession), 
anyBoolean())).thenReturn(proxyBackendHandler);
         
when(databaseConnectionManager.getConnectionSession()).thenReturn(connectionSession);

Reply via email to