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 0d3baf3e0ff Refactor PostgreSQLSelectAdminExecutorFactory (#36902)
0d3baf3e0ff is described below
commit 0d3baf3e0ff98deefe084c8308201b87a260ddd0
Author: Liang Zhang <[email protected]>
AuthorDate: Mon Oct 20 19:25:30 2025 +0800
Refactor PostgreSQLSelectAdminExecutorFactory (#36902)
---
.../admin/factory/OpenGaussSelectAdminExecutorFactory.java | 4 ++--
.../handler/admin/PostgreSQLAdminExecutorCreator.java | 8 ++++----
.../admin/factory/PostgreSQLSelectAdminExecutorFactory.java | 7 ++++---
.../factory/PostgreSQLSelectAdminExecutorFactoryTest.java | 11 ++++++++---
4 files changed, 18 insertions(+), 12 deletions(-)
diff --git
a/proxy/backend/dialect/opengauss/src/main/java/org/apache/shardingsphere/proxy/backend/opengauss/handler/admin/factory/OpenGaussSelectAdminExecutorFactory.java
b/proxy/backend/dialect/opengauss/src/main/java/org/apache/shardingsphere/proxy/backend/opengauss/handler/admin/factory/OpenGaussSelectAdminExecutorFactory.java
index b36bb711f6d..edb9895b6bd 100644
---
a/proxy/backend/dialect/opengauss/src/main/java/org/apache/shardingsphere/proxy/backend/opengauss/handler/admin/factory/OpenGaussSelectAdminExecutorFactory.java
+++
b/proxy/backend/dialect/opengauss/src/main/java/org/apache/shardingsphere/proxy/backend/opengauss/handler/admin/factory/OpenGaussSelectAdminExecutorFactory.java
@@ -35,7 +35,7 @@ public final class OpenGaussSelectAdminExecutorFactory {
/**
* Create new instance of database admin executor.
*
- * @param selectStatementContext select statement
+ * @param selectStatementContext select statement context
* @param sql SQL
* @param parameters SQL parameters
* @return created instance
@@ -49,6 +49,6 @@ public final class OpenGaussSelectAdminExecutorFactory {
if (systemFunctionQueryExecutor.isPresent()) {
return systemFunctionQueryExecutor;
}
- return
PostgreSQLSelectAdminExecutorFactory.newInstance(selectStatementContext.getSqlStatement(),
sql, parameters);
+ return
PostgreSQLSelectAdminExecutorFactory.newInstance(selectStatementContext, sql,
parameters);
}
}
diff --git
a/proxy/backend/dialect/postgresql/src/main/java/org/apache/shardingsphere/proxy/backend/postgresql/handler/admin/PostgreSQLAdminExecutorCreator.java
b/proxy/backend/dialect/postgresql/src/main/java/org/apache/shardingsphere/proxy/backend/postgresql/handler/admin/PostgreSQLAdminExecutorCreator.java
index 9c3a40c9075..9db5a96c81a 100644
---
a/proxy/backend/dialect/postgresql/src/main/java/org/apache/shardingsphere/proxy/backend/postgresql/handler/admin/PostgreSQLAdminExecutorCreator.java
+++
b/proxy/backend/dialect/postgresql/src/main/java/org/apache/shardingsphere/proxy/backend/postgresql/handler/admin/PostgreSQLAdminExecutorCreator.java
@@ -18,6 +18,7 @@
package org.apache.shardingsphere.proxy.backend.postgresql.handler.admin;
import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
+import
org.apache.shardingsphere.infra.binder.context.statement.type.dml.SelectStatementContext;
import
org.apache.shardingsphere.proxy.backend.handler.admin.executor.DatabaseAdminExecutor;
import
org.apache.shardingsphere.proxy.backend.handler.admin.executor.DatabaseAdminExecutorCreator;
import
org.apache.shardingsphere.proxy.backend.postgresql.handler.admin.executor.PostgreSQLResetVariableAdminExecutor;
@@ -27,7 +28,6 @@ import
org.apache.shardingsphere.proxy.backend.postgresql.handler.admin.factory.
import
org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.type.dal.SetStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.type.dal.ShowStatement;
-import
org.apache.shardingsphere.sql.parser.statement.core.statement.type.dml.SelectStatement;
import
org.apache.shardingsphere.sql.parser.statement.postgresql.dal.PostgreSQLResetParameterStatement;
import java.util.List;
@@ -40,10 +40,10 @@ public final class PostgreSQLAdminExecutorCreator
implements DatabaseAdminExecut
@Override
public Optional<DatabaseAdminExecutor> create(final SQLStatementContext
sqlStatementContext, final String sql, final String databaseName, final
List<Object> parameters) {
- SQLStatement sqlStatement = sqlStatementContext.getSqlStatement();
- if (sqlStatement instanceof SelectStatement) {
- return
PostgreSQLSelectAdminExecutorFactory.newInstance((SelectStatement)
sqlStatement, sql, parameters);
+ if (sqlStatementContext instanceof SelectStatementContext) {
+ return
PostgreSQLSelectAdminExecutorFactory.newInstance((SelectStatementContext)
sqlStatementContext, sql, parameters);
}
+ SQLStatement sqlStatement = sqlStatementContext.getSqlStatement();
if (sqlStatement instanceof SetStatement) {
return Optional.of(new
PostgreSQLSetVariableAdminExecutor((SetStatement) sqlStatement));
}
diff --git
a/proxy/backend/dialect/postgresql/src/main/java/org/apache/shardingsphere/proxy/backend/postgresql/handler/admin/factory/PostgreSQLSelectAdminExecutorFactory.java
b/proxy/backend/dialect/postgresql/src/main/java/org/apache/shardingsphere/proxy/backend/postgresql/handler/admin/factory/PostgreSQLSelectAdminExecutorFactory.java
index b9343d685ec..3466b8b498a 100644
---
a/proxy/backend/dialect/postgresql/src/main/java/org/apache/shardingsphere/proxy/backend/postgresql/handler/admin/factory/PostgreSQLSelectAdminExecutorFactory.java
+++
b/proxy/backend/dialect/postgresql/src/main/java/org/apache/shardingsphere/proxy/backend/postgresql/handler/admin/factory/PostgreSQLSelectAdminExecutorFactory.java
@@ -23,6 +23,7 @@ import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import
org.apache.shardingsphere.database.connector.core.spi.DatabaseTypedSPILoader;
import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
+import
org.apache.shardingsphere.infra.binder.context.statement.type.dml.SelectStatementContext;
import
org.apache.shardingsphere.infra.metadata.database.schema.manager.SystemSchemaManager;
import
org.apache.shardingsphere.infra.metadata.statistics.collector.DialectDatabaseStatisticsCollector;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
@@ -60,13 +61,13 @@ public final class PostgreSQLSelectAdminExecutorFactory {
/**
* Create new instance of database admin executor.
*
- * @param sqlStatement select statement
+ * @param selectStatementContext select statement context
* @param sql SQL
* @param parameters SQL parameters
* @return created instance
*/
- public static Optional<DatabaseAdminExecutor> newInstance(final
SelectStatement sqlStatement, final String sql, final List<Object> parameters) {
- Map<String, Collection<String>> selectedSchemaTables =
getSelectedSchemaTables(sqlStatement);
+ public static Optional<DatabaseAdminExecutor> newInstance(final
SelectStatementContext selectStatementContext, final String sql, final
List<Object> parameters) {
+ Map<String, Collection<String>> selectedSchemaTables =
getSelectedSchemaTables(selectStatementContext.getSqlStatement());
if (isSelectedStatisticsSystemTable(selectedSchemaTables) ||
isSelectedShardingSphereSystemTable(selectedSchemaTables)) {
return Optional.empty();
}
diff --git
a/proxy/backend/dialect/postgresql/src/test/java/org/apache/shardingsphere/proxy/backend/postgresql/handler/admin/factory/PostgreSQLSelectAdminExecutorFactoryTest.java
b/proxy/backend/dialect/postgresql/src/test/java/org/apache/shardingsphere/proxy/backend/postgresql/handler/admin/factory/PostgreSQLSelectAdminExecutorFactoryTest.java
index da6fd6191b5..fc0e2100379 100644
---
a/proxy/backend/dialect/postgresql/src/test/java/org/apache/shardingsphere/proxy/backend/postgresql/handler/admin/factory/PostgreSQLSelectAdminExecutorFactoryTest.java
+++
b/proxy/backend/dialect/postgresql/src/test/java/org/apache/shardingsphere/proxy/backend/postgresql/handler/admin/factory/PostgreSQLSelectAdminExecutorFactoryTest.java
@@ -18,6 +18,7 @@
package
org.apache.shardingsphere.proxy.backend.postgresql.handler.admin.factory;
import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
+import
org.apache.shardingsphere.infra.binder.context.statement.type.dml.SelectStatementContext;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
import org.apache.shardingsphere.parser.config.SQLParserRuleConfiguration;
import org.apache.shardingsphere.parser.rule.SQLParserRule;
@@ -29,6 +30,7 @@ import java.util.Collections;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.Mockito.mock;
class PostgreSQLSelectAdminExecutorFactoryTest {
@@ -36,19 +38,22 @@ class PostgreSQLSelectAdminExecutorFactoryTest {
void assertNewInstanceWithPgDatabaseSystemTable() {
String sql = "SELECT d.datname as
\"Name\",pg_catalog.pg_get_userbyid(d.datdba) as
\"Owner\",pg_catalog.pg_encoding_to_char(d.encoding) as \"Encoding\","
+ "d.datcollate as \"Collate\",d.datctype as
\"Ctype\",pg_catalog.array_to_string(d.datacl, E'\\n') AS \"Access privileges\"
FROM pg_catalog.pg_database d ORDER BY 1";
-
assertTrue(PostgreSQLSelectAdminExecutorFactory.newInstance(parseSQL(sql), sql,
Collections.emptyList()).isPresent());
+ SelectStatementContext selectStatementContext = new
SelectStatementContext(parseSQL(sql), mock(), null, Collections.emptyList());
+
assertTrue(PostgreSQLSelectAdminExecutorFactory.newInstance(selectStatementContext,
sql, Collections.emptyList()).isPresent());
}
@Test
void assertNewInstanceWithShardingSphereSystemTable() {
String sql = "SELECT * FROM shardingsphere.cluster_information";
-
assertFalse(PostgreSQLSelectAdminExecutorFactory.newInstance(parseSQL(sql),
sql, Collections.emptyList()).isPresent());
+ SelectStatementContext selectStatementContext = new
SelectStatementContext(parseSQL(sql), mock(), null, Collections.emptyList());
+
assertFalse(PostgreSQLSelectAdminExecutorFactory.newInstance(selectStatementContext,
sql, Collections.emptyList()).isPresent());
}
@Test
void assertNewInstanceWithSelectLogicSQL() {
String sql = "SELECT * FROM foo_tbl";
-
assertFalse(PostgreSQLSelectAdminExecutorFactory.newInstance(parseSQL(sql),
sql, Collections.emptyList()).isPresent());
+ SelectStatementContext selectStatementContext = new
SelectStatementContext(parseSQL(sql), mock(), null, Collections.emptyList());
+
assertFalse(PostgreSQLSelectAdminExecutorFactory.newInstance(selectStatementContext,
sql, Collections.emptyList()).isPresent());
}
private SelectStatement parseSQL(final String sql) {