This is an automated email from the ASF dual-hosted git repository.
panjuan 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 4dc5bc4c050 Make show tables from schema work in ShardingSphere-Proxy
(#19411)
4dc5bc4c050 is described below
commit 4dc5bc4c050cde77de0f3a2f460f737a36577d5d
Author: 吴伟杰 <[email protected]>
AuthorDate: Thu Jul 21 12:56:48 2022 +0800
Make show tables from schema work in ShardingSphere-Proxy (#19411)
---
.../admin/mysql/executor/ShowTablesExecutor.java | 24 +++++++++++----------
.../mysql/executor/ShowTablesExecutorTest.java | 25 +++++++++++++++++++++-
2 files changed, 37 insertions(+), 12 deletions(-)
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowTablesExecutor.java
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowTablesExecutor.java
index fe44e30fe3a..7366275a379 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowTablesExecutor.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowTablesExecutor.java
@@ -48,7 +48,6 @@ import java.util.stream.Collectors;
* Show tables executor.
*/
@RequiredArgsConstructor
-@Getter
public final class ShowTablesExecutor implements DatabaseAdminQueryExecutor {
private static final String TABLE_TYPE = "BASE TABLE";
@@ -57,14 +56,25 @@ public final class ShowTablesExecutor implements
DatabaseAdminQueryExecutor {
private final DatabaseType databaseType;
+ @Getter
private QueryResultMetaData queryResultMetaData;
+ @Getter
private MergedResult mergedResult;
@Override
public void execute(final ConnectionSession connectionSession) {
- queryResultMetaData =
createQueryResultMetaData(connectionSession.getDatabaseName());
- mergedResult = new
TransparentMergedResult(getQueryResult(connectionSession.getDatabaseName()));
+ String databaseName = showTablesStatement.getFromSchema().map(schema
->
schema.getSchema().getIdentifier().getValue()).orElseGet(connectionSession::getDatabaseName);
+ queryResultMetaData = createQueryResultMetaData(databaseName);
+ mergedResult = new
TransparentMergedResult(getQueryResult(databaseName));
+ }
+
+ private QueryResultMetaData createQueryResultMetaData(final String
databaseName) {
+ List<RawQueryResultColumnMetaData> columnNames = new LinkedList<>();
+ String tableColumnName = String.format("Tables_in_%s", databaseName);
+ columnNames.add(new RawQueryResultColumnMetaData("", tableColumnName,
tableColumnName, Types.VARCHAR, "VARCHAR", 255, 0));
+ columnNames.add(new RawQueryResultColumnMetaData("", "Table_type",
"Table_type", Types.VARCHAR, "VARCHAR", 20, 0));
+ return new RawQueryResultMetaData(columnNames);
}
private QueryResult getQueryResult(final String databaseName) {
@@ -89,12 +99,4 @@ public final class ShowTablesExecutor implements
DatabaseAdminQueryExecutor {
}
return result;
}
-
- private QueryResultMetaData createQueryResultMetaData(final String
databaseName) {
- List<RawQueryResultColumnMetaData> columnNames = new LinkedList<>();
- String tableColumnName = String.format("Tables_in_%s", databaseName);
- columnNames.add(new RawQueryResultColumnMetaData("", tableColumnName,
tableColumnName, Types.VARCHAR, "VARCHAR", 255, 0));
- columnNames.add(new RawQueryResultColumnMetaData("", "Table_type",
"Table_type", Types.VARCHAR, "VARCHAR", 20, 0));
- return new RawQueryResultMetaData(columnNames);
- }
}
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowTablesExecutorTest.java
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowTablesExecutorTest.java
index e65d9649462..00d31c23612 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowTablesExecutorTest.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowTablesExecutorTest.java
@@ -20,7 +20,9 @@ package
org.apache.shardingsphere.proxy.backend.text.admin.mysql.executor;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.database.type.DatabaseTypeEngine;
import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
+import
org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResultMetaData;
import
org.apache.shardingsphere.infra.federation.optimizer.context.OptimizerContext;
+import org.apache.shardingsphere.infra.merge.result.MergedResult;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import
org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
@@ -33,8 +35,11 @@ import
org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
import org.apache.shardingsphere.proxy.backend.util.ProxyContextRestorer;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.dal.FromSchemaSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dal.ShowFilterSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dal.ShowLikeSegment;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.DatabaseSegment;
+import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowTablesStatement;
import org.junit.Before;
import org.junit.Test;
@@ -78,7 +83,12 @@ public final class ShowTablesExecutorTest extends
ProxyContextRestorer {
when(database.getSchemas().get(String.format(DATABASE_PATTERN,
0))).thenReturn(schema);
when(database.isComplete()).thenReturn(true);
when(database.getResource().getDatabaseType()).thenReturn(new
MySQLDatabaseType());
- return Collections.singletonMap(String.format(DATABASE_PATTERN, 0),
database);
+ Map<String, ShardingSphereDatabase> result = new HashMap<>(2, 1);
+ result.put(String.format(DATABASE_PATTERN, 0), database);
+ ShardingSphereDatabase uncompletedDatabase =
mock(ShardingSphereDatabase.class);
+ when(uncompletedDatabase.isComplete()).thenReturn(false);
+ result.put("uncompleted", uncompletedDatabase);
+ return result;
}
@Test
@@ -157,6 +167,19 @@ public final class ShowTablesExecutorTest extends
ProxyContextRestorer {
assertFalse(showTablesExecutor.getMergedResult().next());
}
+ @Test
+ public void assertShowTableFromUncompletedDatabase() throws SQLException {
+ MySQLShowTablesStatement showTablesStatement = new
MySQLShowTablesStatement();
+ showTablesStatement.setFromSchema(new FromSchemaSegment(0, 0, new
DatabaseSegment(0, 0, new IdentifierValue("uncompleted"))));
+ ShowTablesExecutor showTablesExecutor = new
ShowTablesExecutor(showTablesStatement, new MySQLDatabaseType());
+ showTablesExecutor.execute(mockConnectionSession());
+ QueryResultMetaData actualMetaData =
showTablesExecutor.getQueryResultMetaData();
+ assertThat(actualMetaData.getColumnCount(), is(2));
+ assertThat(actualMetaData.getColumnName(1),
is("Tables_in_uncompleted"));
+ MergedResult actualResult = showTablesExecutor.getMergedResult();
+ assertFalse(actualResult.next());
+ }
+
private ConnectionSession mockConnectionSession() {
ConnectionSession result = mock(ConnectionSession.class);
when(result.getGrantee()).thenReturn(new Grantee("root", ""));