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>