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 f0e6450c6d4 Refactor MySQLShowTablesExecutor (#36863)
f0e6450c6d4 is described below
commit f0e6450c6d455604fe675200a5f2a739bce8b313
Author: Liang Zhang <[email protected]>
AuthorDate: Mon Oct 13 00:12:51 2025 +0800
Refactor MySQLShowTablesExecutor (#36863)
---
.../handler/admin/MySQLAdminExecutorCreator.java | 2 +-
.../show/MySQLShowFunctionStatusExecutor.java | 8 +++----
.../show/MySQLShowProcedureStatusExecutor.java | 8 +++----
.../executor/show/MySQLShowTablesExecutor.java | 21 +++++++---------
.../executor/show/MySQLShowTablesExecutorTest.java | 28 ++++++++++------------
5 files changed, 31 insertions(+), 36 deletions(-)
diff --git
a/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/MySQLAdminExecutorCreator.java
b/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/MySQLAdminExecutorCreator.java
index af564a584e2..98901bceaf3 100644
---
a/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/MySQLAdminExecutorCreator.java
+++
b/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/MySQLAdminExecutorCreator.java
@@ -63,7 +63,7 @@ public final class MySQLAdminExecutorCreator implements
DatabaseAdminExecutorCre
return Optional.of(new
MySQLShowDatabasesExecutor((MySQLShowDatabasesStatement) sqlStatement));
}
if (sqlStatement instanceof MySQLShowTablesStatement) {
- return Optional.of(new
MySQLShowTablesExecutor((MySQLShowTablesStatement) sqlStatement,
sqlStatementContext.getSqlStatement().getDatabaseType()));
+ return Optional.of(new
MySQLShowTablesExecutor((MySQLShowTablesStatement) sqlStatement));
}
if (sqlStatement instanceof MySQLShowCreateDatabaseStatement) {
return Optional.of(new
MySQLShowCreateDatabaseExecutor((MySQLShowCreateDatabaseStatement)
sqlStatement));
diff --git
a/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/show/MySQLShowFunctionStatusExecutor.java
b/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/show/MySQLShowFunctionStatusExecutor.java
index 15a1f217c21..74a1ab733a0 100644
---
a/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/show/MySQLShowFunctionStatusExecutor.java
+++
b/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/show/MySQLShowFunctionStatusExecutor.java
@@ -55,10 +55,6 @@ public final class MySQLShowFunctionStatusExecutor
implements DatabaseAdminQuery
mergedResult = new TransparentMergedResult(getQueryResult());
}
- private QueryResult getQueryResult() {
- return new RawMemoryQueryResult(queryResultMetaData,
Collections.emptyList());
- }
-
private QueryResultMetaData createQueryResultMetaData() {
List<RawQueryResultColumnMetaData> columns = new ArrayList<>(11);
columns.add(new RawQueryResultColumnMetaData("", "Db", "Db",
Types.VARCHAR, "VARCHAR", 255, 0));
@@ -74,4 +70,8 @@ public final class MySQLShowFunctionStatusExecutor implements
DatabaseAdminQuery
columns.add(new RawQueryResultColumnMetaData("", "Database_Collation",
"Database_Collation", Types.VARCHAR, "VARCHAR", 20, 0));
return new RawQueryResultMetaData(columns);
}
+
+ private QueryResult getQueryResult() {
+ return new RawMemoryQueryResult(queryResultMetaData,
Collections.emptyList());
+ }
}
diff --git
a/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/show/MySQLShowProcedureStatusExecutor.java
b/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/show/MySQLShowProcedureStatusExecutor.java
index a223ed1f8e4..9a5e53febeb 100644
---
a/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/show/MySQLShowProcedureStatusExecutor.java
+++
b/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/show/MySQLShowProcedureStatusExecutor.java
@@ -55,10 +55,6 @@ public final class MySQLShowProcedureStatusExecutor
implements DatabaseAdminQuer
mergedResult = new TransparentMergedResult(getQueryResult());
}
- private QueryResult getQueryResult() {
- return new RawMemoryQueryResult(queryResultMetaData,
Collections.emptyList());
- }
-
private QueryResultMetaData createQueryResultMetaData() {
List<RawQueryResultColumnMetaData> columns = new ArrayList<>(11);
columns.add(new RawQueryResultColumnMetaData("", "Db", "Db",
Types.VARCHAR, "VARCHAR", 255, 0));
@@ -74,4 +70,8 @@ public final class MySQLShowProcedureStatusExecutor
implements DatabaseAdminQuer
columns.add(new RawQueryResultColumnMetaData("", "Database_Collation",
"Database_Collation", Types.VARCHAR, "VARCHAR", 20, 0));
return new RawQueryResultMetaData(columns);
}
+
+ private QueryResult getQueryResult() {
+ return new RawMemoryQueryResult(queryResultMetaData,
Collections.emptyList());
+ }
}
diff --git
a/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/show/MySQLShowTablesExecutor.java
b/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/show/MySQLShowTablesExecutor.java
index 8170d1e645e..e38f1b7b496 100644
---
a/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/show/MySQLShowTablesExecutor.java
+++
b/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/show/MySQLShowTablesExecutor.java
@@ -20,7 +20,6 @@ package
org.apache.shardingsphere.proxy.backend.mysql.handler.admin.executor.sho
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import
org.apache.shardingsphere.database.connector.core.metadata.database.system.SystemDatabase;
-import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
import
org.apache.shardingsphere.database.exception.core.exception.syntax.database.UnknownDatabaseException;
import org.apache.shardingsphere.infra.exception.ShardingSpherePreconditions;
import
org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResult;
@@ -40,11 +39,11 @@ import
org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
import
org.apache.shardingsphere.sql.parser.statement.mysql.dal.show.table.MySQLShowTablesStatement;
import java.sql.Types;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
-import java.util.LinkedList;
import java.util.List;
import java.util.Optional;
import java.util.regex.Pattern;
@@ -58,8 +57,6 @@ public final class MySQLShowTablesExecutor implements
DatabaseAdminQueryExecutor
private final MySQLShowTablesStatement sqlStatement;
- private final DatabaseType databaseType;
-
@Getter
private QueryResultMetaData queryResultMetaData;
@@ -74,7 +71,7 @@ public final class MySQLShowTablesExecutor implements
DatabaseAdminQueryExecutor
}
private QueryResultMetaData createQueryResultMetaData(final String
databaseName) {
- List<RawQueryResultColumnMetaData> columnNames = new LinkedList<>();
+ List<RawQueryResultColumnMetaData> columnNames = new ArrayList<>(2);
String tableColumnName = String.format("Tables_in_%s", databaseName);
columnNames.add(new RawQueryResultColumnMetaData("", tableColumnName,
tableColumnName, Types.VARCHAR, "VARCHAR", 255, 0));
if (sqlStatement.isContainsFull()) {
@@ -84,7 +81,7 @@ public final class MySQLShowTablesExecutor implements
DatabaseAdminQueryExecutor
}
private QueryResult getQueryResult(final String databaseName, final
ShardingSphereMetaData metaData) {
- SystemDatabase systemDatabase = new SystemDatabase(databaseType);
+ SystemDatabase systemDatabase = new
SystemDatabase(sqlStatement.getDatabaseType());
ShardingSpherePreconditions.checkState(metaData.containsDatabase(databaseName),
() -> new UnknownDatabaseException(databaseName));
ShardingSphereDatabase database = metaData.getDatabase(databaseName);
List<MemoryQueryResultDataRow> rows =
systemDatabase.getSystemSchemas().contains(databaseName) ||
database.isComplete()
@@ -93,12 +90,6 @@ public final class MySQLShowTablesExecutor implements
DatabaseAdminQueryExecutor
return new RawMemoryQueryResult(queryResultMetaData, rows);
}
- private MemoryQueryResultDataRow getRow(final ShardingSphereTable table) {
- return sqlStatement.isContainsFull()
- ? new MemoryQueryResultDataRow(Arrays.asList(table.getName(),
table.getType()))
- : new
MemoryQueryResultDataRow(Collections.singletonList(table.getName()));
- }
-
private Collection<ShardingSphereTable> getTables(final
ShardingSphereDatabase database) {
if (null == database.getSchema(database.getName())) {
return Collections.emptyList();
@@ -120,4 +111,10 @@ public final class MySQLShowTablesExecutor implements
DatabaseAdminQueryExecutor
Optional<String> regex =
sqlStatement.getFilter().get().getLike().map(optional ->
RegexUtils.convertLikePatternToRegex(optional.getPattern()));
return regex.map(optional -> Pattern.compile(optional,
Pattern.CASE_INSENSITIVE));
}
+
+ private MemoryQueryResultDataRow getRow(final ShardingSphereTable table) {
+ return sqlStatement.isContainsFull()
+ ? new MemoryQueryResultDataRow(Arrays.asList(table.getName(),
table.getType()))
+ : new
MemoryQueryResultDataRow(Collections.singletonList(table.getName()));
+ }
}
diff --git
a/proxy/backend/dialect/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/show/MySQLShowTablesExecutorTest.java
b/proxy/backend/dialect/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/show/MySQLShowTablesExecutorTest.java
index da532cc7265..41d4aded6f0 100644
---
a/proxy/backend/dialect/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/show/MySQLShowTablesExecutorTest.java
+++
b/proxy/backend/dialect/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/show/MySQLShowTablesExecutorTest.java
@@ -67,7 +67,7 @@ class MySQLShowTablesExecutorTest {
@Test
void assertShowTablesExecutorWithoutFilter() throws SQLException {
- MySQLShowTablesExecutor executor = new MySQLShowTablesExecutor(new
MySQLShowTablesStatement(databaseType, null, null, false), databaseType);
+ MySQLShowTablesExecutor executor = new MySQLShowTablesExecutor(new
MySQLShowTablesStatement(databaseType, null, null, false));
executor.execute(mockConnectionSession(),
mockMetaData(mockDatabases()));
assertThat(executor.getQueryResultMetaData().getColumnCount(), is(1));
executor.getMergedResult().next();
@@ -83,9 +83,8 @@ class MySQLShowTablesExecutorTest {
@Test
void assertShowTablesExecutorWithFull() throws SQLException {
- MySQLShowTablesStatement showTablesStatement =
mock(MySQLShowTablesStatement.class);
- when(showTablesStatement.isContainsFull()).thenReturn(true);
- MySQLShowTablesExecutor executor = new
MySQLShowTablesExecutor(showTablesStatement, databaseType);
+ MySQLShowTablesStatement sqlStatement = new
MySQLShowTablesStatement(databaseType, null, mock(), true);
+ MySQLShowTablesExecutor executor = new
MySQLShowTablesExecutor(sqlStatement);
executor.execute(mockConnectionSession(),
mockMetaData(mockDatabases()));
assertThat(executor.getQueryResultMetaData().getColumnCount(), is(2));
}
@@ -94,8 +93,8 @@ class MySQLShowTablesExecutorTest {
void assertShowTablesExecutorWithLikeFilter() throws SQLException {
ShowFilterSegment showFilterSegment = mock(ShowFilterSegment.class);
when(showFilterSegment.getLike()).thenReturn(Optional.of(new
ShowLikeSegment(0, 10, "t_account%")));
- MySQLShowTablesStatement showTablesStatement = new
MySQLShowTablesStatement(databaseType, null, showFilterSegment, false);
- MySQLShowTablesExecutor executor = new
MySQLShowTablesExecutor(showTablesStatement, databaseType);
+ MySQLShowTablesStatement sqlStatement = new
MySQLShowTablesStatement(databaseType, null, showFilterSegment, false);
+ MySQLShowTablesExecutor executor = new
MySQLShowTablesExecutor(sqlStatement);
executor.execute(mockConnectionSession(),
mockMetaData(mockDatabases()));
assertThat(executor.getQueryResultMetaData().getColumnCount(), is(1));
executor.getMergedResult().next();
@@ -111,8 +110,8 @@ class MySQLShowTablesExecutorTest {
void assertShowTablesExecutorWithSpecificTable() throws SQLException {
ShowFilterSegment showFilterSegment = mock(ShowFilterSegment.class);
when(showFilterSegment.getLike()).thenReturn(Optional.of(new
ShowLikeSegment(0, 10, "t_account")));
- MySQLShowTablesStatement showTablesStatement = new
MySQLShowTablesStatement(databaseType, null, showFilterSegment, false);
- MySQLShowTablesExecutor executor = new
MySQLShowTablesExecutor(showTablesStatement, databaseType);
+ MySQLShowTablesStatement sqlStatement = new
MySQLShowTablesStatement(databaseType, null, showFilterSegment, false);
+ MySQLShowTablesExecutor executor = new
MySQLShowTablesExecutor(sqlStatement);
executor.execute(mockConnectionSession(),
mockMetaData(mockDatabases()));
assertThat(executor.getQueryResultMetaData().getColumnCount(), is(1));
executor.getMergedResult().next();
@@ -124,8 +123,8 @@ class MySQLShowTablesExecutorTest {
void assertShowTablesExecutorWithUpperCase() throws SQLException {
ShowFilterSegment showFilterSegment = mock(ShowFilterSegment.class);
when(showFilterSegment.getLike()).thenReturn(Optional.of(new
ShowLikeSegment(0, 10, "T_TEST")));
- MySQLShowTablesStatement showTablesStatement = new
MySQLShowTablesStatement(databaseType, null, showFilterSegment, false);
- MySQLShowTablesExecutor executor = new
MySQLShowTablesExecutor(showTablesStatement, databaseType);
+ MySQLShowTablesStatement sqlStatement = new
MySQLShowTablesStatement(databaseType, null, showFilterSegment, false);
+ MySQLShowTablesExecutor executor = new
MySQLShowTablesExecutor(sqlStatement);
executor.execute(mockConnectionSession(),
mockMetaData(mockDatabases()));
assertThat(executor.getQueryResultMetaData().getColumnCount(), is(1));
executor.getMergedResult().next();
@@ -137,8 +136,8 @@ class MySQLShowTablesExecutorTest {
void assertShowTablesExecutorWithLowerCase() throws SQLException {
ShowFilterSegment showFilterSegment = mock(ShowFilterSegment.class);
when(showFilterSegment.getLike()).thenReturn(Optional.of(new
ShowLikeSegment(0, 10, "t_test")));
- MySQLShowTablesStatement showTablesStatement = new
MySQLShowTablesStatement(databaseType, null, showFilterSegment, false);
- MySQLShowTablesExecutor executor = new
MySQLShowTablesExecutor(showTablesStatement, databaseType);
+ MySQLShowTablesStatement sqlStatement = new
MySQLShowTablesStatement(databaseType, null, showFilterSegment, false);
+ MySQLShowTablesExecutor executor = new
MySQLShowTablesExecutor(sqlStatement);
executor.execute(mockConnectionSession(),
mockMetaData(mockDatabases()));
assertThat(executor.getQueryResultMetaData().getColumnCount(), is(1));
executor.getMergedResult().next();
@@ -148,9 +147,8 @@ class MySQLShowTablesExecutorTest {
@Test
void assertShowTableFromUncompletedDatabase() throws SQLException {
- MySQLShowTablesStatement showTablesStatement = new
MySQLShowTablesStatement(
- databaseType, new FromDatabaseSegment(0, new
DatabaseSegment(0, 0, new IdentifierValue("uncompleted"))), null, false);
- MySQLShowTablesExecutor executor = new
MySQLShowTablesExecutor(showTablesStatement, databaseType);
+ MySQLShowTablesStatement sqlStatement = new
MySQLShowTablesStatement(databaseType, new FromDatabaseSegment(0, new
DatabaseSegment(0, 0, new IdentifierValue("uncompleted"))), null, false);
+ MySQLShowTablesExecutor executor = new
MySQLShowTablesExecutor(sqlStatement);
executor.execute(mockConnectionSession(),
mockMetaData(mockDatabases()));
QueryResultMetaData actualMetaData = executor.getQueryResultMetaData();
assertThat(actualMetaData.getColumnCount(), is(1));