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" />