This is an automated email from the ASF dual-hosted git repository.

zhaojinchao 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 d1cb3335681 Support Postgres schema in DistSQL `REFRESH TABLE 
METADATA`. (#17990)
d1cb3335681 is described below

commit d1cb3335681197b1ba4b7f9c5e188976611dda2f
Author: Raigor <[email protected]>
AuthorDate: Fri May 27 12:22:19 2022 +0800

    Support Postgres schema in DistSQL `REFRESH TABLE METADATA`. (#17990)
    
    * Support Postgres schema in DistSQL `REFRESH TABLE METADATA`.
    
    * Fix CI for 'Reformat'.
    
    * Fix DistSQL test case.
---
 .../src/main/antlr4/imports/RALStatement.g4               |  6 +++++-
 .../parser/core/common/CommonDistSQLStatementVisitor.java | 15 +++++++++++++--
 .../common/updatable/RefreshTableMetadataStatement.java   | 15 +++++++++++++--
 .../ral/common/updatable/RefreshTableMetadataHandler.java |  9 ++++++++-
 .../updatable/RefreshTableMetadataStatementAssert.java    |  7 +++++--
 .../ral/RefreshTableMetadataStatementTestCase.java        |  3 +++
 .../src/main/resources/case/ral/common.xml                |  1 +
 .../src/main/resources/sql/supported/ral/common.xml       |  1 +
 8 files changed, 49 insertions(+), 8 deletions(-)

diff --git 
a/shardingsphere-distsql/shardingsphere-distsql-parser/src/main/antlr4/imports/RALStatement.g4
 
b/shardingsphere-distsql/shardingsphere-distsql-parser/src/main/antlr4/imports/RALStatement.g4
index d2d5c47ca30..71530509e92 100644
--- 
a/shardingsphere-distsql/shardingsphere-distsql-parser/src/main/antlr4/imports/RALStatement.g4
+++ 
b/shardingsphere-distsql/shardingsphere-distsql-parser/src/main/antlr4/imports/RALStatement.g4
@@ -188,7 +188,11 @@ instanceId
     ;
 
 refreshScope
-    : tableName | tableName FROM RESOURCE resourceName
+    : tableName fromSegment?
+    ;
+
+fromSegment
+    : FROM RESOURCE resourceName (SCHEMA schemaName)?
     ;
 
 sqlCommentParseEnable
diff --git 
a/shardingsphere-distsql/shardingsphere-distsql-parser/src/main/java/org/apache/shardingsphere/distsql/parser/core/common/CommonDistSQLStatementVisitor.java
 
b/shardingsphere-distsql/shardingsphere-distsql-parser/src/main/java/org/apache/shardingsphere/distsql/parser/core/common/CommonDistSQLStatementVisitor.java
index 09e22332ec8..d16537e721f 100644
--- 
a/shardingsphere-distsql/shardingsphere-distsql-parser/src/main/java/org/apache/shardingsphere/distsql/parser/core/common/CommonDistSQLStatementVisitor.java
+++ 
b/shardingsphere-distsql/shardingsphere-distsql-parser/src/main/java/org/apache/shardingsphere/distsql/parser/core/common/CommonDistSQLStatementVisitor.java
@@ -44,6 +44,7 @@ import 
org.apache.shardingsphere.distsql.parser.autogen.CommonDistSQLStatementPa
 import 
org.apache.shardingsphere.distsql.parser.autogen.CommonDistSQLStatementParser.DropTrafficRuleContext;
 import 
org.apache.shardingsphere.distsql.parser.autogen.CommonDistSQLStatementParser.EnableInstanceContext;
 import 
org.apache.shardingsphere.distsql.parser.autogen.CommonDistSQLStatementParser.ExportDatabaseConfigurationContext;
+import 
org.apache.shardingsphere.distsql.parser.autogen.CommonDistSQLStatementParser.FromSegmentContext;
 import 
org.apache.shardingsphere.distsql.parser.autogen.CommonDistSQLStatementParser.ImportDatabaseConfigurationContext;
 import 
org.apache.shardingsphere.distsql.parser.autogen.CommonDistSQLStatementParser.InstanceDefinationContext;
 import 
org.apache.shardingsphere.distsql.parser.autogen.CommonDistSQLStatementParser.InstanceIdContext;
@@ -332,8 +333,18 @@ public final class CommonDistSQLStatementVisitor extends 
CommonDistSQLStatementB
     
     @Override
     public ASTNode visitRefreshTableMetadata(final RefreshTableMetadataContext 
ctx) {
-        return null == ctx.refreshScope() ? new RefreshTableMetadataStatement()
-                : new 
RefreshTableMetadataStatement(getIdentifierValue(ctx.refreshScope().tableName()),
 getIdentifierValue(ctx.refreshScope().resourceName()));
+        if (null == ctx.refreshScope()) {
+            return new RefreshTableMetadataStatement();
+        }
+        String tableName = getIdentifierValue(ctx.refreshScope().tableName());
+        String databaseName = null;
+        String schemaName = null;
+        if (null != ctx.refreshScope().fromSegment()) {
+            FromSegmentContext fromSegment = ctx.refreshScope().fromSegment();
+            databaseName = getIdentifierValue(fromSegment.resourceName());
+            schemaName = null == fromSegment.schemaName() ? null : 
getIdentifierValue(fromSegment.schemaName());
+        }
+        return new RefreshTableMetadataStatement(tableName, databaseName, 
schemaName);
     }
     
     @Override
diff --git 
a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/ral/common/updatable/RefreshTableMetadataStatement.java
 
b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/ral/common/updatable/RefreshTableMetadataStatement.java
index 93d06fc83d4..a663a06c8ef 100644
--- 
a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/ral/common/updatable/RefreshTableMetadataStatement.java
+++ 
b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/ral/common/updatable/RefreshTableMetadataStatement.java
@@ -34,13 +34,15 @@ public final class RefreshTableMetadataStatement extends 
UpdatableRALStatement {
     
     private final String resourceName;
     
+    private final String schemaName;
+    
     public RefreshTableMetadataStatement() {
-        this(null, null);
+        this(null, null, null);
     }
     
     /**
      * Get table name.
-     * 
+     *
      * @return table name
      */
     public Optional<String> getTableName() {
@@ -55,4 +57,13 @@ public final class RefreshTableMetadataStatement extends 
UpdatableRALStatement {
     public Optional<String> getResourceName() {
         return Optional.ofNullable(resourceName);
     }
+    
+    /**
+     * Get schema name.
+     *
+     * @return schema name
+     */
+    public Optional<String> getSchemaName() {
+        return Optional.ofNullable(schemaName);
+    }
 }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/updatable/RefreshTableMetadataHandler.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/updatable/RefreshTableMetadataHandler.java
index c0e41312592..0825cfc8f42 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/updatable/RefreshTableMetadataHandler.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/updatable/RefreshTableMetadataHandler.java
@@ -45,7 +45,7 @@ public final class RefreshTableMetadataHandler extends 
UpdatableRALBackendHandle
     @Override
     protected void update(final ContextManager contextManager, final 
RefreshTableMetadataStatement sqlStatement) throws DistSQLException {
         String databaseName = getDatabaseName();
-        String schemaName = 
DatabaseTypeEngine.getDefaultSchemaName(connectionSession.getDatabaseType(), 
databaseName);
+        String schemaName = getSchemaName(sqlStatement, databaseName);
         if (sqlStatement.getResourceName().isPresent()) {
             contextManager.reloadMetaData(databaseName, schemaName, 
sqlStatement.getTableName().get(), sqlStatement.getResourceName().get());
             return;
@@ -67,4 +67,11 @@ public final class RefreshTableMetadataHandler extends 
UpdatableRALBackendHandle
         }
         return result;
     }
+    
+    private String getSchemaName(final RefreshTableMetadataStatement 
sqlStatement, final String databaseName) {
+        if (sqlStatement.getSchemaName().isPresent()) {
+            return sqlStatement.getSchemaName().get();
+        }
+        return 
DatabaseTypeEngine.getDefaultSchemaName(connectionSession.getDatabaseType(), 
databaseName);
+    }
 }
diff --git 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/ral/impl/common/updatable/RefreshTableMetadataStatementAssert.java
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/ral/impl/common/updatable/RefreshTableMetadataStatementAssert.java
index cc69b8f178e..fbe19ced067 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/ral/impl/common/updatable/RefreshTableMetadataStatementAssert.java
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/ral/impl/common/updatable/RefreshTableMetadataStatementAssert.java
@@ -44,10 +44,13 @@ public final class RefreshTableMetadataStatementAssert {
         } else {
             assertNotNull(assertContext.getText("Actual statement should 
exist."), actual);
             if (null != expected.getTableName()) {
-                assertThat(assertContext.getText("Table name id assertion 
error"), actual.getTableName().get(), is(expected.getTableName()));
+                assertThat(assertContext.getText("Table name assertion 
error"), actual.getTableName().get(), is(expected.getTableName()));
             }
             if (null != expected.getResourceName()) {
-                assertThat(assertContext.getText("Resource name id assertion 
error"), actual.getResourceName().get(), is(expected.getResourceName()));
+                assertThat(assertContext.getText("Resource name assertion 
error"), actual.getResourceName().get(), is(expected.getResourceName()));
+            }
+            if (null != expected.getSchemaName()) {
+                assertThat(assertContext.getText("Schema name assertion 
error"), actual.getSchemaName().get(), is(expected.getSchemaName()));
             }
         }
     }
diff --git 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/ral/RefreshTableMetadataStatementTestCase.java
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/ral/RefreshTableMetadataStatementTestCase.java
index d1f25c46818..de944570338 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/ral/RefreshTableMetadataStatementTestCase.java
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/ral/RefreshTableMetadataStatementTestCase.java
@@ -35,4 +35,7 @@ public final class RefreshTableMetadataStatementTestCase 
extends SQLParserTestCa
     
     @XmlAttribute(name = "resource-name")
     private String resourceName;
+    
+    @XmlAttribute(name = "schema-name")
+    private String schemaName;
 }
diff --git 
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/ral/common.xml
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/ral/common.xml
index c9aa726f0c5..2ec676df3e2 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/ral/common.xml
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/ral/common.xml
@@ -39,6 +39,7 @@
     <refresh-table-metadata sql-case-id="refresh-table-metadata" />
     <refresh-table-metadata 
sql-case-id="refresh-table-metadata-with-table-name" table-name="t_order" />
     <refresh-table-metadata sql-case-id="refresh-table-metadata-with-resource" 
table-name="t_order" resource-name="ds_0" />
+    <refresh-table-metadata sql-case-id="refresh-table-metadata-with-schema" 
table-name="t_order" resource-name="ds_0" schema-name="public" />
     <show-authority-rule sql-case-id="show-authority-rule" />
     <show-transaction-rule sql-case-id="show-transaction-rule" />
     <show-sql-parser-rule sql-case-id="show-sql-parser-rule" />
diff --git 
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/ral/common.xml
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/ral/common.xml
index a184910acc4..384768ab385 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/ral/common.xml
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/ral/common.xml
@@ -36,6 +36,7 @@
     <distsql-case id="refresh-table-metadata" value="refresh table metadata" />
     <distsql-case id="refresh-table-metadata-with-table-name" value="refresh 
table metadata t_order" />
     <distsql-case id="refresh-table-metadata-with-resource" value="refresh 
table metadata t_order from resource ds_0" />
+    <distsql-case id="refresh-table-metadata-with-schema" value="REFRESH TABLE 
METADATA t_order FROM resource ds_0 SCHEMA public" />
     <distsql-case id="show-authority-rule" value="SHOW AUTHORITY RULE" />
     <distsql-case id="show-transaction-rule" value="SHOW TRANSACTION RULE" />
     <distsql-case id="show-sql-parser-rule" value="SHOW SQL_PARSER RULE" />

Reply via email to