You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2023/05/02 23:54:16 UTC
[shardingsphere] branch master updated: show table supports the full keyword (#25377)
This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang 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 fbe399d9f37 show table supports the full keyword (#25377)
fbe399d9f37 is described below
commit fbe399d9f37a3a2c0b0fd735d9c548a953d9779b
Author: Guocheng Tang <to...@apache.org>
AuthorDate: Wed May 3 07:54:08 2023 +0800
show table supports the full keyword (#25377)
* show table supports the full keyword
* fix junit test
* fix junit test
* for code review
* fix e2e test
* fix e2e test
---
.../handler/admin/executor/ShowTablesExecutor.java | 10 ++++++---
.../admin/executor/ShowTablesExecutorTest.java | 25 ++++++++++++++++------
.../statement/type/MySQLDALStatementVisitor.java | 1 +
.../mysql/dal/MySQLShowTablesStatement.java | 4 ++++
.../cases/ral/dataset/empty_rules/show_tables.xml | 7 +++---
.../alter_sharding_rules_show_tables.xml | 17 +++++++--------
.../create_sharding_rules_show_tables.xml | 21 +++++++++---------
.../drop_sharding_rules_show_tables.xml | 23 ++++++++++----------
8 files changed, 63 insertions(+), 45 deletions(-)
diff --git a/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowTablesExecutor.java b/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowTablesExecutor.java
index f5f08948c8b..c58cbb4ee30 100644
--- a/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowTablesExecutor.java
+++ b/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowTablesExecutor.java
@@ -30,8 +30,8 @@ import org.apache.shardingsphere.infra.merge.result.MergedResult;
import org.apache.shardingsphere.infra.merge.result.impl.transparent.TransparentMergedResult;
import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
-import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
import org.apache.shardingsphere.proxy.backend.handler.admin.executor.DatabaseAdminQueryExecutor;
+import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
import org.apache.shardingsphere.proxy.backend.util.RegularUtils;
import org.apache.shardingsphere.sql.parser.sql.common.util.SQLUtils;
import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowTablesStatement;
@@ -73,7 +73,9 @@ public final class ShowTablesExecutor implements DatabaseAdminQueryExecutor {
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));
+ if (showTablesStatement.isContainsFull()) {
+ columnNames.add(new RawQueryResultColumnMetaData("", "Table_type", "Table_type", Types.VARCHAR, "VARCHAR", 20, 0));
+ }
return new RawQueryResultMetaData(columnNames);
}
@@ -84,7 +86,9 @@ public final class ShowTablesExecutor implements DatabaseAdminQueryExecutor {
List<MemoryQueryResultDataRow> rows = getAllTableNames(databaseName).stream().map(each -> {
List<Object> rowValues = new LinkedList<>();
rowValues.add(each);
- rowValues.add(TABLE_TYPE);
+ if (showTablesStatement.isContainsFull()) {
+ rowValues.add(TABLE_TYPE);
+ }
return new MemoryQueryResultDataRow(rowValues);
}).collect(Collectors.toList());
return new RawMemoryQueryResult(queryResultMetaData, rows);
diff --git a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowTablesExecutorTest.java b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowTablesExecutorTest.java
index 958beb7ee20..1f2ecd223bb 100644
--- a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowTablesExecutorTest.java
+++ b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/ShowTablesExecutorTest.java
@@ -74,7 +74,7 @@ class ShowTablesExecutorTest {
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
when(ProxyContext.getInstance().getDatabase("db_0")).thenReturn(databases.get("db_0"));
executor.execute(mockConnectionSession());
- assertThat(executor.getQueryResultMetaData().getColumnCount(), is(2));
+ assertThat(executor.getQueryResultMetaData().getColumnCount(), is(1));
executor.getMergedResult().next();
assertThat(executor.getMergedResult().getValue(1, Object.class), is("T_TEST"));
executor.getMergedResult().next();
@@ -86,6 +86,19 @@ class ShowTablesExecutorTest {
assertFalse(executor.getMergedResult().next());
}
+ @Test
+ void assertShowTablesExecutorWithFull() throws SQLException {
+ MySQLShowTablesStatement showTablesStatement = mock(MySQLShowTablesStatement.class);
+ when(showTablesStatement.isContainsFull()).thenReturn(true);
+ ShowTablesExecutor executor = new ShowTablesExecutor(showTablesStatement, DatabaseTypeEngine.getDatabaseType("MySQL"));
+ Map<String, ShardingSphereDatabase> databases = getDatabases();
+ ContextManager contextManager = mockContextManager(databases);
+ when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+ when(ProxyContext.getInstance().getDatabase("db_0")).thenReturn(databases.get("db_0"));
+ executor.execute(mockConnectionSession());
+ assertThat(executor.getQueryResultMetaData().getColumnCount(), is(2));
+ }
+
@Test
void assertShowTablesExecutorWithLikeFilter() throws SQLException {
MySQLShowTablesStatement showTablesStatement = new MySQLShowTablesStatement();
@@ -98,7 +111,7 @@ class ShowTablesExecutorTest {
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
when(ProxyContext.getInstance().getDatabase("db_0")).thenReturn(databases.get("db_0"));
executor.execute(mockConnectionSession());
- assertThat(executor.getQueryResultMetaData().getColumnCount(), is(2));
+ assertThat(executor.getQueryResultMetaData().getColumnCount(), is(1));
executor.getMergedResult().next();
assertThat(executor.getMergedResult().getValue(1, Object.class), is("t_account"));
executor.getMergedResult().next();
@@ -120,7 +133,7 @@ class ShowTablesExecutorTest {
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
when(ProxyContext.getInstance().getDatabase("db_0")).thenReturn(databases.get("db_0"));
executor.execute(mockConnectionSession());
- assertThat(executor.getQueryResultMetaData().getColumnCount(), is(2));
+ assertThat(executor.getQueryResultMetaData().getColumnCount(), is(1));
executor.getMergedResult().next();
assertThat(executor.getMergedResult().getValue(1, Object.class), is("t_account"));
assertFalse(executor.getMergedResult().next());
@@ -138,7 +151,7 @@ class ShowTablesExecutorTest {
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
when(ProxyContext.getInstance().getDatabase("db_0")).thenReturn(databases.get("db_0"));
executor.execute(mockConnectionSession());
- assertThat(executor.getQueryResultMetaData().getColumnCount(), is(2));
+ assertThat(executor.getQueryResultMetaData().getColumnCount(), is(1));
executor.getMergedResult().next();
assertThat(executor.getMergedResult().getValue(1, Object.class), is("T_TEST"));
assertFalse(executor.getMergedResult().next());
@@ -156,7 +169,7 @@ class ShowTablesExecutorTest {
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
when(ProxyContext.getInstance().getDatabase("db_0")).thenReturn(databases.get("db_0"));
executor.execute(mockConnectionSession());
- assertThat(executor.getQueryResultMetaData().getColumnCount(), is(2));
+ assertThat(executor.getQueryResultMetaData().getColumnCount(), is(1));
executor.getMergedResult().next();
assertThat(executor.getMergedResult().getValue(1, Object.class), is("T_TEST"));
assertFalse(executor.getMergedResult().next());
@@ -171,7 +184,7 @@ class ShowTablesExecutorTest {
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
executor.execute(mockConnectionSession());
QueryResultMetaData actualMetaData = executor.getQueryResultMetaData();
- assertThat(actualMetaData.getColumnCount(), is(2));
+ assertThat(actualMetaData.getColumnCount(), is(1));
assertThat(actualMetaData.getColumnName(1), is("Tables_in_uncompleted"));
MergedResult actualResult = executor.getMergedResult();
assertFalse(actualResult.next());
diff --git a/sql-parser/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDALStatementVisitor.java b/sql-parser/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDALStatementVisitor.java
index 25d92faa5b1..472413a9c95 100644
--- a/sql-parser/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDALStatementVisitor.java
+++ b/sql-parser/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDALStatementVisitor.java
@@ -635,6 +635,7 @@ public final class MySQLDALStatementVisitor extends MySQLStatementVisitor implem
if (null != ctx.showFilter()) {
result.setFilter((ShowFilterSegment) visit(ctx.showFilter()));
}
+ result.setContainsFull(null != ctx.FULL());
result.getParameterMarkerSegments().addAll(getParameterMarkerSegments());
return result;
}
diff --git a/sql-parser/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/dal/MySQLShowTablesStatement.java b/sql-parser/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/dal/MySQLShowTablesStatement.java
index cdd43c52825..56ee468a5ac 100644
--- a/sql-parser/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/dal/MySQLShowTablesStatement.java
+++ b/sql-parser/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/dal/MySQLShowTablesStatement.java
@@ -17,6 +17,7 @@
package org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal;
+import lombok.Getter;
import lombok.Setter;
import org.apache.shardingsphere.sql.parser.sql.common.segment.dal.FromSchemaSegment;
import org.apache.shardingsphere.sql.parser.sql.common.segment.dal.ShowFilterSegment;
@@ -36,6 +37,9 @@ public final class MySQLShowTablesStatement extends AbstractSQLStatement impleme
private ShowFilterSegment filter;
+ @Getter
+ private boolean containsFull;
+
/**
* Get from schema segment.
*
diff --git a/test/e2e/sql/src/test/resources/cases/ral/dataset/empty_rules/show_tables.xml b/test/e2e/sql/src/test/resources/cases/ral/dataset/empty_rules/show_tables.xml
index d5553d0edff..5b760dc7f61 100644
--- a/test/e2e/sql/src/test/resources/cases/ral/dataset/empty_rules/show_tables.xml
+++ b/test/e2e/sql/src/test/resources/cases/ral/dataset/empty_rules/show_tables.xml
@@ -18,9 +18,8 @@
<dataset>
<metadata>
<column name="Tables_in_empty_rules" />
- <column name="Table_type" />
</metadata>
- <row values="t_single_table| BASE TABLE" />
- <row values="t_user| BASE TABLE" />
- <row values="t_user_item| BASE TABLE" />
+ <row values="t_single_table" />
+ <row values="t_user" />
+ <row values="t_user_item" />
</dataset>
diff --git a/test/e2e/sql/src/test/resources/cases/rdl/dataset/rdl_empty_rules/alter_sharding_rules_show_tables.xml b/test/e2e/sql/src/test/resources/cases/rdl/dataset/rdl_empty_rules/alter_sharding_rules_show_tables.xml
index cba857752a9..cfbae89156d 100644
--- a/test/e2e/sql/src/test/resources/cases/rdl/dataset/rdl_empty_rules/alter_sharding_rules_show_tables.xml
+++ b/test/e2e/sql/src/test/resources/cases/rdl/dataset/rdl_empty_rules/alter_sharding_rules_show_tables.xml
@@ -18,14 +18,13 @@
<dataset>
<metadata>
<column name="Tables_in_rdl_empty_rules" />
- <column name="Table_type" />
</metadata>
- <row values="t_order_item_2| BASE TABLE" />
- <row values="t_order_item_3| BASE TABLE" />
- <row values="t_country| BASE TABLE" />
- <row values="t_order_item_0| BASE TABLE" />
- <row values="t_order_item_1| BASE TABLE" />
- <row values="t_order| BASE TABLE" />
- <row values="t_user| BASE TABLE" />
- <row values="t_product_category| BASE TABLE" />
+ <row values="t_order_item_2" />
+ <row values="t_order_item_3" />
+ <row values="t_country" />
+ <row values="t_order_item_0" />
+ <row values="t_order_item_1" />
+ <row values="t_order" />
+ <row values="t_user" />
+ <row values="t_product_category" />
</dataset>
diff --git a/test/e2e/sql/src/test/resources/cases/rdl/dataset/rdl_empty_rules/create_sharding_rules_show_tables.xml b/test/e2e/sql/src/test/resources/cases/rdl/dataset/rdl_empty_rules/create_sharding_rules_show_tables.xml
index 3f73edff3ed..2c168141497 100644
--- a/test/e2e/sql/src/test/resources/cases/rdl/dataset/rdl_empty_rules/create_sharding_rules_show_tables.xml
+++ b/test/e2e/sql/src/test/resources/cases/rdl/dataset/rdl_empty_rules/create_sharding_rules_show_tables.xml
@@ -18,16 +18,15 @@
<dataset>
<metadata>
<column name="Tables_in_rdl_empty_rules" />
- <column name="Table_type" />
</metadata>
- <row values="t_order_item_2| BASE TABLE" />
- <row values="t_order_item_3| BASE TABLE" />
- <row values="t_country| BASE TABLE" />
- <row values="t_order_item_0| BASE TABLE" />
- <row values="t_order_item_1| BASE TABLE" />
- <row values="t_order| BASE TABLE" />
- <row values="t_user| BASE TABLE" />
- <row values="t_order_2| BASE TABLE" />
- <row values="t_order_3| BASE TABLE" />
- <row values="t_product_category| BASE TABLE" />
+ <row values="t_order_item_2" />
+ <row values="t_order_item_3" />
+ <row values="t_country" />
+ <row values="t_order_item_0" />
+ <row values="t_order_item_1" />
+ <row values="t_order" />
+ <row values="t_user" />
+ <row values="t_order_2" />
+ <row values="t_order_3" />
+ <row values="t_product_category" />
</dataset>
diff --git a/test/e2e/sql/src/test/resources/cases/rdl/dataset/rdl_empty_rules/drop_sharding_rules_show_tables.xml b/test/e2e/sql/src/test/resources/cases/rdl/dataset/rdl_empty_rules/drop_sharding_rules_show_tables.xml
index 42639e2cc9c..497cb88e47a 100644
--- a/test/e2e/sql/src/test/resources/cases/rdl/dataset/rdl_empty_rules/drop_sharding_rules_show_tables.xml
+++ b/test/e2e/sql/src/test/resources/cases/rdl/dataset/rdl_empty_rules/drop_sharding_rules_show_tables.xml
@@ -18,17 +18,16 @@
<dataset>
<metadata>
<column name="Tables_in_rdl_empty_rules" />
- <column name="Table_type" />
</metadata>
- <row values="t_order_item_2| BASE TABLE" />
- <row values="t_order_item_3| BASE TABLE" />
- <row values="t_country| BASE TABLE" />
- <row values="t_order_item_0| BASE TABLE" />
- <row values="t_order_item_1| BASE TABLE" />
- <row values="t_user| BASE TABLE" />
- <row values="t_order_2| BASE TABLE" />
- <row values="t_order_3| BASE TABLE" />
- <row values="t_order_0| BASE TABLE" />
- <row values="t_order_1| BASE TABLE" />
- <row values="t_product_category| BASE TABLE" />
+ <row values="t_order_item_2" />
+ <row values="t_order_item_3" />
+ <row values="t_country" />
+ <row values="t_order_item_0" />
+ <row values="t_order_item_1" />
+ <row values="t_user" />
+ <row values="t_order_2" />
+ <row values="t_order_3" />
+ <row values="t_order_0" />
+ <row values="t_order_1" />
+ <row values="t_product_category" />
</dataset>