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