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 47979b2ee7d Refactor PostgreSQLComParseExecutor to utilize 
DatabaseType in SQL parser engine creation (#35512)
47979b2ee7d is described below

commit 47979b2ee7d6f499835a79437f9ce1654d1d2fbe
Author: Liang Zhang <[email protected]>
AuthorDate: Sun May 25 22:39:30 2025 +0800

    Refactor PostgreSQLComParseExecutor to utilize DatabaseType in SQL parser 
engine creation (#35512)
---
 .../extended/parse/PostgreSQLComParseExecutor.java | 28 +++++++++-------------
 1 file changed, 11 insertions(+), 17 deletions(-)

diff --git 
a/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/parse/PostgreSQLComParseExecutor.java
 
b/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/parse/PostgreSQLComParseExecutor.java
index 3fbad1b3084..6b85b6db70e 100644
--- 
a/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/parse/PostgreSQLComParseExecutor.java
+++ 
b/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/parse/PostgreSQLComParseExecutor.java
@@ -25,8 +25,9 @@ import 
org.apache.shardingsphere.db.protocol.postgresql.packet.command.query.ext
 import org.apache.shardingsphere.distsql.statement.DistSQLStatement;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import org.apache.shardingsphere.infra.binder.engine.SQLBindEngine;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import org.apache.shardingsphere.infra.parser.SQLParserEngine;
-import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 import org.apache.shardingsphere.parser.rule.SQLParserRule;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.distsql.DistSQLStatementContext;
@@ -58,7 +59,9 @@ public final class PostgreSQLComParseExecutor implements 
CommandExecutor {
     
     @Override
     public Collection<DatabasePacket> execute() {
-        SQLParserEngine sqlParserEngine = 
createShardingSphereSQLParserEngine(connectionSession.getUsedDatabaseName());
+        ShardingSphereMetaData metaData = 
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData();
+        DatabaseType databaseType = 
metaData.getDatabase(connectionSession.getUsedDatabaseName()).getProtocolType();
+        SQLParserEngine sqlParserEngine = 
metaData.getGlobalRuleMetaData().getSingleRule(SQLParserRule.class).getSQLParserEngine(databaseType);
         String sql = packet.getSQL();
         SQLStatement sqlStatement = sqlParserEngine.parse(sql, true);
         String escapedSql = escape(sqlStatement, sql);
@@ -76,26 +79,17 @@ public final class PostgreSQLComParseExecutor implements 
CommandExecutor {
             sqlStatement = sqlParserEngine.parse(sql, true);
         }
         List<PostgreSQLColumnType> paddedColumnTypes = 
paddingColumnTypes(sqlStatement.getParameterCount(), 
packet.readParameterTypes());
-        SQLStatementContext sqlStatementContext = sqlStatement instanceof 
DistSQLStatement ? new DistSQLStatementContext((DistSQLStatement) sqlStatement)
-                : new 
SQLBindEngine(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData(),
 connectionSession.getCurrentDatabaseName(), packet.getHintValueContext())
-                        .bind(sqlStatement, Collections.emptyList());
-        PostgreSQLServerPreparedStatement serverPreparedStatement = new 
PostgreSQLServerPreparedStatement(sql, sqlStatementContext, 
packet.getHintValueContext(), paddedColumnTypes,
-                actualParameterMarkerIndexes);
+        SQLStatementContext sqlStatementContext = sqlStatement instanceof 
DistSQLStatement
+                ? new DistSQLStatementContext((DistSQLStatement) sqlStatement)
+                : new SQLBindEngine(metaData, 
connectionSession.getCurrentDatabaseName(), 
packet.getHintValueContext()).bind(databaseType, sqlStatement, 
Collections.emptyList());
+        PostgreSQLServerPreparedStatement serverPreparedStatement = new 
PostgreSQLServerPreparedStatement(
+                sql, sqlStatementContext, packet.getHintValueContext(), 
paddedColumnTypes, actualParameterMarkerIndexes);
         
connectionSession.getServerPreparedStatementRegistry().addPreparedStatement(packet.getStatementId(),
 serverPreparedStatement);
         return 
Collections.singleton(PostgreSQLParseCompletePacket.getInstance());
     }
     
-    private SQLParserEngine createShardingSphereSQLParserEngine(final String 
databaseName) {
-        MetaDataContexts metaDataContexts = 
ProxyContext.getInstance().getContextManager().getMetaDataContexts();
-        SQLParserRule sqlParserRule = 
metaDataContexts.getMetaData().getGlobalRuleMetaData().getSingleRule(SQLParserRule.class);
-        return 
sqlParserRule.getSQLParserEngine(metaDataContexts.getMetaData().getDatabase(databaseName).getProtocolType());
-    }
-    
     private String escape(final SQLStatement sqlStatement, final String sql) {
-        if (sqlStatement instanceof DMLStatement) {
-            return sql.replace("?", "??");
-        }
-        return sql;
+        return sqlStatement instanceof DMLStatement ? sql.replace("?", "??") : 
sql;
     }
     
     private String convertSQLToJDBCStyle(final List<ParameterMarkerSegment> 
parameterMarkerSegments, final String sql) {

Reply via email to