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) {