You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2022/05/09 05:23:41 UTC

[shardingsphere] branch master updated: Fix create, alter and drop schema statements wrong parse result with quotes (#17470)

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 fc07a05b54d Fix create, alter and drop schema statements wrong parse result with quotes (#17470)
fc07a05b54d is described below

commit fc07a05b54dbfb1d6b9c11aeb9d7744142db4ef3
Author: Zhengqiang Duan <du...@apache.org>
AuthorDate: Mon May 9 13:23:32 2022 +0800

    Fix create, alter and drop schema statements wrong parse result with quotes (#17470)
---
 .../type/AlterSchemaStatementSchemaRefresher.java     |  9 +++++----
 .../type/CreateSchemaStatementSchemaRefresher.java    | 10 ++++++----
 .../type/DropSchemaStatementSchemaRefresher.java      | 19 +++++++++++++++----
 .../ddl/SingleTableDropSchemaMetadataValidator.java   | 10 ++++++----
 .../impl/OpenGaussDDLStatementSQLVisitor.java         | 17 ++++++++---------
 .../impl/PostgreSQLDDLStatementSQLVisitor.java        | 17 ++++++++---------
 .../common/statement/ddl/AlterSchemaStatement.java    |  3 ++-
 .../common/statement/ddl/CreateSchemaStatement.java   |  5 +++--
 .../sql/common/statement/ddl/DropSchemaStatement.java |  3 ++-
 .../handler/ddl/AlterSchemaStatementHandler.java      |  3 ++-
 .../handler/ddl/CreateSchemaStatementHandler.java     |  3 ++-
 .../opengauss/ddl/OpenGaussAlterSchemaStatement.java  |  5 +++--
 .../opengauss/ddl/OpenGaussCreateSchemaStatement.java |  5 +++--
 .../ddl/PostgreSQLAlterSchemaStatement.java           |  5 +++--
 .../ddl/PostgreSQLCreateSchemaStatement.java          |  5 +++--
 .../handler/ddl/AlterSchemaStatementHandlerTest.java  | 13 +++++++------
 .../handler/ddl/CreateSchemaStatementHandlerTest.java | 13 +++++++------
 17 files changed, 85 insertions(+), 60 deletions(-)

diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/AlterSchemaStatementSchemaRefresher.java b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/AlterSchemaStatementSchemaRefresher.java
index f59f4559951..fc8ffdc5dbe 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/AlterSchemaStatementSchemaRefresher.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/AlterSchemaStatementSchemaRefresher.java
@@ -29,6 +29,7 @@ import org.apache.shardingsphere.infra.metadata.schema.event.AlterSchemaEvent;
 import org.apache.shardingsphere.infra.rule.identifier.type.DataNodeContainedRule;
 import org.apache.shardingsphere.infra.rule.identifier.type.MutableDataNodeRule;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterSchemaStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
 import org.apache.shardingsphere.sql.parser.sql.dialect.handler.ddl.AlterSchemaStatementHandler;
 
 import java.sql.SQLException;
@@ -46,14 +47,14 @@ public final class AlterSchemaStatementSchemaRefresher implements MetaDataRefres
     @Override
     public void refresh(final ShardingSphereMetaData metaData, final FederationDatabaseMetaData database, final Map<String, OptimizerPlannerContext> optimizerPlanners,
                         final Collection<String> logicDataSourceNames, final String schemaName, final AlterSchemaStatement sqlStatement, final ConfigurationProperties props) throws SQLException {
-        Optional<String> renameSchemaName = AlterSchemaStatementHandler.getRenameSchema(sqlStatement);
+        Optional<IdentifierValue> renameSchemaName = AlterSchemaStatementHandler.getRenameSchema(sqlStatement);
         if (!renameSchemaName.isPresent()) {
             return;
         }
-        String actualSchemaName = sqlStatement.getSchemaName();
-        putSchemaMetaData(metaData, database, optimizerPlanners, actualSchemaName, renameSchemaName.get(), logicDataSourceNames);
+        String actualSchemaName = sqlStatement.getSchemaName().getValue();
+        putSchemaMetaData(metaData, database, optimizerPlanners, actualSchemaName, renameSchemaName.get().getValue(), logicDataSourceNames);
         removeSchemaMetaData(metaData, database, optimizerPlanners, actualSchemaName);
-        AlterSchemaEvent event = new AlterSchemaEvent(metaData.getDatabaseName(), actualSchemaName, renameSchemaName.get(), metaData.getSchemaByName(renameSchemaName.get()));
+        AlterSchemaEvent event = new AlterSchemaEvent(metaData.getDatabaseName(), actualSchemaName, renameSchemaName.get().getValue(), metaData.getSchemaByName(renameSchemaName.get().getValue()));
         ShardingSphereEventBus.getInstance().post(event);
     }
     
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateSchemaStatementSchemaRefresher.java b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateSchemaStatementSchemaRefresher.java
index eb395d58a12..22cff5b56df 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateSchemaStatementSchemaRefresher.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateSchemaStatementSchemaRefresher.java
@@ -28,6 +28,7 @@ import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema;
 import org.apache.shardingsphere.infra.metadata.schema.event.AddSchemaEvent;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateSchemaStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
 import org.apache.shardingsphere.sql.parser.sql.dialect.handler.ddl.CreateSchemaStatementHandler;
 
 import java.sql.SQLException;
@@ -46,14 +47,15 @@ public final class CreateSchemaStatementSchemaRefresher implements MetaDataRefre
     @Override
     public void refresh(final ShardingSphereMetaData metaData, final FederationDatabaseMetaData database, final Map<String, OptimizerPlannerContext> optimizerPlanners,
                         final Collection<String> logicDataSourceNames, final String schemaName, final CreateSchemaStatement sqlStatement, final ConfigurationProperties props) throws SQLException {
-        Optional<String> schema = sqlStatement.getSchemaName().isPresent() ? sqlStatement.getSchemaName() : CreateSchemaStatementHandler.getUsername(sqlStatement);
+        Optional<IdentifierValue> schema = sqlStatement.getSchemaName().isPresent() ? sqlStatement.getSchemaName() : CreateSchemaStatementHandler.getUsername(sqlStatement);
         if (!schema.isPresent()) {
             return;
         }
-        metaData.getSchemas().put(schema.get(), new ShardingSphereSchema());
-        database.putSchemaMetadata(schema.get(), new FederationSchemaMetaData(schema.get(), new LinkedHashMap<>()));
+        String actualSchemaName = schema.get().getValue();
+        metaData.getSchemas().put(actualSchemaName, new ShardingSphereSchema());
+        database.putSchemaMetadata(actualSchemaName, new FederationSchemaMetaData(actualSchemaName, new LinkedHashMap<>()));
         optimizerPlanners.put(database.getName(), OptimizerPlannerContextFactory.create(database));
-        AddSchemaEvent event = new AddSchemaEvent(metaData.getDatabaseName(), schema.get());
+        AddSchemaEvent event = new AddSchemaEvent(metaData.getDatabaseName(), actualSchemaName);
         ShardingSphereEventBus.getInstance().post(event);
     }
     
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/DropSchemaStatementSchemaRefresher.java b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/DropSchemaStatementSchemaRefresher.java
index 0decaad12c8..86c62c27a6d 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/DropSchemaStatementSchemaRefresher.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/DropSchemaStatementSchemaRefresher.java
@@ -28,10 +28,12 @@ import org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema;
 import org.apache.shardingsphere.infra.metadata.schema.event.DropSchemaEvent;
 import org.apache.shardingsphere.infra.rule.identifier.type.MutableDataNodeRule;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DropSchemaStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
 
 import java.sql.SQLException;
 import java.util.Collection;
 import java.util.LinkedHashSet;
+import java.util.LinkedList;
 import java.util.Map;
 
 /**
@@ -46,18 +48,27 @@ public final class DropSchemaStatementSchemaRefresher implements MetaDataRefresh
                         final Collection<String> logicDataSourceNames, final String schemaName, final DropSchemaStatement sqlStatement, final ConfigurationProperties props) throws SQLException {
         Collection<String> tobeRemovedTables = new LinkedHashSet<>();
         Collection<String> tobeRemovedSchemas = new LinkedHashSet<>();
-        sqlStatement.getSchemaNames().forEach(each -> {
+        Collection<String> schemaNames = getSchemaNames(sqlStatement);
+        for (String each : schemaNames) {
             ShardingSphereSchema schema = metaData.getSchemas().remove(each);
             tobeRemovedTables.addAll(schema.getAllTableNames());
             tobeRemovedSchemas.add(each.toLowerCase());
             database.removeSchemaMetadata(each);
-            optimizerPlanners.put(database.getName(), OptimizerPlannerContextFactory.create(database));
-        });
+            optimizerPlanners.put(database.getName(), OptimizerPlannerContextFactory.create(database));   
+        }
         Collection<MutableDataNodeRule> rules = metaData.getRuleMetaData().findRules(MutableDataNodeRule.class);
         for (String each : tobeRemovedTables) {
             removeDataNode(rules, each, tobeRemovedSchemas);
         }
-        ShardingSphereEventBus.getInstance().post(new DropSchemaEvent(metaData.getDatabaseName(), sqlStatement.getSchemaNames()));
+        ShardingSphereEventBus.getInstance().post(new DropSchemaEvent(metaData.getDatabaseName(), schemaNames));
+    }
+    
+    private Collection<String> getSchemaNames(final DropSchemaStatement sqlStatement) {
+        Collection<String> result = new LinkedList<>();
+        for (IdentifierValue each : sqlStatement.getSchemaNames()) {
+            result.add(each.getValue());
+        }
+        return result;
     }
     
     private void removeDataNode(final Collection<MutableDataNodeRule> rules, final String tobeRemovedTable, final Collection<String> schemaNames) {
diff --git a/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/java/org/apache/shardingsphere/singletable/route/validator/ddl/SingleTableDropSchemaMetadataValidator.java b/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/java/org/apache/shardingsphere/singletable/route/validator/ddl/SingleTableDropSchemaMetadataValidator.java
index abc647cba80..8cc6397809d 100644
--- a/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/java/org/apache/shardingsphere/singletable/route/validator/ddl/SingleTableDropSchemaMetadataValidator.java
+++ b/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/java/org/apache/shardingsphere/singletable/route/validator/ddl/SingleTableDropSchemaMetadataValidator.java
@@ -24,6 +24,7 @@ import org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema;
 import org.apache.shardingsphere.singletable.route.validator.SingleTableMetadataValidator;
 import org.apache.shardingsphere.singletable.rule.SingleTableRule;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DropSchemaStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
 import org.apache.shardingsphere.sql.parser.sql.dialect.handler.ddl.DropSchemaStatementHandler;
 
 /**
@@ -34,13 +35,14 @@ public final class SingleTableDropSchemaMetadataValidator implements SingleTable
     @Override
     public void validate(final SingleTableRule rule, final SQLStatementContext<DropSchemaStatement> sqlStatementContext, final ShardingSphereMetaData metaData) {
         boolean containsCascade = DropSchemaStatementHandler.isContainsCascade(sqlStatementContext.getSqlStatement());
-        for (String each : sqlStatementContext.getSqlStatement().getSchemaNames()) {
-            ShardingSphereSchema schema = metaData.getSchemaByName(each);
+        for (IdentifierValue each : sqlStatementContext.getSqlStatement().getSchemaNames()) {
+            String schemaName = each.getValue();
+            ShardingSphereSchema schema = metaData.getSchemaByName(schemaName);
             if (null == schema) {
-                throw new ShardingSphereException("Schema %s does not exist.", each);
+                throw new ShardingSphereException("Schema %s does not exist.", schemaName);
             }
             if (!containsCascade && !schema.getAllTableNames().isEmpty()) {
-                throw new ShardingSphereException("Can not drop schema %s because it contains tables.", each);
+                throw new ShardingSphereException("Can not drop schema %s because it contains tables.", schemaName);
             }
         }
     }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/impl/OpenGaussDDLStatementSQLVisitor.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/impl/OpenGaussDDLStatementSQLVisitor.java
index 85138331ccb..d8f1b50cc9b 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/impl/OpenGaussDDLStatementSQLVisitor.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/impl/OpenGaussDDLStatementSQLVisitor.java
@@ -695,11 +695,10 @@ public final class OpenGaussDDLStatementSQLVisitor extends OpenGaussStatementSQL
     public ASTNode visitCreateSchema(final CreateSchemaContext ctx) {
         OpenGaussCreateSchemaStatement result = new OpenGaussCreateSchemaStatement();
         if (null != ctx.createSchemaClauses().colId()) {
-            result.setSchemaName(ctx.createSchemaClauses().colId().getText());
+            result.setSchemaName(new IdentifierValue(ctx.createSchemaClauses().colId().getText()));
         }
         if (null != ctx.createSchemaClauses().roleSpec() && null != ctx.createSchemaClauses().roleSpec().identifier()) {
-            IdentifierValue username = (IdentifierValue) visit(ctx.createSchemaClauses().roleSpec().identifier());
-            result.setUsername(username.getValue());
+            result.setUsername((IdentifierValue) visit(ctx.createSchemaClauses().roleSpec().identifier()));
         }
         return result;
     }
@@ -707,9 +706,9 @@ public final class OpenGaussDDLStatementSQLVisitor extends OpenGaussStatementSQL
     @Override
     public ASTNode visitAlterSchema(final AlterSchemaContext ctx) {
         OpenGaussAlterSchemaStatement result = new OpenGaussAlterSchemaStatement();
-        result.setSchemaName(((IdentifierValue) visit(ctx.name().get(0))).getValue());
+        result.setSchemaName((IdentifierValue) visit(ctx.name().get(0)));
         if (ctx.name().size() > 1) {
-            result.setRenameSchema(((IdentifierValue) visit(ctx.name().get(1))).getValue());
+            result.setRenameSchema((IdentifierValue) visit(ctx.name().get(1)));
         }
         return result;
     }
@@ -718,7 +717,7 @@ public final class OpenGaussDDLStatementSQLVisitor extends OpenGaussStatementSQL
     @Override
     public ASTNode visitDropSchema(final DropSchemaContext ctx) {
         OpenGaussDropSchemaStatement result = new OpenGaussDropSchemaStatement();
-        result.getSchemaNames().addAll(((CollectionValue<String>) visit(ctx.nameList())).getValue());
+        result.getSchemaNames().addAll(((CollectionValue<IdentifierValue>) visit(ctx.nameList())).getValue());
         result.setContainsCascade(null != ctx.dropBehavior() && null != ctx.dropBehavior().CASCADE());
         return result;
     }
@@ -726,12 +725,12 @@ public final class OpenGaussDDLStatementSQLVisitor extends OpenGaussStatementSQL
     @SuppressWarnings("unchecked")
     @Override
     public ASTNode visitNameList(final NameListContext ctx) {
-        CollectionValue<String> result = new CollectionValue<>();
+        CollectionValue<IdentifierValue> result = new CollectionValue<>();
         if (null != ctx.nameList()) {
-            result.combine((CollectionValue<String>) visit(ctx.nameList()));
+            result.combine((CollectionValue<IdentifierValue>) visit(ctx.nameList()));
         }
         if (null != ctx.name()) {
-            result.getValue().add(((IdentifierValue) visit(ctx.name())).getValue());
+            result.getValue().add((IdentifierValue) visit(ctx.name()));
         }
         return result;
     }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/impl/PostgreSQLDDLStatementSQLVisitor.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/impl/PostgreSQLDDLStatementSQLVisitor.java
index 6ef50ea3984..6680a0b553f 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/impl/PostgreSQLDDLStatementSQLVisitor.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/impl/PostgreSQLDDLStatementSQLVisitor.java
@@ -807,11 +807,10 @@ public final class PostgreSQLDDLStatementSQLVisitor extends PostgreSQLStatementS
     public ASTNode visitCreateSchema(final CreateSchemaContext ctx) {
         PostgreSQLCreateSchemaStatement result = new PostgreSQLCreateSchemaStatement();
         if (null != ctx.createSchemaClauses().colId()) {
-            result.setSchemaName(ctx.createSchemaClauses().colId().getText());
+            result.setSchemaName(new IdentifierValue(ctx.createSchemaClauses().colId().getText()));
         }
         if (null != ctx.createSchemaClauses().roleSpec() && null != ctx.createSchemaClauses().roleSpec().identifier()) {
-            IdentifierValue username = (IdentifierValue) visit(ctx.createSchemaClauses().roleSpec().identifier());
-            result.setUsername(username.getValue());
+            result.setUsername((IdentifierValue) visit(ctx.createSchemaClauses().roleSpec().identifier()));
         }
         return result;
     }
@@ -819,9 +818,9 @@ public final class PostgreSQLDDLStatementSQLVisitor extends PostgreSQLStatementS
     @Override
     public ASTNode visitAlterSchema(final AlterSchemaContext ctx) {
         PostgreSQLAlterSchemaStatement result = new PostgreSQLAlterSchemaStatement();
-        result.setSchemaName(((IdentifierValue) visit(ctx.name().get(0))).getValue());
+        result.setSchemaName((IdentifierValue) visit(ctx.name().get(0)));
         if (ctx.name().size() > 1) {
-            result.setRenameSchema(((IdentifierValue) visit(ctx.name().get(1))).getValue());
+            result.setRenameSchema((IdentifierValue) visit(ctx.name().get(1)));
         }
         return result;
     }
@@ -830,7 +829,7 @@ public final class PostgreSQLDDLStatementSQLVisitor extends PostgreSQLStatementS
     @Override
     public ASTNode visitDropSchema(final DropSchemaContext ctx) {
         PostgreSQLDropSchemaStatement result = new PostgreSQLDropSchemaStatement();
-        result.getSchemaNames().addAll(((CollectionValue<String>) visit(ctx.nameList())).getValue());
+        result.getSchemaNames().addAll(((CollectionValue<IdentifierValue>) visit(ctx.nameList())).getValue());
         result.setContainsCascade(null != ctx.dropBehavior() && null != ctx.dropBehavior().CASCADE());
         return result;
     }
@@ -838,12 +837,12 @@ public final class PostgreSQLDDLStatementSQLVisitor extends PostgreSQLStatementS
     @SuppressWarnings("unchecked")
     @Override
     public ASTNode visitNameList(final NameListContext ctx) {
-        CollectionValue<String> result = new CollectionValue<>();
+        CollectionValue<IdentifierValue> result = new CollectionValue<>();
         if (null != ctx.nameList()) {
-            result.combine((CollectionValue<String>) visit(ctx.nameList()));
+            result.combine((CollectionValue<IdentifierValue>) visit(ctx.nameList()));
         }
         if (null != ctx.name()) {
-            result.getValue().add(((IdentifierValue) visit(ctx.name())).getValue());
+            result.getValue().add((IdentifierValue) visit(ctx.name()));
         }
         return result;
     }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/ddl/AlterSchemaStatement.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/ddl/AlterSchemaStatement.java
index 3fd51500f93..8963fb639d1 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/ddl/AlterSchemaStatement.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/ddl/AlterSchemaStatement.java
@@ -21,6 +21,7 @@ import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
 
 /**
  * Alter schema statement.
@@ -30,5 +31,5 @@ import org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStat
 @ToString
 public abstract class AlterSchemaStatement extends AbstractSQLStatement implements DDLStatement {
     
-    private String schemaName;
+    private IdentifierValue schemaName;
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/ddl/CreateSchemaStatement.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/ddl/CreateSchemaStatement.java
index 1f6b3fee6d7..a84d920a487 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/ddl/CreateSchemaStatement.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/ddl/CreateSchemaStatement.java
@@ -21,6 +21,7 @@ import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
 
 import java.util.Optional;
 
@@ -32,14 +33,14 @@ import java.util.Optional;
 @ToString
 public abstract class CreateSchemaStatement extends AbstractSQLStatement implements DDLStatement {
     
-    private String schemaName;
+    private IdentifierValue schemaName;
     
     /**
      * Get schema name.
      * 
      * @return schema name
      */
-    public Optional<String> getSchemaName() {
+    public Optional<IdentifierValue> getSchemaName() {
         return Optional.ofNullable(schemaName);
     }
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/ddl/DropSchemaStatement.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/ddl/DropSchemaStatement.java
index ee78cbdce4f..6517e2e627d 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/ddl/DropSchemaStatement.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/ddl/DropSchemaStatement.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.sql.parser.sql.common.statement.ddl;
 import lombok.Getter;
 import lombok.ToString;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
 
 import java.util.Collection;
 import java.util.LinkedList;
@@ -31,5 +32,5 @@ import java.util.LinkedList;
 @ToString
 public abstract class DropSchemaStatement extends AbstractSQLStatement implements DDLStatement {
     
-    private final Collection<String> schemaNames = new LinkedList<>();
+    private final Collection<IdentifierValue> schemaNames = new LinkedList<>();
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/ddl/AlterSchemaStatementHandler.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/ddl/AlterSchemaStatementHandler.java
index 6b199fa3592..f63933a4258 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/ddl/AlterSchemaStatementHandler.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/ddl/AlterSchemaStatementHandler.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.sql.parser.sql.dialect.handler.ddl;
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterSchemaStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
 import org.apache.shardingsphere.sql.parser.sql.dialect.handler.SQLStatementHandler;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.opengauss.OpenGaussStatement;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.opengauss.ddl.OpenGaussAlterSchemaStatement;
@@ -40,7 +41,7 @@ public final class AlterSchemaStatementHandler implements SQLStatementHandler {
      * @param alterSchemaStatement alter schema statement
      * @return rename schema
      */
-    public static Optional<String> getRenameSchema(final AlterSchemaStatement alterSchemaStatement) {
+    public static Optional<IdentifierValue> getRenameSchema(final AlterSchemaStatement alterSchemaStatement) {
         if (alterSchemaStatement instanceof PostgreSQLStatement) {
             return ((PostgreSQLAlterSchemaStatement) alterSchemaStatement).getRenameSchema();
         }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/ddl/CreateSchemaStatementHandler.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/ddl/CreateSchemaStatementHandler.java
index aa50ead35d8..c33f09cd85f 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/ddl/CreateSchemaStatementHandler.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/ddl/CreateSchemaStatementHandler.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.sql.parser.sql.dialect.handler.ddl;
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateSchemaStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
 import org.apache.shardingsphere.sql.parser.sql.dialect.handler.SQLStatementHandler;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.opengauss.OpenGaussStatement;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.opengauss.ddl.OpenGaussCreateSchemaStatement;
@@ -40,7 +41,7 @@ public final class CreateSchemaStatementHandler implements SQLStatementHandler {
      * @param createSchemaStatement create schema statement
      * @return username
      */
-    public static Optional<String> getUsername(final CreateSchemaStatement createSchemaStatement) {
+    public static Optional<IdentifierValue> getUsername(final CreateSchemaStatement createSchemaStatement) {
         if (createSchemaStatement instanceof PostgreSQLStatement) {
             return ((PostgreSQLCreateSchemaStatement) createSchemaStatement).getUsername();
         }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/opengauss/ddl/OpenGaussAlterSchemaStatement.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/opengauss/ddl/OpenGaussAlterSchemaStatement.java
index ebcea1830f4..2d2aaa18d36 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/opengauss/ddl/OpenGaussAlterSchemaStatement.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/opengauss/ddl/OpenGaussAlterSchemaStatement.java
@@ -21,6 +21,7 @@ import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterSchemaStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.opengauss.OpenGaussStatement;
 
 import java.util.Optional;
@@ -33,14 +34,14 @@ import java.util.Optional;
 @ToString
 public final class OpenGaussAlterSchemaStatement extends AlterSchemaStatement implements OpenGaussStatement {
     
-    private String renameSchema;
+    private IdentifierValue renameSchema;
     
     /**
      * Get rename schema.
      * 
      * @return rename schema
      */
-    public Optional<String> getRenameSchema() {
+    public Optional<IdentifierValue> getRenameSchema() {
         return Optional.ofNullable(renameSchema);
     }
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/opengauss/ddl/OpenGaussCreateSchemaStatement.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/opengauss/ddl/OpenGaussCreateSchemaStatement.java
index 89ec9c9f1c0..b9eb0274ccf 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/opengauss/ddl/OpenGaussCreateSchemaStatement.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/opengauss/ddl/OpenGaussCreateSchemaStatement.java
@@ -21,6 +21,7 @@ import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateSchemaStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.opengauss.OpenGaussStatement;
 
 import java.util.Optional;
@@ -33,14 +34,14 @@ import java.util.Optional;
 @ToString
 public final class OpenGaussCreateSchemaStatement extends CreateSchemaStatement implements OpenGaussStatement {
     
-    private String username;
+    private IdentifierValue username;
     
     /**
      * Get username.
      *
      * @return username
      */
-    public Optional<String> getUsername() {
+    public Optional<IdentifierValue> getUsername() {
         return Optional.ofNullable(username);
     }
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/postgresql/ddl/PostgreSQLAlterSchemaStatement.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/postgresql/ddl/PostgreSQLAlterSchemaStatement.java
index 4a3ba028a55..f7f5380ffba 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/postgresql/ddl/PostgreSQLAlterSchemaStatement.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/postgresql/ddl/PostgreSQLAlterSchemaStatement.java
@@ -21,6 +21,7 @@ import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterSchemaStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.postgresql.PostgreSQLStatement;
 
 import java.util.Optional;
@@ -33,14 +34,14 @@ import java.util.Optional;
 @ToString
 public final class PostgreSQLAlterSchemaStatement extends AlterSchemaStatement implements PostgreSQLStatement {
     
-    private String renameSchema;
+    private IdentifierValue renameSchema;
     
     /**
      * Get rename schema.
      *
      * @return rename schema
      */
-    public Optional<String> getRenameSchema() {
+    public Optional<IdentifierValue> getRenameSchema() {
         return Optional.ofNullable(renameSchema);
     }
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/postgresql/ddl/PostgreSQLCreateSchemaStatement.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/postgresql/ddl/PostgreSQLCreateSchemaStatement.java
index f1f91c1472d..49e41a6ef1b 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/postgresql/ddl/PostgreSQLCreateSchemaStatement.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/postgresql/ddl/PostgreSQLCreateSchemaStatement.java
@@ -21,6 +21,7 @@ import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateSchemaStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.postgresql.PostgreSQLStatement;
 
 import java.util.Optional;
@@ -33,14 +34,14 @@ import java.util.Optional;
 @ToString
 public final class PostgreSQLCreateSchemaStatement extends CreateSchemaStatement implements PostgreSQLStatement {
     
-    private String username;
+    private IdentifierValue username;
     
     /**
      * Get username.
      *
      * @return username
      */
-    public Optional<String> getUsername() {
+    public Optional<IdentifierValue> getUsername() {
         return Optional.ofNullable(username);
     }
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/test/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/ddl/AlterSchemaStatementHandlerTest.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/test/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/ddl/AlterSchemaStatementHandlerTest.java
index 6bed96030b8..f9c4b52e99d 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/test/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/ddl/AlterSchemaStatementHandlerTest.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/test/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/ddl/AlterSchemaStatementHandlerTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.sql.parser.sql.dialect.handler.ddl;
 
+import org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.opengauss.ddl.OpenGaussAlterSchemaStatement;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.postgresql.ddl.PostgreSQLAlterSchemaStatement;
 import org.junit.Test;
@@ -32,18 +33,18 @@ public final class AlterSchemaStatementHandlerTest {
     @Test
     public void assertGetUsernameForPostgreSQL() {
         PostgreSQLAlterSchemaStatement alterSchemaStatement = new PostgreSQLAlterSchemaStatement();
-        alterSchemaStatement.setRenameSchema("new_schema");
-        Optional<String> actual = AlterSchemaStatementHandler.getRenameSchema(alterSchemaStatement);
+        alterSchemaStatement.setRenameSchema(new IdentifierValue("new_schema"));
+        Optional<IdentifierValue> actual = AlterSchemaStatementHandler.getRenameSchema(alterSchemaStatement);
         assertTrue(actual.isPresent());
-        assertThat(actual.get(), is("new_schema"));
+        assertThat(actual.get().getValue(), is("new_schema"));
     }
     
     @Test
     public void assertGetUsernameForOpenGauss() {
         OpenGaussAlterSchemaStatement alterSchemaStatement = new OpenGaussAlterSchemaStatement();
-        alterSchemaStatement.setRenameSchema("new_schema");
-        Optional<String> actual = AlterSchemaStatementHandler.getRenameSchema(alterSchemaStatement);
+        alterSchemaStatement.setRenameSchema(new IdentifierValue("new_schema"));
+        Optional<IdentifierValue> actual = AlterSchemaStatementHandler.getRenameSchema(alterSchemaStatement);
         assertTrue(actual.isPresent());
-        assertThat(actual.get(), is("new_schema"));
+        assertThat(actual.get().getValue(), is("new_schema"));
     }
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/test/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/ddl/CreateSchemaStatementHandlerTest.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/test/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/ddl/CreateSchemaStatementHandlerTest.java
index 6707fe248c4..b5161fbfd1b 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/test/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/ddl/CreateSchemaStatementHandlerTest.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/test/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/ddl/CreateSchemaStatementHandlerTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.sql.parser.sql.dialect.handler.ddl;
 
+import org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.opengauss.ddl.OpenGaussCreateSchemaStatement;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.postgresql.ddl.PostgreSQLCreateSchemaStatement;
 import org.junit.Test;
@@ -32,18 +33,18 @@ public final class CreateSchemaStatementHandlerTest {
     @Test
     public void assertGetUsernameForPostgreSQL() {
         PostgreSQLCreateSchemaStatement createSchemaStatement = new PostgreSQLCreateSchemaStatement();
-        createSchemaStatement.setUsername("root");
-        Optional<String> actual = CreateSchemaStatementHandler.getUsername(createSchemaStatement);
+        createSchemaStatement.setUsername(new IdentifierValue("root"));
+        Optional<IdentifierValue> actual = CreateSchemaStatementHandler.getUsername(createSchemaStatement);
         assertTrue(actual.isPresent());
-        assertThat(actual.get(), is("root"));
+        assertThat(actual.get().getValue(), is("root"));
     }
     
     @Test
     public void assertGetUsernameForOpenGauss() {
         OpenGaussCreateSchemaStatement createSchemaStatement = new OpenGaussCreateSchemaStatement();
-        createSchemaStatement.setUsername("root");
-        Optional<String> actual = CreateSchemaStatementHandler.getUsername(createSchemaStatement);
+        createSchemaStatement.setUsername(new IdentifierValue("root"));
+        Optional<IdentifierValue> actual = CreateSchemaStatementHandler.getUsername(createSchemaStatement);
         assertTrue(actual.isPresent());
-        assertThat(actual.get(), is("root"));
+        assertThat(actual.get().getValue(), is("root"));
     }
 }