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 bd6fdddbd7c Refactor AbstractDatabaseMetaDataExecutor (#36846)
bd6fdddbd7c is described below

commit bd6fdddbd7c9382b855b6257341e823c73b78fe8
Author: Liang Zhang <[email protected]>
AuthorDate: Fri Oct 10 22:42:44 2025 +0800

    Refactor AbstractDatabaseMetaDataExecutor (#36846)
---
 .../admin/executor/AbstractDatabaseMetaDataExecutor.java  | 11 ++++++++---
 .../executor/DefaultDatabaseMetaDataExecutorTest.java     | 15 ++++-----------
 .../admin/MySQLInformationSchemaExecutorFactory.java      |  3 ++-
 .../handler/admin/MySQLMySQLSchemaExecutorFactory.java    |  3 ++-
 .../admin/MySQLPerformanceSchemaExecutorFactory.java      |  3 ++-
 .../handler/admin/MySQLSysSchemaExecutorFactory.java      |  3 ++-
 .../information/SelectInformationSchemataExecutor.java    |  2 +-
 .../admin/OpenGaussSystemTableQueryExecutorCreator.java   |  3 ++-
 .../handler/admin/PostgreSQLAdminExecutorCreator.java     |  3 ++-
 9 files changed, 25 insertions(+), 21 deletions(-)

diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/AbstractDatabaseMetaDataExecutor.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/AbstractDatabaseMetaDataExecutor.java
index 96f498d391b..96280f639e0 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/AbstractDatabaseMetaDataExecutor.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/AbstractDatabaseMetaDataExecutor.java
@@ -34,7 +34,6 @@ import 
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaDa
 import 
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
 import org.apache.shardingsphere.infra.metadata.user.Grantee;
 import org.apache.shardingsphere.mode.manager.ContextManager;
-import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 
 import java.sql.Connection;
@@ -57,6 +56,7 @@ import java.util.stream.Collectors;
 /**
  * The abstract class of database meta data, used to define the template.
  */
+@RequiredArgsConstructor
 @Getter
 public abstract class AbstractDatabaseMetaDataExecutor implements 
DatabaseAdminQueryExecutor {
     
@@ -64,7 +64,7 @@ public abstract class AbstractDatabaseMetaDataExecutor 
implements DatabaseAdminQ
     
     private MergedResult mergedResult;
     
-    private final ContextManager contextManager = 
ProxyContext.getInstance().getContextManager();
+    private final ContextManager contextManager;
     
     private final List<Map<String, Object>> rows = new LinkedList<>();
     
@@ -130,13 +130,18 @@ public abstract class AbstractDatabaseMetaDataExecutor 
implements DatabaseAdminQ
     /**
      * Default database meta data executor, execute sql directly in the 
database to obtain the result source data.
      */
-    @RequiredArgsConstructor
     public static class DefaultDatabaseMetaDataExecutor extends 
AbstractDatabaseMetaDataExecutor {
         
         private final String sql;
         
         private final List<Object> parameters;
         
+        public DefaultDatabaseMetaDataExecutor(final ContextManager 
contextManager, final String sql, final List<Object> parameters) {
+            super(contextManager);
+            this.sql = sql;
+            this.parameters = parameters;
+        }
+        
         @Override
         protected Collection<String> getDatabaseNames(final ConnectionSession 
connectionSession) {
             ShardingSphereDatabase database = 
getContextManager().getMetaDataContexts().getMetaData().getDatabase(connectionSession.getCurrentDatabaseName());
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/DefaultDatabaseMetaDataExecutorTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/DefaultDatabaseMetaDataExecutorTest.java
index 9f0e572453b..cd035a019bf 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/DefaultDatabaseMetaDataExecutorTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/DefaultDatabaseMetaDataExecutorTest.java
@@ -32,7 +32,6 @@ import org.apache.shardingsphere.infra.metadata.user.Grantee;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import 
org.apache.shardingsphere.proxy.backend.handler.admin.executor.AbstractDatabaseMetaDataExecutor.DefaultDatabaseMetaDataExecutor;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import org.apache.shardingsphere.test.infra.fixture.jdbc.MockedDataSource;
@@ -63,7 +62,7 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 @ExtendWith(AutoMockExtension.class)
-@StaticMockSettings({ProxyContext.class, SystemSchemaUtils.class})
+@StaticMockSettings(SystemSchemaUtils.class)
 class DefaultDatabaseMetaDataExecutorTest {
     
     private final DatabaseType databaseType = 
TypedSPILoader.getService(DatabaseType.class, "FIXTURE");
@@ -85,9 +84,7 @@ class DefaultDatabaseMetaDataExecutorTest {
         expectedResultSetMap.put("DEFAULT_CHARACTER_SET_NAME", "utf8mb4");
         String sql = "SELECT SCHEMA_NAME AS sn, DEFAULT_CHARACTER_SET_NAME 
FROM information_schema.SCHEMATA";
         ShardingSphereDatabase database = createDatabase(expectedResultSetMap);
-        ContextManager contextManager = mockContextManager(database);
-        
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
-        DefaultDatabaseMetaDataExecutor executor = new 
DefaultDatabaseMetaDataExecutor(sql, Collections.emptyList());
+        DefaultDatabaseMetaDataExecutor executor = new 
DefaultDatabaseMetaDataExecutor(mockContextManager(database), sql, 
Collections.emptyList());
         executor.execute(connectionSession);
         assertThat(executor.getRows().get(0).get("sn"), is("foo_ds"));
         
assertThat(executor.getRows().get(0).get("DEFAULT_CHARACTER_SET_NAME"), 
is("utf8mb4"));
@@ -97,9 +94,7 @@ class DefaultDatabaseMetaDataExecutorTest {
     void assertExecuteWithDefaultValue() throws SQLException {
         String sql = "SELECT COUNT(*) AS support_ndb FROM 
information_schema.ENGINES WHERE Engine = 'ndbcluster'";
         ShardingSphereDatabase database = 
createDatabase(Collections.singletonMap("support_ndb", "0"));
-        ContextManager contextManager = mockContextManager(database);
-        
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
-        DefaultDatabaseMetaDataExecutor executor = new 
DefaultDatabaseMetaDataExecutor(sql, Collections.emptyList());
+        DefaultDatabaseMetaDataExecutor executor = new 
DefaultDatabaseMetaDataExecutor(mockContextManager(database), sql, 
Collections.emptyList());
         executor.execute(connectionSession);
         assertThat(executor.getQueryResultMetaData().getColumnCount(), is(1));
         while (executor.getMergedResult().next()) {
@@ -111,9 +106,7 @@ class DefaultDatabaseMetaDataExecutorTest {
     void assertExecuteWithPreparedStatement() throws SQLException {
         String sql = "SELECT COUNT(*) AS support_ndb FROM 
information_schema.ENGINES WHERE Engine = ?";
         ShardingSphereDatabase database = 
createDatabase(Collections.singletonMap("support_ndb", "0"));
-        ContextManager contextManager = mockContextManager(database);
-        
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
-        DefaultDatabaseMetaDataExecutor executor = new 
DefaultDatabaseMetaDataExecutor(sql, Collections.singletonList("ndbcluster"));
+        DefaultDatabaseMetaDataExecutor executor = new 
DefaultDatabaseMetaDataExecutor(mockContextManager(database), sql, 
Collections.singletonList("ndbcluster"));
         executor.execute(connectionSession);
         assertThat(executor.getQueryResultMetaData().getColumnCount(), is(1));
         while (executor.getMergedResult().next()) {
diff --git 
a/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/MySQLInformationSchemaExecutorFactory.java
 
b/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/MySQLInformationSchemaExecutorFactory.java
index d6f0ed04e3d..78817f54f7f 100644
--- 
a/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/MySQLInformationSchemaExecutorFactory.java
+++ 
b/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/MySQLInformationSchemaExecutorFactory.java
@@ -21,6 +21,7 @@ import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 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.proxy.backend.context.ProxyContext;
 import 
org.apache.shardingsphere.proxy.backend.handler.admin.executor.AbstractDatabaseMetaDataExecutor.DefaultDatabaseMetaDataExecutor;
 import 
org.apache.shardingsphere.proxy.backend.handler.admin.executor.DatabaseAdminExecutor;
 import 
org.apache.shardingsphere.proxy.backend.mysql.handler.admin.executor.information.SelectInformationSchemataExecutor;
@@ -56,7 +57,7 @@ public final class MySQLInformationSchemaExecutorFactory {
             return Optional.of(new 
SelectInformationSchemataExecutor(sqlStatement, sql, parameters));
         }
         if (SystemSchemaManager.isSystemTable("mysql", "information_schema", 
tableName)) {
-            return Optional.of(new DefaultDatabaseMetaDataExecutor(sql, 
parameters));
+            return Optional.of(new 
DefaultDatabaseMetaDataExecutor(ProxyContext.getInstance().getContextManager(), 
sql, parameters));
         }
         return Optional.empty();
     }
diff --git 
a/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/MySQLMySQLSchemaExecutorFactory.java
 
b/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/MySQLMySQLSchemaExecutorFactory.java
index b78fc3f3007..1e460c4d4ff 100644
--- 
a/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/MySQLMySQLSchemaExecutorFactory.java
+++ 
b/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/MySQLMySQLSchemaExecutorFactory.java
@@ -21,6 +21,7 @@ import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 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.proxy.backend.context.ProxyContext;
 import 
org.apache.shardingsphere.proxy.backend.handler.admin.executor.AbstractDatabaseMetaDataExecutor.DefaultDatabaseMetaDataExecutor;
 import 
org.apache.shardingsphere.proxy.backend.handler.admin.executor.DatabaseAdminExecutor;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
@@ -50,7 +51,7 @@ public final class MySQLMySQLSchemaExecutorFactory {
         }
         String tableName = ((SimpleTableSegment) 
sqlStatement.getFrom().get()).getTableName().getIdentifier().getValue();
         if (SystemSchemaManager.isSystemTable("mysql", "mysql", tableName)) {
-            return Optional.of(new DefaultDatabaseMetaDataExecutor(sql, 
parameters));
+            return Optional.of(new 
DefaultDatabaseMetaDataExecutor(ProxyContext.getInstance().getContextManager(), 
sql, parameters));
         }
         return Optional.empty();
     }
diff --git 
a/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/MySQLPerformanceSchemaExecutorFactory.java
 
b/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/MySQLPerformanceSchemaExecutorFactory.java
index f3818906812..fc421c026e3 100644
--- 
a/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/MySQLPerformanceSchemaExecutorFactory.java
+++ 
b/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/MySQLPerformanceSchemaExecutorFactory.java
@@ -21,6 +21,7 @@ import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 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.proxy.backend.context.ProxyContext;
 import 
org.apache.shardingsphere.proxy.backend.handler.admin.executor.AbstractDatabaseMetaDataExecutor.DefaultDatabaseMetaDataExecutor;
 import 
org.apache.shardingsphere.proxy.backend.handler.admin.executor.DatabaseAdminExecutor;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
@@ -50,7 +51,7 @@ public final class MySQLPerformanceSchemaExecutorFactory {
         }
         String tableName = ((SimpleTableSegment) 
sqlStatement.getFrom().get()).getTableName().getIdentifier().getValue();
         if (SystemSchemaManager.isSystemTable("mysql", "performance_schema", 
tableName)) {
-            return Optional.of(new DefaultDatabaseMetaDataExecutor(sql, 
parameters));
+            return Optional.of(new 
DefaultDatabaseMetaDataExecutor(ProxyContext.getInstance().getContextManager(), 
sql, parameters));
         }
         return Optional.empty();
     }
diff --git 
a/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/MySQLSysSchemaExecutorFactory.java
 
b/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/MySQLSysSchemaExecutorFactory.java
index 9bded304dcc..0b806283dd3 100644
--- 
a/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/MySQLSysSchemaExecutorFactory.java
+++ 
b/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/MySQLSysSchemaExecutorFactory.java
@@ -21,6 +21,7 @@ import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 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.proxy.backend.context.ProxyContext;
 import 
org.apache.shardingsphere.proxy.backend.handler.admin.executor.AbstractDatabaseMetaDataExecutor.DefaultDatabaseMetaDataExecutor;
 import 
org.apache.shardingsphere.proxy.backend.handler.admin.executor.DatabaseAdminExecutor;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
@@ -50,7 +51,7 @@ public final class MySQLSysSchemaExecutorFactory {
         }
         String tableName = ((SimpleTableSegment) 
sqlStatement.getFrom().get()).getTableName().getIdentifier().getValue();
         if (SystemSchemaManager.isSystemTable("mysql", "sys", tableName)) {
-            return Optional.of(new DefaultDatabaseMetaDataExecutor(sql, 
parameters));
+            return Optional.of(new 
DefaultDatabaseMetaDataExecutor(ProxyContext.getInstance().getContextManager(), 
sql, parameters));
         }
         return Optional.empty();
     }
diff --git 
a/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/information/SelectInformationSchemataExecutor.java
 
b/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/information/SelectInformationSchemataExecutor.java
index 83b9e5c3e9c..cd292d23bbb 100644
--- 
a/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/information/SelectInformationSchemataExecutor.java
+++ 
b/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/information/SelectInformationSchemataExecutor.java
@@ -69,7 +69,7 @@ public final class SelectInformationSchemataExecutor extends 
DefaultDatabaseMeta
     private boolean queryDatabase;
     
     public SelectInformationSchemataExecutor(final SelectStatement 
sqlStatement, final String sql, final List<Object> parameters) {
-        super(sql, parameters);
+        super(ProxyContext.getInstance().getContextManager(), sql, parameters);
         this.sqlStatement = sqlStatement;
     }
     
diff --git 
a/proxy/backend/dialect/opengauss/src/main/java/org/apache/shardingsphere/proxy/backend/opengauss/handler/admin/OpenGaussSystemTableQueryExecutorCreator.java
 
b/proxy/backend/dialect/opengauss/src/main/java/org/apache/shardingsphere/proxy/backend/opengauss/handler/admin/OpenGaussSystemTableQueryExecutorCreator.java
index 4d195160ae2..3322eecaccf 100644
--- 
a/proxy/backend/dialect/opengauss/src/main/java/org/apache/shardingsphere/proxy/backend/opengauss/handler/admin/OpenGaussSystemTableQueryExecutorCreator.java
+++ 
b/proxy/backend/dialect/opengauss/src/main/java/org/apache/shardingsphere/proxy/backend/opengauss/handler/admin/OpenGaussSystemTableQueryExecutorCreator.java
@@ -30,6 +30,7 @@ import 
org.apache.shardingsphere.infra.binder.context.statement.type.dml.SelectS
 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;
+import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import 
org.apache.shardingsphere.proxy.backend.handler.admin.executor.AbstractDatabaseMetaDataExecutor.DefaultDatabaseMetaDataExecutor;
 import 
org.apache.shardingsphere.proxy.backend.handler.admin.executor.DatabaseAdminExecutor;
 import 
org.apache.shardingsphere.proxy.backend.opengauss.handler.admin.executor.OpenGaussSelectDatCompatibilityExecutor;
@@ -81,7 +82,7 @@ public final class OpenGaussSystemTableQueryExecutorCreator {
             return Optional.empty();
         }
         if (isSelectSystemTable(selectedSchemaTables)) {
-            return Optional.of(new DefaultDatabaseMetaDataExecutor(sql, 
parameters));
+            return Optional.of(new 
DefaultDatabaseMetaDataExecutor(ProxyContext.getInstance().getContextManager(), 
sql, parameters));
         }
         return Optional.empty();
     }
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 43e35f2884d..dfaf8562e12 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
@@ -25,6 +25,7 @@ import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementCont
 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;
+import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import 
org.apache.shardingsphere.proxy.backend.handler.admin.executor.AbstractDatabaseMetaDataExecutor.DefaultDatabaseMetaDataExecutor;
 import 
org.apache.shardingsphere.proxy.backend.handler.admin.executor.DatabaseAdminExecutor;
 import 
org.apache.shardingsphere.proxy.backend.handler.admin.executor.DatabaseAdminExecutorCreator;
@@ -79,7 +80,7 @@ public final class PostgreSQLAdminExecutorCreator implements 
DatabaseAdminExecut
                 return Optional.empty();
             }
             if (isSelectSystemTable(selectedSchemaTables)) {
-                return Optional.of(new DefaultDatabaseMetaDataExecutor(sql, 
parameters));
+                return Optional.of(new 
DefaultDatabaseMetaDataExecutor(ProxyContext.getInstance().getContextManager(), 
sql, parameters));
             }
         }
         if (sqlStatement instanceof SetStatement) {

Reply via email to