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

RaigorJiang 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 4eda7ab28fe Refine DistSQL quoted text handling for identifiers and 
strings (#38687)
4eda7ab28fe is described below

commit 4eda7ab28fea4660fe152160517ae712f4ac9226
Author: Raigor <[email protected]>
AuthorDate: Tue May 12 12:56:32 2026 +0800

    Refine DistSQL quoted text handling for identifiers and strings (#38687)
    
    * Support quoted identifiers for SHOW/REFRESH TABLE METADATA
    
    * Refactor distSQLIdentifier and distSQLString
---
 .../syntax/ral/refresh-table-metadata.cn.md        | 24 +++++++----
 .../syntax/ral/refresh-table-metadata.en.md        | 22 ++++++----
 .../distsql/syntax/ral/show-table-metadata.cn.md   | 22 ++++++----
 .../distsql/syntax/ral/show-table-metadata.en.md   | 28 ++++++++-----
 .../mode/manager/ContextManager.java               | 34 ++++++++++++---
 .../mode/manager/ContextManagerTest.java           | 16 +++++++
 .../engine/src/main/antlr4/imports/BaseRule.g4     | 26 ++++++++----
 .../engine/src/main/antlr4/imports/Literals.g4     |  9 ++--
 .../engine/src/main/antlr4/imports/RALStatement.g4 | 14 +++----
 .../engine/src/main/antlr4/imports/RDLStatement.g4 | 10 ++---
 .../engine/src/main/antlr4/imports/RQLStatement.g4 |  2 +-
 .../core/kernel/KernelDistSQLStatementVisitor.java |  8 ++--
 .../queryable/show/ShowTableMetaDataStatement.java |  5 ++-
 .../updatable/RefreshTableMetaDataStatement.java   |  9 ++--
 .../export/ShowTableMetaDataExecutor.java          |  7 ++--
 .../refresh/RefreshTableMetaDataExecutor.java      | 26 ++++++------
 .../DistSQLQueryProxyBackendHandlerTest.java       |  2 +-
 .../DistSQLUpdateProxyBackendHandlerTest.java      | 18 ++++----
 .../export/ShowTableMetaDataExecutorTest.java      | 49 +++++++++++++++++++++-
 .../refresh/RefreshTableMetaDataExecutorTest.java  | 36 +++++++++-------
 .../ShowTableMetaDataStatementAssert.java          | 26 ++++++++++--
 .../RefreshTableMetaDataStatementAssert.java       | 14 ++++++-
 .../impl/identifier/ExpectedIdentifier.java        | 22 ++++------
 .../ral/RefreshTableMetaDataStatementTestCase.java | 10 +++--
 .../ral/ShowTableMetaDataStatementTestCase.java    |  3 +-
 .../src/main/resources/case/ral/queryable.xml      | 12 +++++-
 .../src/main/resources/case/ral/updatable.xml      | 29 +++++++++++--
 .../parser/src/main/resources/case/rdl/alter.xml   |  8 ++++
 .../parser/src/main/resources/case/rdl/create.xml  |  8 ++++
 .../main/resources/sql/supported/ral/queryable.xml |  3 ++
 .../main/resources/sql/supported/ral/updatable.xml |  4 ++
 .../src/main/resources/sql/supported/rdl/alter.xml |  2 +
 .../main/resources/sql/supported/rdl/create.xml    |  2 +
 .../main/resources/sql/unsupported/unsupported.xml |  2 +
 34 files changed, 369 insertions(+), 143 deletions(-)

diff --git 
a/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/ral/refresh-table-metadata.cn.md
 
b/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/ral/refresh-table-metadata.cn.md
index 22048b63a33..1acbec25aba 100644
--- 
a/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/ral/refresh-table-metadata.cn.md
+++ 
b/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/ral/refresh-table-metadata.cn.md
@@ -16,13 +16,19 @@ RefreshTableMetadata ::=
   'REFRESH' 'TABLE' 'METADATA' (tableName | tableName 'FROM' 'STORAGE' 'UNIT' 
storageUnitName ('SCHEMA' schemaName)?)?
 
 tableName ::=
-  identifier
+  distSQLIdentifier
 
 storageUnitName ::=
-  identifier
+  distSQLIdentifier
 
 schemaName ::=
-  identifier
+  distSQLIdentifier
+
+distSQLIdentifier ::=
+  identifier | quotedIdentifier
+
+quotedIdentifier ::=
+  '`' identifier '`' | '"' identifier '"'
 ```
 {{% /tab %}}
 {{% tab name="铁路图" %}}
@@ -38,30 +44,32 @@ schemaName ::=
 
 - 如果 `SCHEMA` 中不存在表,则会删除该 `SCHEMA`。
 
+- `tableName`、`storageUnitName` 和 `schemaName` 
可以写成不带引号的标识符、反引号包裹的标识符或双引号包裹的标识符。
+
 ### 示例
 
 - 刷新指定存储单元中指定 `SCHEMA` 中指定表的元数据
 
 ```sql
-REFRESH TABLE METADATA t_order FROM STORAGE UNIT ds_1 SCHEMA db_schema;
+REFRESH TABLE METADATA `t_order` FROM STORAGE UNIT "ds_1" SCHEMA `db_schema`;
 ```
 
 - 刷新指定存储单元中指定 `SCHEMA` 中所有表的元数据
 
 ```sql
-REFRESH TABLE METADATA FROM STORAGE UNIT ds_1 SCHEMA db_schema;
+REFRESH TABLE METADATA FROM STORAGE UNIT `ds_1` SCHEMA "db_schema";
 ```
 
 - 刷新指定存储单元中指定表的元数据
 
 ```sql
-REFRESH TABLE METADATA t_order FROM STORAGE UNIT ds_1;
+REFRESH TABLE METADATA "t_order" FROM STORAGE UNIT ds_1;
 ```
 
 - 刷新指定表的元数据
 
 ```sql
-REFRESH TABLE METADATA t_order;
+REFRESH TABLE METADATA `t_order`;
 ```
 
 - 刷新所有表的元数据
@@ -76,4 +84,4 @@ REFRESH TABLE METADATA;
 
 ### 相关链接
 
-- [保留字](/cn/user-manual/shardingsphere-proxy/distsql/syntax/reserved-word/)
\ No newline at end of file
+- [保留字](/cn/user-manual/shardingsphere-proxy/distsql/syntax/reserved-word/)
diff --git 
a/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/ral/refresh-table-metadata.en.md
 
b/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/ral/refresh-table-metadata.en.md
index 7fb04c3f1aa..58767094eab 100644
--- 
a/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/ral/refresh-table-metadata.en.md
+++ 
b/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/ral/refresh-table-metadata.en.md
@@ -16,13 +16,19 @@ RefreshTableMetadata ::=
   'REFRESH' 'TABLE' 'METADATA' (tableName | tableName 'FROM' 'STORAGE' 'UNIT' 
storageUnitName ('SCHEMA' schemaName)?)?
 
 tableName ::=
-  identifier
+  distSQLIdentifier
 
 storageUnitName ::=
-  identifier
+  distSQLIdentifier
 
 schemaName ::=
-  identifier
+  distSQLIdentifier
+
+distSQLIdentifier ::=
+  identifier | quotedIdentifier
+
+quotedIdentifier ::=
+  '`' identifier '`' | '"' identifier '"'
 ```
 {{% /tab %}}
 {{% tab name="Railroad diagram" %}}
@@ -38,31 +44,33 @@ schemaName ::=
 
 - If there are no tables in the schema, the schema will be deleted.
 
+- `tableName`, `storageUnitName`, and `schemaName` can be unquoted 
identifiers, backtick-quoted identifiers, or double-quoted identifiers.
+
 
 ### Example
 
 - Refresh specified table's metadata in specified schema of a specified 
storage unit
 
 ```sql
-REFRESH TABLE METADATA t_order FROM STORAGE UNIT ds_1 SCHEMA db_schema;
+REFRESH TABLE METADATA `t_order` FROM STORAGE UNIT "ds_1" SCHEMA `db_schema`;
 ```
 
 - Refresh all tables' metadata in specified schema of a specified storage unit
 
 ```sql
-REFRESH TABLE METADATA FROM STORAGE UNIT ds_1 SCHEMA db_schema;
+REFRESH TABLE METADATA FROM STORAGE UNIT `ds_1` SCHEMA "db_schema";
 ```
 
 - Refresh metadata for specified table in specified storage unit
 
 ```sql
-REFRESH TABLE METADATA t_order FROM STORAGE UNIT ds_1;
+REFRESH TABLE METADATA "t_order" FROM STORAGE UNIT ds_1;
 ```
 
 - Refresh metadata for specified table
 
 ```sql
-REFRESH TABLE METADATA t_order;
+REFRESH TABLE METADATA `t_order`;
 ```
 - Refresh all table metadata
 
diff --git 
a/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/ral/show-table-metadata.cn.md
 
b/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/ral/show-table-metadata.cn.md
index 36e0c9aee26..a90db9c13b3 100644
--- 
a/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/ral/show-table-metadata.cn.md
+++ 
b/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/ral/show-table-metadata.cn.md
@@ -16,10 +16,16 @@ ShowTableMetadata ::=
   'SHOW' 'TABLE' 'METADATA' tableName (',' tableName)* ('FROM' databaseName)?
 
 tableName ::=
-  identifier
+  distSQLIdentifier
 
 databaseName ::=
-  identifier
+  distSQLIdentifier
+
+distSQLIdentifier ::=
+  identifier | quotedIdentifier
+
+quotedIdentifier ::=
+  '`' identifier '`' | '"' identifier '"'
 ```
 {{% /tab %}}
 {{% tab name="铁路图" %}}
@@ -40,12 +46,14 @@ databaseName ::=
 
 - 未指定 `databaseName` 时,默认是当前使用的 `DATABASE。` 如果也未使用 `DATABASE` 则会提示 `No 
database selected`。
 
+- `tableName` 和 `databaseName` 可以写成不带引号的标识符、反引号包裹的标识符或双引号包裹的标识符。
+
 ### 示例
 
 - 查询指定逻辑库中多个表的元数据
 
 ```sql
-SHOW TABLE METADATA t_order, t_order_1 FROM sharding_db;
+SHOW TABLE METADATA t_order, `t_order_1` FROM "sharding_db";
 ```
 
 ```sql
@@ -68,7 +76,7 @@ mysql> SHOW TABLE METADATA t_order, t_order_1 FROM 
sharding_db;
 - 查询指定逻辑库中单个表的元数据
 
 ```sql
-SHOW TABLE METADATA t_order FROM sharding_db;
+SHOW TABLE METADATA "t_order" FROM `sharding_db`;
 ```
 
 ```sql
@@ -87,7 +95,7 @@ mysql> SHOW TABLE METADATA t_order FROM sharding_db;
 - 查询当前逻辑库中多个表的元数据
 
 ```sql
-SHOW TABLE METADATA t_order, t_order_1;
+SHOW TABLE METADATA `t_order`, "t_order_1";
 ```
 
 ```sql
@@ -110,7 +118,7 @@ mysql> SHOW TABLE METADATA t_order, t_order_1;
 - 查询当前逻辑库中单个表的元数据
 
 ```sql
-SHOW TABLE METADATA t_order;
+SHOW TABLE METADATA "t_order";
 ```
 
 ```sql
@@ -132,4 +140,4 @@ mysql> SHOW TABLE METADATA t_order;
 
 ### 相关链接
 
-- [保留字](/cn/user-manual/shardingsphere-proxy/distsql/syntax/reserved-word/)
\ No newline at end of file
+- [保留字](/cn/user-manual/shardingsphere-proxy/distsql/syntax/reserved-word/)
diff --git 
a/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/ral/show-table-metadata.en.md
 
b/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/ral/show-table-metadata.en.md
index ea4fcddc376..e7a5c1f0d0c 100644
--- 
a/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/ral/show-table-metadata.en.md
+++ 
b/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/ral/show-table-metadata.en.md
@@ -16,10 +16,16 @@ ShowTableMetadata ::=
   'SHOW' 'TABLE' 'METADATA' tableName (',' tableName)* ('FROM' databaseName)?
 
 tableName ::=
-  identifier
+  distSQLIdentifier
 
 databaseName ::=
-  identifier
+  distSQLIdentifier
+
+distSQLIdentifier ::=
+  identifier | quotedIdentifier
+
+quotedIdentifier ::=
+  '`' identifier '`' | '"' identifier '"'
 ```
 {{% /tab %}}
 {{% tab name="Railroad diagram" %}}
@@ -40,16 +46,18 @@ databaseName ::=
 
 - When `databaseName` is not specified, the default is the currently used 
`DATABASE`. If `DATABASE` is not used, `No database selected` will be prompted.
 
+- `tableName` and `databaseName` can be unquoted identifiers, backtick-quoted 
identifiers, or double-quoted identifiers.
+
 ### Example
 
 - Query matadata of multiple tables from specified database
 
 ```sql
-SHOW TABLE METADATA t_order, t_order_1 FROM sharding_db;
+SHOW TABLE METADATA t_order, `t_order_1` FROM "sharding_db";
 ```
 
 ```sql
-mysql> SHOW TABLE METADATA t_order, t_order_1 FROM sharding_db;
+mysql> SHOW TABLE METADATA t_order, `t_order_1` FROM "sharding_db";
 +-------------------+------------+--------+----------+
 | schema_name       | table_name | type   | name     |
 +-------------------+------------+--------+----------+
@@ -68,11 +76,11 @@ mysql> SHOW TABLE METADATA t_order, t_order_1 FROM 
sharding_db;
 - Query metadata of one table from specified database
 
 ```sql
-SHOW TABLE METADATA t_order FROM sharding_db;
+SHOW TABLE METADATA "t_order" FROM `sharding_db`;
 ```
 
 ```sql
-mysql> SHOW TABLE METADATA t_order FROM sharding_db;
+mysql> SHOW TABLE METADATA "t_order" FROM `sharding_db`;
 +-------------------+------------+--------+----------+
 | schema_name       | table_name | type   | name     |
 +-------------------+------------+--------+----------+
@@ -87,11 +95,11 @@ mysql> SHOW TABLE METADATA t_order FROM sharding_db;
 - Query metadata of multiple tables from current database
 
 ```sql
-SHOW TABLE METADATA t_order, t_order_1;
+SHOW TABLE METADATA `t_order`, "t_order_1";
 ```
 
 ```sql
-mysql> SHOW TABLE METADATA t_order, t_order_1;
+mysql> SHOW TABLE METADATA `t_order`, "t_order_1";
 +-------------------+------------+--------+----------+
 | schema_name       | table_name | type   | name     |
 +-------------------+------------+--------+----------+
@@ -110,11 +118,11 @@ mysql> SHOW TABLE METADATA t_order, t_order_1;
 - Query metadata of one table from current database
 
 ```sql
-SHOW TABLE METADATA t_order;
+SHOW TABLE METADATA "t_order";
 ```
 
 ```sql
-mysql> SHOW TABLE METADATA t_order;
+mysql> SHOW TABLE METADATA "t_order";
 +-------------------+------------+--------+----------+
 | schema_name       | table_name | type   | name     |
 +-------------+------------+--------+----------+
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
index f9a3e975623..a0c59c67756 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
@@ -51,6 +51,7 @@ import 
org.apache.shardingsphere.mode.metadata.manager.resource.SwitchingResourc
 import org.apache.shardingsphere.mode.persist.PersistServiceFacade;
 import org.apache.shardingsphere.mode.spi.repository.PersistRepository;
 import org.apache.shardingsphere.mode.state.StateContext;
+import 
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
 
 import java.sql.SQLException;
 import java.util.Collection;
@@ -216,13 +217,24 @@ public final class ContextManager implements 
AutoCloseable {
      * @param tableName to be reloaded table name
      */
     public void reloadTable(final ShardingSphereDatabase database, final 
String schemaName, final String tableName) {
+        reloadTable(database, schemaName, new IdentifierValue(tableName));
+    }
+    
+    /**
+     * Reload table.
+     *
+     * @param database database
+     * @param schemaName schema name
+     * @param tableName to be reloaded table name
+     */
+    public void reloadTable(final ShardingSphereDatabase database, final 
String schemaName, final IdentifierValue tableName) {
         GenericSchemaBuilderMaterial material = new 
GenericSchemaBuilderMaterial(
                 database.getResourceMetaData().getStorageUnits(), 
database.getRuleMetaData().getRules(), 
metaDataContexts.getMetaData().getProps(), schemaName,
                 database.getIdentifierContext());
         try {
             persistTable(database, schemaName, tableName, material);
         } catch (final SQLException ex) {
-            log.error("Reload table: {} meta data of database: {} schema: {} 
failed", tableName, database.getName(), schemaName, ex);
+            log.error("Reload table: {} meta data of database: {} schema: {} 
failed", tableName.getValue(), database.getName(), schemaName, ex);
         }
     }
     
@@ -235,6 +247,18 @@ public final class ContextManager implements AutoCloseable 
{
      * @param tableName to be reloaded table name
      */
     public void reloadTable(final ShardingSphereDatabase database, final 
String schemaName, final String dataSourceName, final String tableName) {
+        reloadTable(database, schemaName, dataSourceName, new 
IdentifierValue(tableName));
+    }
+    
+    /**
+     * Reload table from single data source.
+     *
+     * @param database database
+     * @param schemaName schema name
+     * @param dataSourceName data source name
+     * @param tableName to be reloaded table name
+     */
+    public void reloadTable(final ShardingSphereDatabase database, final 
String schemaName, final String dataSourceName, final IdentifierValue 
tableName) {
         StorageUnit storageUnit = 
database.getResourceMetaData().getStorageUnits().get(dataSourceName);
         GenericSchemaBuilderMaterial material = new 
GenericSchemaBuilderMaterial(
                 Collections.singletonMap(dataSourceName, storageUnit), 
database.getRuleMetaData().getRules(), 
metaDataContexts.getMetaData().getProps(), schemaName,
@@ -242,17 +266,17 @@ public final class ContextManager implements 
AutoCloseable {
         try {
             persistTable(database, schemaName, tableName, material);
         } catch (final SQLException ex) {
-            log.error("Reload table: {} meta data of database: {} schema: {} 
with data source: {} failed", tableName, database.getName(), schemaName, 
dataSourceName, ex);
+            log.error("Reload table: {} meta data of database: {} schema: {} 
with data source: {} failed", tableName.getValue(), database.getName(), 
schemaName, dataSourceName, ex);
         }
     }
     
-    private void persistTable(final ShardingSphereDatabase database, final 
String schemaName, final String tableName, final GenericSchemaBuilderMaterial 
material) throws SQLException {
-        ShardingSphereSchema schema = 
GenericSchemaBuilder.build(Collections.singleton(tableName), 
database.getProtocolType(), material)
+    private void persistTable(final ShardingSphereDatabase database, final 
String schemaName, final IdentifierValue tableName, final 
GenericSchemaBuilderMaterial material) throws SQLException {
+        ShardingSphereSchema schema = 
GenericSchemaBuilder.build(Collections.singleton(tableName.getValue()), 
database.getProtocolType(), material)
                 .getOrDefault(schemaName, new ShardingSphereSchema(schemaName, 
database.getProtocolType()));
         if (schema.containsTable(tableName)) {
             
persistServiceFacade.getMetaDataFacade().getDatabaseMetaDataFacade().getTable().persist(database.getName(),
 schemaName, Collections.singleton(schema.getTable(tableName)));
         } else {
-            
persistServiceFacade.getModeFacade().getMetaDataManagerService().dropTables(database,
 schemaName, Collections.singleton(tableName));
+            
persistServiceFacade.getModeFacade().getMetaDataManagerService().dropTables(database,
 schemaName, Collections.singleton(tableName.getValue()));
         }
     }
     
diff --git 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
index 0b2133a7158..8aa4128c616 100644
--- 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
+++ 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
@@ -53,6 +53,7 @@ import 
org.apache.shardingsphere.mode.metadata.manager.resource.SwitchingResourc
 import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistFacade;
 import org.apache.shardingsphere.mode.persist.PersistServiceFacade;
 import org.apache.shardingsphere.test.infra.fixture.jdbc.MockedDataSource;
+import 
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
@@ -283,6 +284,21 @@ class ContextManagerTest {
         
verify(persistServiceFacade.getMetaDataFacade().getDatabaseMetaDataFacade().getTable()).persist("foo_db",
 "foo_schema", Collections.singleton(table));
     }
     
+    @Test
+    void assertReloadTableWithQuotedIdentifier() {
+        PersistServiceFacade persistServiceFacade = mockPersistServiceFacade();
+        setPersistServiceFacade(persistServiceFacade);
+        ShardingSphereTable table = mock(ShardingSphereTable.class);
+        when(table.getName()).thenReturn("FOO_TBL");
+        ShardingSphereSchema schema = new ShardingSphereSchema("foo_schema", 
databaseType, Collections.singleton(table), Collections.emptyList());
+        try (MockedStatic<GenericSchemaBuilder> schemaBuilderMock = 
mockStatic(GenericSchemaBuilder.class)) {
+            schemaBuilderMock.when(() -> GenericSchemaBuilder.build(anySet(), 
any(DatabaseType.class), any(GenericSchemaBuilderMaterial.class)))
+                    .thenReturn(Collections.singletonMap("foo_schema", 
schema));
+            contextManager.reloadTable(database, "foo_schema", new 
IdentifierValue("\"FOO_TBL\""));
+        }
+        
verify(persistServiceFacade.getMetaDataFacade().getDatabaseMetaDataFacade().getTable()).persist("foo_db",
 "foo_schema", Collections.singleton(table));
+    }
+    
     @Test
     void assertReloadTableWithDataSourceName() {
         PersistServiceFacade persistServiceFacade = mockPersistServiceFacade();
diff --git a/parser/distsql/engine/src/main/antlr4/imports/BaseRule.g4 
b/parser/distsql/engine/src/main/antlr4/imports/BaseRule.g4
index 9e699151ed6..5f1f6d973b5 100644
--- a/parser/distsql/engine/src/main/antlr4/imports/BaseRule.g4
+++ b/parser/distsql/engine/src/main/antlr4/imports/BaseRule.g4
@@ -20,7 +20,7 @@ grammar BaseRule;
 import Symbol, Keyword, Literals;
 
 literal
-    : STRING_ | (MINUS_)? INT_ | TRUE | FALSE
+    : distSQLString | (MINUS_)? INT_ | TRUE | FALSE
     ;
 
 algorithmDefinition
@@ -28,7 +28,7 @@ algorithmDefinition
     ;
 
 algorithmTypeName
-    : STRING_
+    : distSQLString
     ;
 
 propertiesDefinition
@@ -40,29 +40,37 @@ properties
     ;
 
 property
-    : key=STRING_ EQ_ value=literal
+    : key=distSQLString EQ_ value=literal
     ;
 
 databaseName
-    : IDENTIFIER_
+    : distSQLIdentifier
     ;
 
 schemaName
-    : IDENTIFIER_
+    : distSQLIdentifier
     ;
 
 tableName
-    : IDENTIFIER_
+    : distSQLIdentifier
     ;
 
 resourceName
-    : IDENTIFIER_
+    : distSQLIdentifier
     ;
 
 storageUnitName
-    : IDENTIFIER_
+    : distSQLIdentifier
     ;
 
 metadata
-    : STRING_
+    : distSQLString
+    ;
+
+distSQLIdentifier
+    : IDENTIFIER_ | DOUBLE_QUOTED_TEXT
+    ;
+
+distSQLString
+    : SINGLE_QUOTED_TEXT | DOUBLE_QUOTED_TEXT
     ;
diff --git a/parser/distsql/engine/src/main/antlr4/imports/Literals.g4 
b/parser/distsql/engine/src/main/antlr4/imports/Literals.g4
index 68f6a1b07ed..5edbf3ccc77 100644
--- a/parser/distsql/engine/src/main/antlr4/imports/Literals.g4
+++ b/parser/distsql/engine/src/main/antlr4/imports/Literals.g4
@@ -24,9 +24,12 @@ IDENTIFIER_
     | BQ_ ~'`'+ BQ_
     ;
 
-STRING_
-    : (DQ_ ('\\'. | '""' | ~('"' | '\\'))* DQ_)
-    | (SQ_ ('\\'. | '\'\'' | ~('\'' | '\\'))* SQ_)
+DOUBLE_QUOTED_TEXT
+    : DQ_ ('\\'. | '""' | ~('"' | '\\'))* DQ_
+    ;
+
+SINGLE_QUOTED_TEXT
+    : SQ_ ('\\'. | '\'\'' | ~('\'' | '\\'))* SQ_
     ;
 
 INT_
diff --git a/parser/distsql/engine/src/main/antlr4/imports/RALStatement.g4 
b/parser/distsql/engine/src/main/antlr4/imports/RALStatement.g4
index 9eff44ac377..47b6cb55325 100644
--- a/parser/distsql/engine/src/main/antlr4/imports/RALStatement.g4
+++ b/parser/distsql/engine/src/main/antlr4/imports/RALStatement.g4
@@ -120,19 +120,19 @@ showLoadBalanceAlgorithmPlugins
     ;
 
 confPath
-    : STRING_
+    : distSQLString
     ;
 
 filePath
-    : STRING_
+    : distSQLString
     ;
 
 metaDataValue
-    : STRING_
+    : distSQLString
     ;
 
 variableName
-    : IDENTIFIER_ | STRING_
+    : IDENTIFIER_ | distSQLString
     ;
 
 variableValues
@@ -144,7 +144,7 @@ variableValue
     ;
 
 instanceId
-    : IDENTIFIER_ | STRING_
+    : IDENTIFIER_ | distSQLString
     ;
 
 refreshScope
@@ -168,9 +168,9 @@ showLike
     ;
 
 likePattern
-    : STRING_
+    : distSQLString
     ;
 
 pluginClass
-    : STRING_
+    : distSQLString
     ;
diff --git a/parser/distsql/engine/src/main/antlr4/imports/RDLStatement.g4 
b/parser/distsql/engine/src/main/antlr4/imports/RDLStatement.g4
index 5dfb4f7a0bd..10ca410f931 100644
--- a/parser/distsql/engine/src/main/antlr4/imports/RDLStatement.g4
+++ b/parser/distsql/engine/src/main/antlr4/imports/RDLStatement.g4
@@ -48,7 +48,7 @@ urlSource
     ;
 
 hostname
-    : STRING_
+    : distSQLString
     ;
 
 port
@@ -56,19 +56,19 @@ port
     ;
 
 dbName
-    : STRING_
+    : distSQLString
     ;
 
 url
-    : STRING_
+    : distSQLString
     ;
 
 user
-    : STRING_
+    : distSQLString
     ;
 
 password
-    : STRING_
+    : distSQLString
     ;
 
 ignoreTables
diff --git a/parser/distsql/engine/src/main/antlr4/imports/RQLStatement.g4 
b/parser/distsql/engine/src/main/antlr4/imports/RQLStatement.g4
index 3a8be149365..b488c1ae74d 100644
--- a/parser/distsql/engine/src/main/antlr4/imports/RQLStatement.g4
+++ b/parser/distsql/engine/src/main/antlr4/imports/RQLStatement.g4
@@ -36,5 +36,5 @@ showLike
     ;
 
 likePattern
-    : STRING_
+    : distSQLString
     ;
diff --git 
a/parser/distsql/engine/src/main/java/org/apache/shardingsphere/distsql/parser/core/kernel/KernelDistSQLStatementVisitor.java
 
b/parser/distsql/engine/src/main/java/org/apache/shardingsphere/distsql/parser/core/kernel/KernelDistSQLStatementVisitor.java
index 442e0bdc269..9f46b76bb38 100644
--- 
a/parser/distsql/engine/src/main/java/org/apache/shardingsphere/distsql/parser/core/kernel/KernelDistSQLStatementVisitor.java
+++ 
b/parser/distsql/engine/src/main/java/org/apache/shardingsphere/distsql/parser/core/kernel/KernelDistSQLStatementVisitor.java
@@ -135,7 +135,7 @@ public final class KernelDistSQLStatementVisitor extends 
KernelDistSQLStatementB
     
     @Override
     public ASTNode visitShowTableMetadata(final ShowTableMetadataContext ctx) {
-        Collection<String> tableNames = 
ctx.tableName().stream().map(IdentifierValueUtils::getValue).collect(Collectors.toSet());
+        Collection<IdentifierValue> tableNames = 
ctx.tableName().stream().map(each -> new 
IdentifierValue(each.getText())).collect(Collectors.toSet());
         return new ShowTableMetaDataStatement(tableNames, null == 
ctx.databaseName()
                 ? null
                 : new 
FromDatabaseSegment(ctx.FROM().getSymbol().getStartIndex(), (DatabaseSegment) 
visit(ctx.databaseName())));
@@ -263,12 +263,12 @@ public final class KernelDistSQLStatementVisitor extends 
KernelDistSQLStatementB
             return new RefreshTableMetaDataStatement();
         }
         String storageUnitName = null;
-        String schemaName = null;
-        String tableName = 
IdentifierValueUtils.getValue(ctx.refreshScope().tableName());
+        IdentifierValue schemaName = null;
+        IdentifierValue tableName = null == ctx.refreshScope().tableName() ? 
null : new IdentifierValue(ctx.refreshScope().tableName().getText());
         if (null != ctx.refreshScope().fromSegment()) {
             FromSegmentContext fromSegment = ctx.refreshScope().fromSegment();
             storageUnitName = 
IdentifierValueUtils.getValue(fromSegment.storageUnitName());
-            schemaName = null == fromSegment.schemaName() ? null : 
IdentifierValueUtils.getValue(fromSegment.schemaName());
+            schemaName = null == fromSegment.schemaName() ? null : new 
IdentifierValue(fromSegment.schemaName().getText());
         }
         return new RefreshTableMetaDataStatement(tableName, storageUnitName, 
schemaName);
     }
diff --git 
a/parser/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/statement/type/ral/queryable/show/ShowTableMetaDataStatement.java
 
b/parser/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/statement/type/ral/queryable/show/ShowTableMetaDataStatement.java
index 1fdce2dc3c1..780f55d462c 100644
--- 
a/parser/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/statement/type/ral/queryable/show/ShowTableMetaDataStatement.java
+++ 
b/parser/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/statement/type/ral/queryable/show/ShowTableMetaDataStatement.java
@@ -22,6 +22,7 @@ import 
org.apache.shardingsphere.distsql.statement.type.ral.queryable.QueryableR
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dal.FromDatabaseSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.SQLStatementAttributes;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.attribute.type.FromDatabaseSQLStatementAttribute;
+import 
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
 
 import java.util.Collection;
 
@@ -31,13 +32,13 @@ import java.util.Collection;
 @Getter
 public final class ShowTableMetaDataStatement extends QueryableRALStatement {
     
-    private final Collection<String> tableNames;
+    private final Collection<IdentifierValue> tableNames;
     
     private final FromDatabaseSegment fromDatabase;
     
     private final SQLStatementAttributes attributes;
     
-    public ShowTableMetaDataStatement(final Collection<String> tableNames, 
final FromDatabaseSegment fromDatabase) {
+    public ShowTableMetaDataStatement(final Collection<IdentifierValue> 
tableNames, final FromDatabaseSegment fromDatabase) {
         this.tableNames = tableNames;
         this.fromDatabase = fromDatabase;
         attributes = new SQLStatementAttributes(new 
FromDatabaseSQLStatementAttribute(fromDatabase));
diff --git 
a/parser/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/statement/type/ral/updatable/RefreshTableMetaDataStatement.java
 
b/parser/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/statement/type/ral/updatable/RefreshTableMetaDataStatement.java
index d72a38d4615..d884ec260fe 100644
--- 
a/parser/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/statement/type/ral/updatable/RefreshTableMetaDataStatement.java
+++ 
b/parser/distsql/statement/src/main/java/org/apache/shardingsphere/distsql/statement/type/ral/updatable/RefreshTableMetaDataStatement.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.distsql.statement.type.ral.updatable;
 
 import lombok.RequiredArgsConstructor;
+import 
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
 
 import java.util.Optional;
 
@@ -27,11 +28,11 @@ import java.util.Optional;
 @RequiredArgsConstructor
 public final class RefreshTableMetaDataStatement extends UpdatableRALStatement 
{
     
-    private final String tableName;
+    private final IdentifierValue tableName;
     
     private final String storageUnitName;
     
-    private final String schemaName;
+    private final IdentifierValue schemaName;
     
     public RefreshTableMetaDataStatement() {
         this(null, null, null);
@@ -42,7 +43,7 @@ public final class RefreshTableMetaDataStatement extends 
UpdatableRALStatement {
      *
      * @return table name
      */
-    public Optional<String> getTableName() {
+    public Optional<IdentifierValue> getTableName() {
         return Optional.ofNullable(tableName);
     }
     
@@ -60,7 +61,7 @@ public final class RefreshTableMetaDataStatement extends 
UpdatableRALStatement {
      *
      * @return schema name
      */
-    public Optional<String> getSchemaName() {
+    public Optional<IdentifierValue> getSchemaName() {
         return Optional.ofNullable(schemaName);
     }
 }
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/export/ShowTableMetaDataExecutor.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/export/ShowTableMetaDataExecutor.java
index 1f3d2e58af4..90d23128a9f 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/export/ShowTableMetaDataExecutor.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/export/ShowTableMetaDataExecutor.java
@@ -29,6 +29,7 @@ import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSp
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
 import org.apache.shardingsphere.mode.manager.ContextManager;
+import 
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
 
 import java.util.Arrays;
 import java.util.Collection;
@@ -56,11 +57,11 @@ public final class ShowTableMetaDataExecutor implements 
DistSQLQueryExecutor<Sho
                 .filter(schema::containsTable).map(each -> 
buildTableRows(database.getName(), schema, 
each)).flatMap(Collection::stream).collect(Collectors.toList());
     }
     
-    private Collection<LocalDataQueryResultRow> buildTableRows(final String 
databaseName, final ShardingSphereSchema schema, final String tableName) {
+    private Collection<LocalDataQueryResultRow> buildTableRows(final String 
databaseName, final ShardingSphereSchema schema, final IdentifierValue 
tableName) {
         Collection<LocalDataQueryResultRow> result = new LinkedList<>();
         ShardingSphereTable table = schema.getTable(tableName);
-        result.addAll(table.getAllColumns().stream().map(each -> 
buildColumnRow(databaseName, tableName, each)).collect(Collectors.toList()));
-        result.addAll(table.getAllIndexes().stream().map(each -> 
buildIndexRow(databaseName, tableName, each)).collect(Collectors.toList()));
+        result.addAll(table.getAllColumns().stream().map(each -> 
buildColumnRow(databaseName, table.getName(), 
each)).collect(Collectors.toList()));
+        result.addAll(table.getAllIndexes().stream().map(each -> 
buildIndexRow(databaseName, table.getName(), 
each)).collect(Collectors.toList()));
         return result;
     }
     
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/refresh/RefreshTableMetaDataExecutor.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/refresh/RefreshTableMetaDataExecutor.java
index c6aa70961f4..1e326acd776 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/refresh/RefreshTableMetaDataExecutor.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/refresh/RefreshTableMetaDataExecutor.java
@@ -30,6 +30,7 @@ import 
org.apache.shardingsphere.infra.exception.kernel.metadata.resource.storag
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
 import org.apache.shardingsphere.mode.manager.ContextManager;
+import 
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
 
 import java.util.Collections;
 import java.util.Map;
@@ -44,28 +45,29 @@ public final class RefreshTableMetaDataExecutor implements 
DistSQLUpdateExecutor
     
     @Override
     public void executeUpdate(final RefreshTableMetaDataStatement 
sqlStatement, final ContextManager contextManager) {
-        String schemaName = getSchemaName(sqlStatement);
+        IdentifierValue schemaName = getSchemaName(sqlStatement);
         checkBeforeUpdate(sqlStatement, schemaName);
         if (sqlStatement.getStorageUnitName().isPresent()) {
+            String actualSchemaName = database.getSchema(schemaName).getName();
             if (sqlStatement.getTableName().isPresent()) {
-                contextManager.reloadTable(database, schemaName, 
sqlStatement.getStorageUnitName().get(), sqlStatement.getTableName().get());
+                contextManager.reloadTable(database, actualSchemaName, 
sqlStatement.getStorageUnitName().get(), sqlStatement.getTableName().get());
             } else {
-                contextManager.reloadSchema(database, schemaName, 
sqlStatement.getStorageUnitName().get());
+                contextManager.reloadSchema(database, actualSchemaName, 
sqlStatement.getStorageUnitName().get());
             }
             return;
         }
         if (sqlStatement.getTableName().isPresent()) {
-            contextManager.reloadTable(database, schemaName, 
sqlStatement.getTableName().get());
+            contextManager.reloadTable(database, 
database.getSchema(schemaName).getName(), sqlStatement.getTableName().get());
         } else {
             contextManager.reloadDatabase(database);
         }
     }
     
-    private String getSchemaName(final RefreshTableMetaDataStatement 
sqlStatement) {
-        return sqlStatement.getSchemaName().isPresent() ? 
sqlStatement.getSchemaName().get() : new 
DatabaseTypeRegistry(database.getProtocolType()).getDefaultSchemaName(database.getName());
+    private IdentifierValue getSchemaName(final RefreshTableMetaDataStatement 
sqlStatement) {
+        return sqlStatement.getSchemaName().orElseGet(() -> new 
IdentifierValue(new 
DatabaseTypeRegistry(database.getProtocolType()).getDefaultSchemaName(database.getName())));
     }
     
-    private void checkBeforeUpdate(final RefreshTableMetaDataStatement 
sqlStatement, final String schemaName) {
+    private void checkBeforeUpdate(final RefreshTableMetaDataStatement 
sqlStatement, final IdentifierValue schemaName) {
         checkStorageUnit(database.getResourceMetaData().getStorageUnits(), 
sqlStatement);
         checkSchema(schemaName);
         checkTable(sqlStatement, schemaName);
@@ -79,14 +81,14 @@ public final class RefreshTableMetaDataExecutor implements 
DistSQLUpdateExecutor
         }
     }
     
-    private void checkSchema(final String schemaName) {
-        
ShardingSpherePreconditions.checkState(database.containsSchema(schemaName), () 
-> new SchemaNotFoundException(schemaName));
+    private void checkSchema(final IdentifierValue schemaName) {
+        
ShardingSpherePreconditions.checkState(database.containsSchema(schemaName), () 
-> new SchemaNotFoundException(schemaName.getValue()));
     }
     
-    private void checkTable(final RefreshTableMetaDataStatement sqlStatement, 
final String schemaName) {
+    private void checkTable(final RefreshTableMetaDataStatement sqlStatement, 
final IdentifierValue schemaName) {
         if (sqlStatement.getTableName().isPresent()) {
-            String tableName = sqlStatement.getTableName().get();
-            
ShardingSpherePreconditions.checkState(database.getSchema(schemaName).containsTable(tableName),
 () -> new TableNotFoundException(tableName));
+            IdentifierValue tableName = sqlStatement.getTableName().get();
+            
ShardingSpherePreconditions.checkState(database.getSchema(schemaName).containsTable(tableName),
 () -> new TableNotFoundException(tableName.getValue()));
         }
     }
     
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/DistSQLQueryProxyBackendHandlerTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/DistSQLQueryProxyBackendHandlerTest.java
index 26d31c804ab..95928ca0740 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/DistSQLQueryProxyBackendHandlerTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/DistSQLQueryProxyBackendHandlerTest.java
@@ -117,7 +117,7 @@ class DistSQLQueryProxyBackendHandlerTest {
     }
     
     private ShowTableMetaDataStatement createSqlStatement() {
-        return new 
ShowTableMetaDataStatement(Collections.singleton("t_order"), new 
FromDatabaseSegment(0, new DatabaseSegment(0, 0, new 
IdentifierValue("foo_db"))));
+        return new ShowTableMetaDataStatement(Collections.singleton(new 
IdentifierValue("t_order")), new FromDatabaseSegment(0, new DatabaseSegment(0, 
0, new IdentifierValue("foo_db"))));
     }
     
     @SuppressWarnings("unchecked")
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/DistSQLUpdateProxyBackendHandlerTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/DistSQLUpdateProxyBackendHandlerTest.java
index 38e14e32925..3e1b1cbf2c6 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/DistSQLUpdateProxyBackendHandlerTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/DistSQLUpdateProxyBackendHandlerTest.java
@@ -17,10 +17,9 @@
 
 package org.apache.shardingsphere.proxy.backend.handler.distsql;
 
-import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
-
 import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
 import 
org.apache.shardingsphere.distsql.statement.type.ral.updatable.RefreshTableMetaDataStatement;
+import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import 
org.apache.shardingsphere.infra.exception.kernel.metadata.SchemaNotFoundException;
 import 
org.apache.shardingsphere.infra.exception.kernel.metadata.TableNotFoundException;
 import 
org.apache.shardingsphere.infra.exception.kernel.metadata.resource.storageunit.EmptyStorageUnitException;
@@ -35,6 +34,7 @@ import 
org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import 
org.apache.shardingsphere.proxy.backend.response.header.update.UpdateResponseHeader;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
+import 
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.Answers;
@@ -48,7 +48,7 @@ import java.util.Properties;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.isA;
 import static org.junit.jupiter.api.Assertions.assertThrows;
-import static org.mockito.ArgumentMatchers.nullable;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
@@ -83,7 +83,7 @@ class DistSQLUpdateProxyBackendHandlerTest {
         ShardingSphereDatabase database = new ShardingSphereDatabase("foo_db", 
databaseType, resourceMetaData, ruleMetaData,
                 Collections.emptyList(), new ConfigurationProperties(new 
Properties()));
         when(contextManager.getDatabase("foo_db")).thenReturn(database);
-        RefreshTableMetaDataStatement sqlStatement = new 
RefreshTableMetaDataStatement("t_order", "ds_1", null);
+        RefreshTableMetaDataStatement sqlStatement = new 
RefreshTableMetaDataStatement(new IdentifierValue("t_order"), "ds_1", null);
         DistSQLUpdateProxyBackendHandler backendHandler = new 
DistSQLUpdateProxyBackendHandler(sqlStatement, mockQueryContext(), 
mockConnectionSession(), contextManager);
         assertThrows(MissingRequiredStorageUnitsException.class, 
backendHandler::execute);
     }
@@ -98,7 +98,7 @@ class DistSQLUpdateProxyBackendHandlerTest {
         ShardingSphereDatabase database = new ShardingSphereDatabase("foo_db", 
databaseType, resourceMetaData, ruleMetaData,
                 Collections.emptyList(), new ConfigurationProperties(new 
Properties()));
         when(contextManager.getDatabase("foo_db")).thenReturn(database);
-        RefreshTableMetaDataStatement sqlStatement = new 
RefreshTableMetaDataStatement("t_order", "ds_0", "bar_db");
+        RefreshTableMetaDataStatement sqlStatement = new 
RefreshTableMetaDataStatement(new IdentifierValue("t_order"), "ds_0", new 
IdentifierValue("bar_db"));
         DistSQLUpdateProxyBackendHandler backendHandler = new 
DistSQLUpdateProxyBackendHandler(sqlStatement, mockQueryContext(), 
mockConnectionSession(), contextManager);
         assertThrows(SchemaNotFoundException.class, backendHandler::execute);
     }
@@ -109,11 +109,11 @@ class DistSQLUpdateProxyBackendHandlerTest {
         
when(resourceMetaData.getStorageUnits()).thenReturn(Collections.singletonMap("ds_0",
 mock(StorageUnit.class)));
         ShardingSphereSchema schema = mock(ShardingSphereSchema.class);
         ShardingSphereDatabase database = mock(ShardingSphereDatabase.class);
-        when(database.containsSchema("foo_db")).thenReturn(true);
-        when(database.getSchema("foo_db")).thenReturn(schema);
+        when(database.containsSchema(new 
IdentifierValue("foo_db"))).thenReturn(true);
+        when(database.getSchema(new 
IdentifierValue("foo_db"))).thenReturn(schema);
         when(database.getResourceMetaData()).thenReturn(resourceMetaData);
         when(contextManager.getDatabase("foo_db")).thenReturn(database);
-        RefreshTableMetaDataStatement sqlStatement = new 
RefreshTableMetaDataStatement("t_order", "ds_0", "foo_db");
+        RefreshTableMetaDataStatement sqlStatement = new 
RefreshTableMetaDataStatement(new IdentifierValue("t_order"), "ds_0", new 
IdentifierValue("foo_db"));
         DistSQLUpdateProxyBackendHandler backendHandler = new 
DistSQLUpdateProxyBackendHandler(sqlStatement, mockQueryContext(), 
mockConnectionSession(), contextManager);
         assertThrows(TableNotFoundException.class, backendHandler::execute);
     }
@@ -123,7 +123,7 @@ class DistSQLUpdateProxyBackendHandlerTest {
         ResourceMetaData resourceMetaData = mock(ResourceMetaData.class);
         
when(resourceMetaData.getStorageUnits()).thenReturn(Collections.singletonMap("ds_0",
 mock(StorageUnit.class)));
         ShardingSphereDatabase database = mock(ShardingSphereDatabase.class);
-        when(database.containsSchema(nullable(String.class))).thenReturn(true);
+        
when(database.containsSchema(any(IdentifierValue.class))).thenReturn(true);
         when(database.getProtocolType()).thenReturn(databaseType);
         when(database.getResourceMetaData()).thenReturn(resourceMetaData);
         when(contextManager.getDatabase("foo_db")).thenReturn(database);
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/export/ShowTableMetaDataExecutorTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/export/ShowTableMetaDataExecutorTest.java
index 63e3eb8833f..c2914c61b22 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/export/ShowTableMetaDataExecutorTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/export/ShowTableMetaDataExecutorTest.java
@@ -19,8 +19,12 @@ package 
org.apache.shardingsphere.proxy.backend.handler.distsql.ral.queryable.ex
 
 import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
 import 
org.apache.shardingsphere.distsql.statement.type.ral.queryable.show.ShowTableMetaDataStatement;
+import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import 
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
+import 
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
+import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereColumn;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereIndex;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
@@ -37,9 +41,11 @@ import org.mockito.junit.jupiter.MockitoExtension;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Iterator;
+import java.util.Properties;
 
-import static org.hamcrest.Matchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
@@ -70,6 +76,31 @@ class ShowTableMetaDataExecutorTest {
         assertThat(row.getCell(5), 
is("{\"name\":\"primary\",\"columns\":[],\"unique\":false}"));
     }
     
+    @Test
+    void assertExecuteWithPostgreSQLQuotedUpperCaseTable() {
+        ShowTableMetaDataExecutor executor = new ShowTableMetaDataExecutor();
+        executor.setDatabase(createDatabase("foo_db", "PostgreSQL", "public", 
"T_USER_UPPER"));
+        Collection<LocalDataQueryResultRow> actual = executor.getRows(new 
ShowTableMetaDataStatement(Collections.singleton(new 
IdentifierValue("\"T_USER_UPPER\"")), null), mock(ContextManager.class));
+        assertThat(actual.size(), is(2));
+        assertThat(actual.iterator().next().getCell(2), is("T_USER_UPPER"));
+    }
+    
+    @Test
+    void assertExecuteWithPostgreSQLUnquotedUpperCaseTable() {
+        ShowTableMetaDataExecutor executor = new ShowTableMetaDataExecutor();
+        executor.setDatabase(createDatabase("foo_db", "PostgreSQL", "public", 
"T_USER_UPPER"));
+        assertTrue(executor.getRows(new 
ShowTableMetaDataStatement(Collections.singleton(new 
IdentifierValue("T_USER_UPPER")), null), mock(ContextManager.class)).isEmpty());
+    }
+    
+    @Test
+    void assertExecuteWithMySQLUpperCaseTable() {
+        ShowTableMetaDataExecutor executor = new ShowTableMetaDataExecutor();
+        executor.setDatabase(createDatabase("foo_db", "MySQL", "foo_db", 
"T_USER_UPPER"));
+        Collection<LocalDataQueryResultRow> actual = executor.getRows(new 
ShowTableMetaDataStatement(Collections.singleton(new 
IdentifierValue("t_user_upper")), null), mock(ContextManager.class));
+        assertThat(actual.size(), is(2));
+        assertThat(actual.iterator().next().getCell(2), is("T_USER_UPPER"));
+    }
+    
     private ShardingSphereDatabase mockDatabase() {
         ShardingSphereDatabase result = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
         
when(result.getProtocolType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
 "FIXTURE"));
@@ -84,7 +115,21 @@ class ShowTableMetaDataExecutorTest {
         return Collections.singleton(new ShardingSphereTable("t_order", 
columns, indexes, Collections.emptyList()));
     }
     
+    private Collection<ShardingSphereTable> createTables(final String 
tableName) {
+        Collection<ShardingSphereColumn> columns = 
Collections.singletonList(new ShardingSphereColumn("order_id", 0, false, false, 
false, true, false, false));
+        Collection<ShardingSphereIndex> indexes = 
Collections.singletonList(new ShardingSphereIndex("primary", 
Collections.emptyList(), false));
+        return Collections.singleton(new ShardingSphereTable(tableName, 
columns, indexes, Collections.emptyList()));
+    }
+    
+    private ShardingSphereDatabase createDatabase(final String databaseName, 
final String databaseType, final String schemaName, final String tableName) {
+        DatabaseType type = TypedSPILoader.getService(DatabaseType.class, 
databaseType);
+        StorageUnit storageUnit = mock(StorageUnit.class);
+        when(storageUnit.getStorageType()).thenReturn(type);
+        return new ShardingSphereDatabase(databaseName, type, new 
ResourceMetaData(Collections.emptyMap(), Collections.singletonMap("foo_ds", 
storageUnit)), mock(RuleMetaData.class),
+                Collections.singleton(new ShardingSphereSchema(schemaName, 
type, createTables(tableName), Collections.emptyList())), new 
ConfigurationProperties(new Properties()));
+    }
+    
     private ShowTableMetaDataStatement createSqlStatement() {
-        return new 
ShowTableMetaDataStatement(Collections.singleton("t_order"), new 
FromDatabaseSegment(0, new DatabaseSegment(0, 0, new 
IdentifierValue("foo_db"))));
+        return new ShowTableMetaDataStatement(Collections.singleton(new 
IdentifierValue("t_order")), new FromDatabaseSegment(0, new DatabaseSegment(0, 
0, new IdentifierValue("foo_db"))));
     }
 }
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/refresh/RefreshTableMetaDataExecutorTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/refresh/RefreshTableMetaDataExecutorTest.java
index c7ee3889802..a320aa71757 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/refresh/RefreshTableMetaDataExecutorTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/refresh/RefreshTableMetaDataExecutorTest.java
@@ -34,6 +34,7 @@ import 
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUn
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.mode.manager.ContextManager;
+import 
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
 import org.junit.jupiter.api.Test;
 import org.mockito.MockedStatic;
 
@@ -41,6 +42,7 @@ import java.util.Collections;
 import java.util.Optional;
 
 import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
@@ -58,40 +60,44 @@ class RefreshTableMetaDataExecutorTest {
     void assertExecuteUpdateWithReloadTableWithStorageUnit() {
         ShardingSphereDatabase database = mockDatabase(true);
         ShardingSphereSchema schema = mock(ShardingSphereSchema.class);
-        when(schema.containsTable("t_order")).thenReturn(true);
-        when(database.getSchema("logic_schema")).thenReturn(schema);
+        when(schema.getName()).thenReturn("logic_schema");
+        when(schema.containsTable(new 
IdentifierValue("t_order"))).thenReturn(true);
+        when(database.getSchema(new 
IdentifierValue("logic_schema"))).thenReturn(schema);
         ContextManager contextManager = mock(ContextManager.class);
         executor.setDatabase(database);
-        executor.executeUpdate(new RefreshTableMetaDataStatement("t_order", 
"ds_0", "logic_schema"), contextManager);
-        verify(contextManager).reloadTable(database, "logic_schema", "ds_0", 
"t_order");
+        executor.executeUpdate(new RefreshTableMetaDataStatement(new 
IdentifierValue("t_order"), "ds_0", new IdentifierValue("logic_schema")), 
contextManager);
+        verify(contextManager).reloadTable(database, "logic_schema", "ds_0", 
new IdentifierValue("t_order"));
     }
     
     @Test
     void assertExecuteUpdateWithReloadSchemaWithStorageUnit() {
-        RefreshTableMetaDataStatement sqlStatement = new 
RefreshTableMetaDataStatement(null, "ds_0", "logic_schema");
         ShardingSphereDatabase database = mockDatabase(true);
+        ShardingSphereSchema schema = mock(ShardingSphereSchema.class);
+        when(schema.getName()).thenReturn("logic_schema");
+        when(database.getSchema(new 
IdentifierValue("logic_schema"))).thenReturn(schema);
         ContextManager contextManager = mock(ContextManager.class);
         executor.setDatabase(database);
-        executor.executeUpdate(sqlStatement, contextManager);
+        executor.executeUpdate(new RefreshTableMetaDataStatement(null, "ds_0", 
new IdentifierValue("logic_schema")), contextManager);
         verify(contextManager).reloadSchema(database, "logic_schema", "ds_0");
     }
     
     @Test
     void assertExecuteUpdateWithReloadTableWithoutStorageUnit() {
-        RefreshTableMetaDataStatement sqlStatement = new 
RefreshTableMetaDataStatement("t_order", null, null);
+        RefreshTableMetaDataStatement sqlStatement = new 
RefreshTableMetaDataStatement(new IdentifierValue("t_order"), null, null);
         ShardingSphereDatabase database = mockDatabase(true);
         when(database.getProtocolType()).thenReturn(databaseType);
         DialectDatabaseMetaData dialectDatabaseMetaData = 
mockDialectDatabaseMetaData();
         ShardingSphereSchema schema = mock(ShardingSphereSchema.class);
-        when(schema.containsTable("t_order")).thenReturn(true);
-        when(database.getSchema("public")).thenReturn(schema);
+        when(schema.getName()).thenReturn("public");
+        when(schema.containsTable(new 
IdentifierValue("t_order"))).thenReturn(true);
+        when(database.getSchema(new 
IdentifierValue("public"))).thenReturn(schema);
         ContextManager contextManager = mock(ContextManager.class);
         executor.setDatabase(database);
         try (MockedStatic<DatabaseTypedSPILoader> mockedStatic = 
mockStatic(DatabaseTypedSPILoader.class)) {
             mockedStatic.when(() -> 
DatabaseTypedSPILoader.getService(DialectDatabaseMetaData.class, 
databaseType)).thenReturn(dialectDatabaseMetaData);
             executor.executeUpdate(sqlStatement, contextManager);
         }
-        verify(contextManager).reloadTable(database, "public", "t_order");
+        verify(contextManager).reloadTable(database, "public", new 
IdentifierValue("t_order"));
     }
     
     @Test
@@ -140,7 +146,7 @@ class RefreshTableMetaDataExecutorTest {
     
     @Test
     void assertExecuteUpdateWhenSchemaMissing() {
-        RefreshTableMetaDataStatement sqlStatement = new 
RefreshTableMetaDataStatement(null, null, "absent_schema");
+        RefreshTableMetaDataStatement sqlStatement = new 
RefreshTableMetaDataStatement(null, null, new IdentifierValue("absent_schema"));
         ShardingSphereDatabase database = mockDatabase(false);
         executor.setDatabase(database);
         assertThrows(SchemaNotFoundException.class, () -> 
executor.executeUpdate(sqlStatement, mock(ContextManager.class)));
@@ -150,10 +156,11 @@ class RefreshTableMetaDataExecutorTest {
     void assertExecuteUpdateWhenTableMissing() {
         ShardingSphereDatabase database = mockDatabase(true);
         ShardingSphereSchema schema = mock(ShardingSphereSchema.class);
-        when(schema.containsTable("missing_table")).thenReturn(false);
-        when(database.getSchema("logic_schema")).thenReturn(schema);
+        when(schema.containsTable(new 
IdentifierValue("missing_table"))).thenReturn(false);
+        when(database.getSchema(new 
IdentifierValue("logic_schema"))).thenReturn(schema);
         executor.setDatabase(database);
-        assertThrows(TableNotFoundException.class, () -> 
executor.executeUpdate(new RefreshTableMetaDataStatement("missing_table", null, 
"logic_schema"), mock(ContextManager.class)));
+        assertThrows(TableNotFoundException.class,
+                () -> executor.executeUpdate(new 
RefreshTableMetaDataStatement(new IdentifierValue("missing_table"), null, new 
IdentifierValue("logic_schema")), mock(ContextManager.class)));
     }
     
     private ShardingSphereDatabase mockDatabase(final boolean schemaExists) {
@@ -161,6 +168,7 @@ class RefreshTableMetaDataExecutorTest {
         when(result.getName()).thenReturn("logic_db");
         
when(result.getResourceMetaData().getStorageUnits()).thenReturn(Collections.singletonMap("ds_0",
 mock(StorageUnit.class)));
         when(result.containsSchema(anyString())).thenReturn(schemaExists);
+        
when(result.containsSchema(any(IdentifierValue.class))).thenReturn(schemaExists);
         return result;
     }
     
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ral/type/queryable/ShowTableMetaDataStatementAssert.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ral/type/queryable/ShowTableMetaDataStatementAssert.java
index ca55ec213cd..0f259346c60 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ral/type/queryable/ShowTableMetaDataStatementAssert.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ral/type/queryable/ShowTableMetaDataStatementAssert.java
@@ -20,13 +20,18 @@ package 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import 
org.apache.shardingsphere.distsql.statement.type.ral.queryable.show.ShowTableMetaDataStatement;
+import 
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.database.DatabaseAssert;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.identifier.IdentifierValueAssert;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.ExistingAssert;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.identifier.ExpectedIdentifier;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ral.ShowTableMetaDataStatementTestCase;
 
-import static org.hamcrest.Matchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 /**
  * Show table meta data statement assert.
@@ -43,8 +48,23 @@ public final class ShowTableMetaDataStatementAssert {
      */
     public static void assertIs(final SQLCaseAssertContext assertContext, 
final ShowTableMetaDataStatement actual, final 
ShowTableMetaDataStatementTestCase expected) {
         if (ExistingAssert.assertIs(assertContext, actual, expected)) {
-            DatabaseAssert.assertIs(assertContext, 
actual.getFromDatabase().getDatabase(), expected.getDatabase());
-            assertThat(assertContext.getText("Table assertion error:"), 
actual.getTableNames(), is(expected.getTableNames()));
+            if (null == expected.getDatabase()) {
+                assertNull(actual.getFromDatabase(), 
assertContext.getText("From database assertion error:"));
+            } else {
+                DatabaseAssert.assertIs(assertContext, 
actual.getFromDatabase().getDatabase(), expected.getDatabase());
+            }
+            assertNotNull(actual.getTableNames(), assertContext.getText("Table 
assertion error:"));
+            assertNotNull(expected.getTableNames(), 
assertContext.getText("Table assertion error:"));
+            assertThat(assertContext.getText("Table assertion error:"), 
actual.getTableNames().size(), is(expected.getTableNames().size()));
+            for (ExpectedIdentifier each : expected.getTableNames()) {
+                IdentifierValue actualTableName = findTableName(actual, each);
+                assertNotNull(actualTableName, assertContext.getText("Table 
assertion error:"));
+                IdentifierValueAssert.assertIs(assertContext, actualTableName, 
each, "Table");
+            }
         }
     }
+    
+    private static IdentifierValue findTableName(final 
ShowTableMetaDataStatement actual, final ExpectedIdentifier expected) {
+        return actual.getTableNames().stream().filter(each -> 
expected.getName().equals(each.getValue())).findFirst().orElse(null);
+    }
 }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ral/type/updatable/RefreshTableMetaDataStatementAssert.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ral/type/updatable/RefreshTableMetaDataStatementAssert.java
index 15486b6adfd..5ba1a4ab616 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ral/type/updatable/RefreshTableMetaDataStatementAssert.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/ral/type/updatable/RefreshTableMetaDataStatementAssert.java
@@ -20,12 +20,16 @@ package 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import 
org.apache.shardingsphere.distsql.statement.type.ral.updatable.RefreshTableMetaDataStatement;
+import 
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.identifier.IdentifierValueAssert;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.ExistingAssert;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.identifier.ExpectedIdentifier;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ral.RefreshTableMetaDataStatementTestCase;
 
 import static org.hamcrest.Matchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 /**
  * Refresh table meta data statement assert.
@@ -43,14 +47,20 @@ public final class RefreshTableMetaDataStatementAssert {
     public static void assertIs(final SQLCaseAssertContext assertContext, 
final RefreshTableMetaDataStatement actual, final 
RefreshTableMetaDataStatementTestCase expected) {
         if (ExistingAssert.assertIs(assertContext, actual, expected)) {
             if (null != expected.getTableName()) {
-                assertThat(assertContext.getText("Table name assertion 
error"), actual.getTableName().get(), is(expected.getTableName()));
+                assertNotNull(actual.getTableName().orElse(null), 
assertContext.getText("Table name assertion error"));
+                assertIdentifier(assertContext, actual.getTableName().get(), 
expected.getTableName(), "Table name");
             }
             if (null != expected.getStorageUnitName()) {
                 assertThat(assertContext.getText("Storage unit name assertion 
error"), actual.getStorageUnitName().get(), is(expected.getStorageUnitName()));
             }
             if (null != expected.getSchemaName()) {
-                assertThat(assertContext.getText("Schema name assertion 
error"), actual.getSchemaName().get(), is(expected.getSchemaName()));
+                assertNotNull(actual.getSchemaName().orElse(null), 
assertContext.getText("Schema name assertion error"));
+                assertIdentifier(assertContext, actual.getSchemaName().get(), 
expected.getSchemaName(), "Schema name");
             }
         }
     }
+    
+    private static void assertIdentifier(final SQLCaseAssertContext 
assertContext, final IdentifierValue actual, final ExpectedIdentifier expected, 
final String type) {
+        IdentifierValueAssert.assertIs(assertContext, actual, expected, type);
+    }
 }
diff --git a/parser/distsql/engine/src/main/antlr4/imports/Literals.g4 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/identifier/ExpectedIdentifier.java
similarity index 69%
copy from parser/distsql/engine/src/main/antlr4/imports/Literals.g4
copy to 
test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/identifier/ExpectedIdentifier.java
index 68f6a1b07ed..922b371b1ab 100644
--- a/parser/distsql/engine/src/main/antlr4/imports/Literals.g4
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/identifier/ExpectedIdentifier.java
@@ -15,20 +15,12 @@
  * limitations under the License.
  */
 
-lexer grammar Literals;
+package 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.identifier;
 
-import Alphabet, Symbol;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.AbstractExpectedIdentifierSQLSegment;
 
-IDENTIFIER_
-    : [A-Za-z_$0-9]*?[A-Za-z_$]+?[A-Za-z_$0-9]*
-    | BQ_ ~'`'+ BQ_
-    ;
-
-STRING_
-    : (DQ_ ('\\'. | '""' | ~('"' | '\\'))* DQ_)
-    | (SQ_ ('\\'. | '\'\'' | ~('\'' | '\\'))* SQ_)
-    ;
-
-INT_
-    : [0-9]+
-    ;
+/**
+ * Expected identifier.
+ */
+public final class ExpectedIdentifier extends 
AbstractExpectedIdentifierSQLSegment {
+}
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/ral/RefreshTableMetaDataStatementTestCase.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/ral/RefreshTableMetaDataStatementTestCase.java
index cc710c8c352..e67f33fc902 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/ral/RefreshTableMetaDataStatementTestCase.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/ral/RefreshTableMetaDataStatementTestCase.java
@@ -20,7 +20,9 @@ package 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.
 import lombok.Getter;
 import lombok.Setter;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.SQLParserTestCase;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.identifier.ExpectedIdentifier;
 
+import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlAttribute;
 
 /**
@@ -30,12 +32,12 @@ import javax.xml.bind.annotation.XmlAttribute;
 @Setter
 public final class RefreshTableMetaDataStatementTestCase extends 
SQLParserTestCase {
     
-    @XmlAttribute(name = "table-name")
-    private String tableName;
+    @XmlElement(name = "table-name")
+    private ExpectedIdentifier tableName;
     
     @XmlAttribute(name = "storage-unit-name")
     private String storageUnitName;
     
-    @XmlAttribute(name = "schema-name")
-    private String schemaName;
+    @XmlElement(name = "schema-name")
+    private ExpectedIdentifier schemaName;
 }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/ral/ShowTableMetaDataStatementTestCase.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/ral/ShowTableMetaDataStatementTestCase.java
index d11d470c603..814f50c24d7 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/ral/ShowTableMetaDataStatementTestCase.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/ral/ShowTableMetaDataStatementTestCase.java
@@ -20,6 +20,7 @@ package 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.
 import lombok.Getter;
 import lombok.Setter;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.DatabaseContainedTestCase;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.identifier.ExpectedIdentifier;
 
 import javax.xml.bind.annotation.XmlElement;
 import java.util.Set;
@@ -32,5 +33,5 @@ import java.util.Set;
 public final class ShowTableMetaDataStatementTestCase extends 
DatabaseContainedTestCase {
     
     @XmlElement(name = "table-name")
-    private Set<String> tableNames;
+    private Set<ExpectedIdentifier> tableNames;
 }
diff --git a/test/it/parser/src/main/resources/case/ral/queryable.xml 
b/test/it/parser/src/main/resources/case/ral/queryable.xml
index 6a039c78cad..8a74a5c7b88 100644
--- a/test/it/parser/src/main/resources/case/ral/queryable.xml
+++ b/test/it/parser/src/main/resources/case/ral/queryable.xml
@@ -24,9 +24,19 @@
     <show-status-from-readwrite-splitting-rules 
sql-case-id="show-status-from-readwrite-splitting-rules" />
     
     <show-table-metadata sql-case-id="show-table-metadata">
-        <table-name>t_order</table-name>
+        <table-name name="t_order" />
         <database name="database_name" start-index="33" stop-index="45" />
     </show-table-metadata>
+    <show-table-metadata 
sql-case-id="show-table-metadata-with-back-quoted-database-name">
+        <table-name name="t_order" />
+        <database name="database_name" start-index="33" stop-index="47" 
start-delimiter="`" end-delimiter="`" />
+    </show-table-metadata>
+    <show-table-metadata 
sql-case-id="show-table-metadata-with-back-quoted-table-name">
+        <table-name name="T_ORDER" start-delimiter="`" end-delimiter="`" />
+    </show-table-metadata>
+    <show-table-metadata 
sql-case-id="show-table-metadata-with-double-quoted-table-name">
+        <table-name name="T_ORDER" start-delimiter="&quot;" 
end-delimiter="&quot;" />
+    </show-table-metadata>
     
     <show-authority-rule sql-case-id="show-authority-rule" />
     <show-transaction-rule sql-case-id="show-transaction-rule" />
diff --git a/test/it/parser/src/main/resources/case/ral/updatable.xml 
b/test/it/parser/src/main/resources/case/ral/updatable.xml
index adb26d38174..9dd3adc6ff4 100644
--- a/test/it/parser/src/main/resources/case/ral/updatable.xml
+++ b/test/it/parser/src/main/resources/case/ral/updatable.xml
@@ -20,10 +20,31 @@
     <set-dist-variable sql-case-id="set-dist-variable" />
     
     <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" storage-unit-name="ds_0" />
-    <refresh-table-metadata sql-case-id="refresh-table-metadata-with-schema" 
storage-unit-name="ds_0" schema-name="public" />
-    <refresh-table-metadata 
sql-case-id="refresh-table-metadata-table-with-schema" table-name="t_order" 
storage-unit-name="ds_0" schema-name="public" />
+    <refresh-table-metadata 
sql-case-id="refresh-table-metadata-with-table-name">
+        <table-name name="t_order" />
+    </refresh-table-metadata>
+    <refresh-table-metadata sql-case-id="refresh-table-metadata-with-resource" 
storage-unit-name="ds_0">
+        <table-name name="t_order" />
+    </refresh-table-metadata>
+    <refresh-table-metadata 
sql-case-id="refresh-table-metadata-with-back-quoted-storage-unit-name" 
storage-unit-name="ds_0">
+        <table-name name="t_order" />
+    </refresh-table-metadata>
+    <refresh-table-metadata sql-case-id="refresh-table-metadata-with-schema" 
storage-unit-name="ds_0">
+        <schema-name name="public" />
+    </refresh-table-metadata>
+    <refresh-table-metadata 
sql-case-id="refresh-table-metadata-table-with-schema" storage-unit-name="ds_0">
+        <table-name name="t_order" />
+        <schema-name name="public" />
+    </refresh-table-metadata>
+    <refresh-table-metadata 
sql-case-id="refresh-table-metadata-with-back-quoted-table-name">
+        <table-name name="T_ORDER" start-delimiter="`" end-delimiter="`" />
+    </refresh-table-metadata>
+    <refresh-table-metadata 
sql-case-id="refresh-table-metadata-with-double-quoted-table-name">
+        <table-name name="T_ORDER" start-delimiter="&quot;" 
end-delimiter="&quot;" />
+    </refresh-table-metadata>
+    <refresh-table-metadata 
sql-case-id="refresh-table-metadata-with-double-quoted-schema-name" 
storage-unit-name="ds_0">
+        <schema-name name="PUBLIC" start-delimiter="&quot;" 
end-delimiter="&quot;" />
+    </refresh-table-metadata>
     
     <alter-sql-parser-rule sql-case-id="alter-sql-parser-rule">
         <sql-parser sql-comment-parse-enabled="false">
diff --git a/test/it/parser/src/main/resources/case/rdl/alter.xml 
b/test/it/parser/src/main/resources/case/rdl/alter.xml
index c0deb0c0f79..88d94f646b5 100644
--- a/test/it/parser/src/main/resources/case/rdl/alter.xml
+++ b/test/it/parser/src/main/resources/case/rdl/alter.xml
@@ -58,6 +58,14 @@
             <property key="maxPoolSize" value="30" />
         </data-source>
     </alter-storage-unit>
+
+    <alter-storage-unit 
sql-case-id="alter-storage-unit-simple-single-with-double-quoted-string-values">
+        <data-source name="ds_0" hostname="127.0.0.1" port="3306" db="test0" 
user="ROOT" password="123456" />
+    </alter-storage-unit>
+
+    <alter-storage-unit 
sql-case-id="alter-storage-unit-url-single-with-double-quoted-string-values">
+        <data-source name="ds_0" url="jdbc:mysql://127.0.0.1:3306/test0" 
user="ROOT" password="123456" />
+    </alter-storage-unit>
     
     <alter-sharding-auto-table-rule 
sql-case-id="alter-sharding-auto-table-rule">
         <rule name="t_order" table-strategy-column="order_id" 
key-generate-strategy-column="another_id">
diff --git a/test/it/parser/src/main/resources/case/rdl/create.xml 
b/test/it/parser/src/main/resources/case/rdl/create.xml
index 303a0645d72..2de629220d2 100644
--- a/test/it/parser/src/main/resources/case/rdl/create.xml
+++ b/test/it/parser/src/main/resources/case/rdl/create.xml
@@ -71,6 +71,14 @@
             <property key="maxPoolSize" value="30" />
         </data-source>
     </register-storage-unit>
+
+    <register-storage-unit 
sql-case-id="register-storage-unit-simple-single-with-double-quoted-string-values">
+        <data-source name="ds_0" hostname="127.0.0.1" port="3306" db="test0" 
user="ROOT" password="123456" />
+    </register-storage-unit>
+
+    <register-storage-unit 
sql-case-id="register-storage-unit-url-single-with-double-quoted-string-values">
+        <data-source name="ds_0" url="jdbc:mysql://127.0.0.1:3306/test0" 
user="ROOT" password="123456" />
+    </register-storage-unit>
     
     <create-sharding-auto-table-rule 
sql-case-id="create-sharding-auto-table-rule">
         <rule name="t_order" table-strategy-column="order_id" 
key-generate-strategy-column="another_id">
diff --git a/test/it/parser/src/main/resources/sql/supported/ral/queryable.xml 
b/test/it/parser/src/main/resources/sql/supported/ral/queryable.xml
index 619248f1778..b8267bef93b 100644
--- a/test/it/parser/src/main/resources/sql/supported/ral/queryable.xml
+++ b/test/it/parser/src/main/resources/sql/supported/ral/queryable.xml
@@ -24,6 +24,9 @@
     <sql-case id="show-status-from-readwrite-splitting-rules" value="SHOW 
STATUS FROM READWRITE_SPLITTING RULES" db-types="ShardingSphere" />
     
     <sql-case id="show-table-metadata" value="SHOW TABLE METADATA t_order FROM 
database_name" db-types="ShardingSphere" />
+    <sql-case id="show-table-metadata-with-back-quoted-database-name" 
value="SHOW TABLE METADATA t_order FROM `database_name`" 
db-types="ShardingSphere" />
+    <sql-case id="show-table-metadata-with-back-quoted-table-name" value="SHOW 
TABLE METADATA `T_ORDER`" db-types="ShardingSphere" />
+    <sql-case id="show-table-metadata-with-double-quoted-table-name" 
value="SHOW TABLE METADATA &quot;T_ORDER&quot;" db-types="ShardingSphere" />
     
     <sql-case id="show-authority-rule" value="SHOW AUTHORITY RULE" 
db-types="ShardingSphere" />
     <sql-case id="show-transaction-rule" value="SHOW TRANSACTION RULE" 
db-types="ShardingSphere" />
diff --git a/test/it/parser/src/main/resources/sql/supported/ral/updatable.xml 
b/test/it/parser/src/main/resources/sql/supported/ral/updatable.xml
index a14384f544e..30a4cf6d2e9 100644
--- a/test/it/parser/src/main/resources/sql/supported/ral/updatable.xml
+++ b/test/it/parser/src/main/resources/sql/supported/ral/updatable.xml
@@ -22,8 +22,12 @@
     <sql-case id="refresh-table-metadata" value="REFRESH TABLE METADATA" 
db-types="ShardingSphere" />
     <sql-case id="refresh-table-metadata-with-table-name" value="REFRESH TABLE 
METADATA t_order" db-types="ShardingSphere" />
     <sql-case id="refresh-table-metadata-with-resource" value="REFRESH TABLE 
METADATA t_order FROM STORAGE UNIT ds_0" db-types="ShardingSphere" />
+    <sql-case id="refresh-table-metadata-with-back-quoted-storage-unit-name" 
value="REFRESH TABLE METADATA t_order FROM STORAGE UNIT `ds_0`" 
db-types="ShardingSphere" />
     <sql-case id="refresh-table-metadata-with-schema" value="REFRESH TABLE 
METADATA FROM STORAGE UNIT ds_0 SCHEMA public" db-types="ShardingSphere" />
     <sql-case id="refresh-table-metadata-table-with-schema" value="REFRESH 
TABLE METADATA t_order FROM STORAGE UNIT ds_0 SCHEMA public" 
db-types="ShardingSphere" />
+    <sql-case id="refresh-table-metadata-with-back-quoted-table-name" 
value="REFRESH TABLE METADATA `T_ORDER`" db-types="ShardingSphere" />
+    <sql-case id="refresh-table-metadata-with-double-quoted-table-name" 
value="REFRESH TABLE METADATA &quot;T_ORDER&quot;" db-types="ShardingSphere" />
+    <sql-case id="refresh-table-metadata-with-double-quoted-schema-name" 
value="REFRESH TABLE METADATA FROM STORAGE UNIT ds_0 SCHEMA &quot;PUBLIC&quot;" 
db-types="ShardingSphere" />
 
     <sql-case id="alter-sql-parser-rule" value="ALTER SQL_PARSER RULE 
(PARSE_TREE_CACHE(INITIAL_CAPACITY=10, MAXIMUM_SIZE=11), 
SQL_STATEMENT_CACHE(INITIAL_CAPACITY=11, MAXIMUM_SIZE=11));" 
db-types="ShardingSphere" />
     <sql-case id="alter-sql-translator-rule" value="ALTER SQL_TRANSLATOR RULE 
(TYPE(NAME='DISTSQL:FIXTURE', PROPERTIES('foo'='bar')), 
USE_ORIGINAL_SQL_WHEN_TRANSLATING_FAILED=TRUE)" db-types="ShardingSphere" />
diff --git a/test/it/parser/src/main/resources/sql/supported/rdl/alter.xml 
b/test/it/parser/src/main/resources/sql/supported/rdl/alter.xml
index 3eba35aa5e9..2b65490051a 100644
--- a/test/it/parser/src/main/resources/sql/supported/rdl/alter.xml
+++ b/test/it/parser/src/main/resources/sql/supported/rdl/alter.xml
@@ -26,6 +26,8 @@
     <sql-case id="alter-storage-unit-single-with-properties" value="ALTER 
STORAGE UNIT 
ds_0(HOST='127.0.0.1',PORT=3306,DB='test0',USER='ROOT',PASSWORD='123456',PROPERTIES('maxPoolSize'='30'));"
 db-types="ShardingSphere" />
     <sql-case id="alter-storage-unit-url-single-with-empty-properties" 
value="ALTER STORAGE UNIT 
ds_0(URL='jdbc:mysql://127.0.0.1:3306/test0',USER='ROOT',PROPERTIES())" 
db-types="ShardingSphere" />
     <sql-case id="alter-storage-unit-url-single-with-properties" value="ALTER 
STORAGE UNIT 
ds_0(URL='jdbc:mysql://127.0.0.1:3306/test0',USER='ROOT',PASSWORD='123456',PROPERTIES('maxPoolSize'='30'))"
 db-types="ShardingSphere" />
+    <sql-case 
id="alter-storage-unit-simple-single-with-double-quoted-string-values" 
value="ALTER STORAGE UNIT 
ds_0(HOST=&quot;127.0.0.1&quot;,PORT=3306,DB=&quot;test0&quot;,USER=&quot;ROOT&quot;,PASSWORD=&quot;123456&quot;);"
 db-types="ShardingSphere" />
+    <sql-case 
id="alter-storage-unit-url-single-with-double-quoted-string-values" 
value="ALTER STORAGE UNIT 
ds_0(URL=&quot;jdbc:mysql://127.0.0.1:3306/test0&quot;,USER=&quot;ROOT&quot;,PASSWORD=&quot;123456&quot;);"
 db-types="ShardingSphere" />
     <sql-case id="alter-encrypt-rule" value="ALTER ENCRYPT RULE t_encrypt 
(COLUMNS((NAME=user_id,CIPHER=user_cipher,ENCRYPT_ALGORITHM(TYPE(NAME='AES',PROPERTIES('aes-key-value'='123456abc',
 'digest-algorithm-name'='SHA-1')))), (NAME=order_id, 
CIPHER=order_cipher,ENCRYPT_ALGORITHM(TYPE(NAME='RC4',PROPERTIES('rc4-key-value'='123456abc'))))))"
 db-types="ShardingSphere" />
     <sql-case id="alter-encrypt-rule-with-assisted-query-column" value="ALTER 
ENCRYPT RULE t_encrypt 
(COLUMNS((NAME=user_id,CIPHER=user_cipher,ASSISTED_QUERY_COLUMN=assisted_column,
 ENCRYPT_ALGORITHM(TYPE(NAME='AES',PROPERTIES('aes-key-value'='123456abc', 
'digest-algorithm-name'='SHA-1'))), 
ASSISTED_QUERY_ALGORITHM(TYPE(NAME='MD5'))), (NAME=order_id, 
CIPHER=order_cipher,ENCRYPT_ALGORITHM(TYPE(NAME='RC4',PROPERTIES('rc4-key-value'='123456abc'))))))"
 db-types="ShardingSphere" />
     <sql-case id="alter-encrypt-rule-with-like-query-column" value="ALTER 
ENCRYPT RULE t_encrypt 
(COLUMNS((NAME=user_id,CIPHER=user_cipher,LIKE_QUERY_COLUMN=like_column, 
ENCRYPT_ALGORITHM(TYPE(NAME='AES',PROPERTIES('aes-key-value'='123456abc', 
'digest-algorithm-name'='SHA-1'))), 
LIKE_QUERY_ALGORITHM(TYPE(NAME='CHAR_DIGEST_LIKE'))), (NAME=order_id, 
CIPHER=order_cipher,ENCRYPT_ALGORITHM(TYPE(NAME='RC4',PROPERTIES('rc4-key-value'='123456abc'))))))"
 db-types="ShardingSphere" />
diff --git a/test/it/parser/src/main/resources/sql/supported/rdl/create.xml 
b/test/it/parser/src/main/resources/sql/supported/rdl/create.xml
index 08ec77bbad2..43a1ae6431b 100644
--- a/test/it/parser/src/main/resources/sql/supported/rdl/create.xml
+++ b/test/it/parser/src/main/resources/sql/supported/rdl/create.xml
@@ -27,6 +27,8 @@
     <sql-case id="register-storage-unit-single-with-properties" 
value="REGISTER STORAGE UNIT 
ds_0(HOST='127.0.0.1',PORT=3306,DB='test0',USER='ROOT',PASSWORD='123456',PROPERTIES('maxPoolSize'='30','idleTimeout'=30000));"
 db-types="ShardingSphere" />
     <sql-case id="register-storage-unit-url-single-with-empty-properties" 
value="REGISTER STORAGE UNIT 
ds_0(URL='jdbc:mysql://127.0.0.1:3306/test0',USER='ROOT',PROPERTIES())" 
db-types="ShardingSphere" />
     <sql-case id="register-storage-unit-url-single-with-properties" 
value="REGISTER STORAGE UNIT 
ds_0(URL='jdbc:mysql://127.0.0.1:3306/test0',USER='ROOT',PASSWORD='123456',PROPERTIES('maxPoolSize'='30'))"
 db-types="ShardingSphere" />
+    <sql-case 
id="register-storage-unit-simple-single-with-double-quoted-string-values" 
value="REGISTER STORAGE UNIT 
ds_0(HOST=&quot;127.0.0.1&quot;,PORT=3306,DB=&quot;test0&quot;,USER=&quot;ROOT&quot;,PASSWORD=&quot;123456&quot;);"
 db-types="ShardingSphere" />
+    <sql-case 
id="register-storage-unit-url-single-with-double-quoted-string-values" 
value="REGISTER STORAGE UNIT 
ds_0(URL=&quot;jdbc:mysql://127.0.0.1:3306/test0&quot;,USER=&quot;ROOT&quot;,PASSWORD=&quot;123456&quot;);"
 db-types="ShardingSphere" />
     <sql-case id="create-sharding-auto-table-rule" value="CREATE SHARDING 
TABLE RULE t_order (STORAGE_UNITS(ms_group_0,ms_group_1), 
SHARDING_COLUMN=order_id,TYPE(NAME='hash_mod',PROPERTIES('sharding-count'='4')),
 KEY_GENERATE_STRATEGY(COLUMN=another_id,TYPE(NAME='snowflake')))" 
db-types="ShardingSphere" />
     <sql-case id="create-sharding-auto-table-rule-if-not-exists" value="CREATE 
SHARDING TABLE RULE IF NOT EXISTS t_order 
(STORAGE_UNITS(ms_group_0,ms_group_1), 
SHARDING_COLUMN=order_id,TYPE(NAME='hash_mod',PROPERTIES('sharding-count'='4')),
 KEY_GENERATE_STRATEGY(COLUMN=another_id,TYPE(NAME='snowflake')))" 
db-types="ShardingSphere" />
     <sql-case id="create-sharding-auto-table-rule-with-inline-expression" 
value="CREATE SHARDING TABLE RULE t_order (STORAGE_UNITS('ms_group_${0..1}'), 
SHARDING_COLUMN=order_id,TYPE(NAME='hash_mod',PROPERTIES('sharding-count'=4)), 
KEY_GENERATE_STRATEGY(COLUMN=another_id,TYPE(NAME='snowflake')))" 
db-types="ShardingSphere" />
diff --git a/test/it/parser/src/main/resources/sql/unsupported/unsupported.xml 
b/test/it/parser/src/main/resources/sql/unsupported/unsupported.xml
index 3448549e8bf..77b9c5767cd 100644
--- a/test/it/parser/src/main/resources/sql/unsupported/unsupported.xml
+++ b/test/it/parser/src/main/resources/sql/unsupported/unsupported.xml
@@ -21,6 +21,8 @@
     <sql-case 
id="assert_select_with_json_unquote_extract_sign_with_parameter_marker" 
value="SELECT * FROM t_order WHERE order_id -&gt;&gt; ?" db-types="MySQL" />
     <sql-case id="assert_insert_with_first" value="INSERT FIRST INTO TABLE_XXX 
(field1) VALUES (field1) SELECT field1 FROM TABLE_XXX2" db-types="Oracle" />
     <sql-case id="assert_dist_SQL_show_rule_parse_conflict" value="SHOW 
REPLICA_QUERY RULE FROM schema_name" />
+    <sql-case 
id="unsupported_show_table_metadata_with_single_quoted_table_name" value="SHOW 
TABLE METADATA 'T_ORDER'" db-types="ShardingSphere" />
+    <sql-case 
id="unsupported_refresh_table_metadata_with_single_quoted_table_name" 
value="REFRESH TABLE METADATA 'T_ORDER'" db-types="ShardingSphere" />
     <sql-case id="with_select" value="WITH cte AS (SELECT 0 /*! ) */ SELECT * 
FROM cte a, cte b;" db-types="MySQL" />
     <sql-case id="with_select_comment" value="WITH cte AS /*! ( */ SELECT 0) 
SELECT * FROM cte a, cte b;" db-types="MySQL" />
     <sql-case id="create_table_as_select" value="create table agg_data_2k as 
select g from generate_series(0, 1999) g;" db-types="PostgreSQL" />

Reply via email to