You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by pa...@apache.org on 2022/09/29 02:51:55 UTC

[shardingsphere] branch master updated: Optimize alter view/drop view parse logic and fix alter view refresher bug (#21255)

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

panjuan 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 b1fa82f3692 Optimize alter view/drop view parse logic and fix alter view refresher bug (#21255)
b1fa82f3692 is described below

commit b1fa82f3692178b9032190a5a2ba01c6c063d6f4
Author: Zhengqiang Duan <du...@apache.org>
AuthorDate: Thu Sep 29 10:51:46 2022 +0800

    Optimize alter view/drop view parse logic and fix alter view refresher bug (#21255)
    
    * Optimize alter view/drop view parse logic and fix alter view refresher bug
    
    * fix unit test
    
    Co-authored-by: shardingsphere <de...@shardingsphere.apache.org>
---
 .../ddl/AlterViewStatementContextTest.java         |  2 +-
 .../type/AlterViewStatementSchemaRefresher.java    |  7 +--
 .../impl/MySQLDDLStatementSQLVisitor.java          |  2 +-
 .../impl/OpenGaussDDLStatementSQLVisitor.java      |  1 -
 .../impl/OracleDDLStatementSQLVisitor.java         | 22 +++++----
 .../impl/PostgreSQLDDLStatementSQLVisitor.java     |  1 -
 .../sql/parser/autogen/SQLServerStatement.g4       |  1 +
 .../impl/SQLServerDDLStatementSQLVisitor.java      | 13 ++++-
 .../common/statement/ddl/AlterViewStatement.java   |  2 -
 .../handler/ddl/AlterViewStatementHandler.java     | 23 ++++++++-
 .../mysql/ddl/MySQLAlterViewStatement.java         | 11 +----
 .../sqlserver/ddl/SQLServerAlterViewStatement.java |  9 ++++
 .../handler/ddl/AlterViewStatementHandlerTest.java | 13 ++---
 .../asserts/statement/ddl/DDLStatementAssert.java  | 10 ++++
 ...ntAssert.java => AlterViewStatementAssert.java} | 39 +++++++--------
 .../ddl/impl/CreateViewStatementAssert.java        |  6 +--
 .../ddl/impl/DropViewStatementAssert.java          | 47 ++++++++++++++++++
 .../statement/ddl/AlterViewStatementTestCase.java  | 21 ++++++++
 .../statement/ddl/DropViewStatementTestCase.java   | 12 +++++
 .../src/main/resources/case/ddl/alter-view.xml     | 57 ++++++++++++++++++----
 .../src/main/resources/case/ddl/drop-view.xml      | 24 +++++++--
 .../resources/sql/supported/ddl/alter-view.xml     |  1 +
 22 files changed, 250 insertions(+), 74 deletions(-)

diff --git a/shardingsphere-infra/shardingsphere-infra-binder/src/test/java/org/apache/shardingsphere/infra/binder/statement/ddl/AlterViewStatementContextTest.java b/shardingsphere-infra/shardingsphere-infra-binder/src/test/java/org/apache/shardingsphere/infra/binder/statement/ddl/AlterViewStatementContextTest.java
index 2160360c366..50294b58b3f 100644
--- a/shardingsphere-infra/shardingsphere-infra-binder/src/test/java/org/apache/shardingsphere/infra/binder/statement/ddl/AlterViewStatementContextTest.java
+++ b/shardingsphere-infra/shardingsphere-infra-binder/src/test/java/org/apache/shardingsphere/infra/binder/statement/ddl/AlterViewStatementContextTest.java
@@ -52,7 +52,7 @@ public final class AlterViewStatementContextTest {
         when(select.getFrom()).thenReturn(view);
         MySQLAlterViewStatement mySQLAlterViewStatement = mock(MySQLAlterViewStatement.class);
         when(mySQLAlterViewStatement.getView()).thenReturn(view);
-        when(mySQLAlterViewStatement.getSelect()).thenReturn(Optional.of(select));
+        when(mySQLAlterViewStatement.getSelect()).thenReturn(select);
         assertNewInstance(mySQLAlterViewStatement);
     }
     
diff --git a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/AlterViewStatementSchemaRefresher.java b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/AlterViewStatementSchemaRefresher.java
index fc0e3f1ebb9..6cde19e3f44 100644
--- a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/AlterViewStatementSchemaRefresher.java
+++ b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/AlterViewStatementSchemaRefresher.java
@@ -48,7 +48,6 @@ public final class AlterViewStatementSchemaRefresher implements MetaDataRefreshe
     public Optional<MetaDataRefreshedEvent> refresh(final ShardingSphereDatabase database, final Collection<String> logicDataSourceNames,
                                                     final String schemaName, final AlterViewStatement sqlStatement, final ConfigurationProperties props) throws SQLException {
         String viewName = sqlStatement.getView().getTableName().getIdentifier().getValue();
-        String viewDefinition = sqlStatement.getViewSQL().substring(sqlStatement.getViewSQL().substring(0, sqlStatement.getViewSQL().indexOf(" as ")).length() + 4).trim();
         SchemaAlteredEvent event = new SchemaAlteredEvent(database.getName(), schemaName);
         Optional<SimpleTableSegment> renameView = AlterViewStatementHandler.getRenameView(sqlStatement);
         if (renameView.isPresent()) {
@@ -60,8 +59,10 @@ public final class AlterViewStatementSchemaRefresher implements MetaDataRefreshe
             event.getAlteredViews().add(database.getSchema(schemaName).getView(renameViewName));
             event.getDroppedTables().add(viewName);
             event.getDroppedViews().add(viewName);
-        } else {
-            putTableMetaData(database, logicDataSourceNames, schemaName, viewName, viewDefinition, props);
+        }
+        Optional<String> viewDefinition = AlterViewStatementHandler.getViewDefinition(sqlStatement);
+        if (viewDefinition.isPresent()) {
+            putTableMetaData(database, logicDataSourceNames, schemaName, viewName, viewDefinition.get(), props);
             event.getAlteredTables().add(database.getSchema(schemaName).getTable(viewName));
             event.getAlteredViews().add(database.getSchema(schemaName).getView(viewName));
         }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLDDLStatementSQLVisitor.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLDDLStatementSQLVisitor.java
index 2efc59139b7..89dfe26fe7c 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLDDLStatementSQLVisitor.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLDDLStatementSQLVisitor.java
@@ -199,7 +199,7 @@ public final class MySQLDDLStatementSQLVisitor extends MySQLStatementSQLVisitor
     public ASTNode visitAlterView(final AlterViewContext ctx) {
         MySQLAlterViewStatement result = new MySQLAlterViewStatement();
         result.setView((SimpleTableSegment) visit(ctx.viewName()));
-        result.setViewSQL(getOriginalText(ctx));
+        result.setViewDefinition(getOriginalText(ctx.select()));
         result.setSelect((MySQLSelectStatement) visit(ctx.select()));
         return result;
     }
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 69467491b40..e95c7729c85 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
@@ -632,7 +632,6 @@ public final class OpenGaussDDLStatementSQLVisitor extends OpenGaussStatementSQL
     @Override
     public ASTNode visitAlterView(final AlterViewContext ctx) {
         OpenGaussAlterViewStatement result = new OpenGaussAlterViewStatement();
-        result.setViewSQL(getOriginalText(ctx));
         result.setView((SimpleTableSegment) visit(ctx.qualifiedName()));
         if (ctx.alterViewClauses() instanceof AlterRenameViewContext) {
             NameContext nameContext = ((AlterRenameViewContext) ctx.alterViewClauses()).name();
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/impl/OracleDDLStatementSQLVisitor.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/impl/OracleDDLStatementSQLVisitor.java
index 1823c2c591b..60f50c8cb71 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/impl/OracleDDLStatementSQLVisitor.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/impl/OracleDDLStatementSQLVisitor.java
@@ -33,21 +33,21 @@ import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.AlterD
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.AlterDefinitionClauseContext;
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.AlterDimensionContext;
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.AlterDiskgroupContext;
-import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.AlterHierarchyContext;
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.AlterFlashbackArchiveContext;
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.AlterFunctionContext;
+import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.AlterHierarchyContext;
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.AlterIndexContext;
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.AlterIndexTypeContext;
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.AlterInmemoryJoinGroupContext;
-import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.AlterLibraryContext;
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.AlterJavaContext;
+import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.AlterLibraryContext;
+import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.AlterLockdownProfileContext;
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.AlterMaterializedViewContext;
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.AlterMaterializedViewLogContext;
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.AlterMaterializedZonemapContext;
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.AlterOperatorContext;
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.AlterOutlineContext;
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.AlterPackageContext;
-import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.AlterLockdownProfileContext;
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.AlterPluggableDatabaseContext;
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.AlterProcedureContext;
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.AlterSequenceContext;
@@ -98,13 +98,13 @@ import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.DropEd
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.DropFlashbackArchiveContext;
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.DropIndexContext;
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.DropIndexTypeContext;
-import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.DropMaterializedViewContext;
-import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.DropMaterializedViewLogContext;
-import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.DropMaterializedZonemapContext;
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.DropInmemoryJoinGroupContext;
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.DropJavaContext;
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.DropLibraryContext;
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.DropLockdownProfileContext;
+import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.DropMaterializedViewContext;
+import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.DropMaterializedViewLogContext;
+import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.DropMaterializedZonemapContext;
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.DropOperatorContext;
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.DropOutlineContext;
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.DropPackageContext;
@@ -175,9 +175,9 @@ import org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.Ora
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleAlterInmemoryJoinGroupStatement;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleAlterJavaStatement;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleAlterLibraryStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleAlterLockdownProfileStatement;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleAlterMaterializedViewLogStatement;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleAlterMaterializedViewStatement;
-import org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleAlterLockdownProfileStatement;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleAlterMaterializedZonemapStatement;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleAlterOperatorStatement;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleAlterOutlineStatement;
@@ -505,7 +505,9 @@ public final class OracleDDLStatementSQLVisitor extends OracleStatementSQLVisito
     
     @Override
     public ASTNode visitAlterView(final AlterViewContext ctx) {
-        return new OracleAlterViewStatement();
+        OracleAlterViewStatement result = new OracleAlterViewStatement();
+        result.setView((SimpleTableSegment) visit(ctx.viewName()));
+        return result;
     }
     
     @Override
@@ -535,7 +537,9 @@ public final class OracleDDLStatementSQLVisitor extends OracleStatementSQLVisito
     
     @Override
     public ASTNode visitDropView(final DropViewContext ctx) {
-        return new OracleDropViewStatement();
+        OracleDropViewStatement result = new OracleDropViewStatement();
+        result.getViews().add((SimpleTableSegment) visit(ctx.viewName()));
+        return result;
     }
     
     @Override
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 a510cc99b08..71a74ff55a5 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
@@ -783,7 +783,6 @@ public final class PostgreSQLDDLStatementSQLVisitor extends PostgreSQLStatementS
     public ASTNode visitAlterView(final AlterViewContext ctx) {
         PostgreSQLAlterViewStatement result = new PostgreSQLAlterViewStatement();
         result.setView((SimpleTableSegment) visit(ctx.qualifiedName()));
-        result.setViewSQL(getOriginalText(ctx));
         if (ctx.alterViewClauses() instanceof AlterRenameViewContext) {
             NameContext nameContext = ((AlterRenameViewContext) ctx.alterViewClauses()).name();
             result.setRenameView(new SimpleTableSegment(new TableNameSegment(nameContext.getStart().getStartIndex(),
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/SQLServerStatement.g4 b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/SQLServerStatement.g4
index 7bbc61df5fb..2147c65ff16 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/SQLServerStatement.g4
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/SQLServerStatement.g4
@@ -41,6 +41,7 @@ execute
     | alterDatabase
     | alterService
     | alterSchema
+    | alterView
     | dropTable
     | dropDatabase
     | dropFunction
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/impl/SQLServerDDLStatementSQLVisitor.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/impl/SQLServerDDLStatementSQLVisitor.java
index 4650e2444e1..176a7528c66 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/impl/SQLServerDDLStatementSQLVisitor.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/impl/SQLServerDDLStatementSQLVisitor.java
@@ -70,6 +70,7 @@ import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.Dro
 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.ModifyColumnSpecificationContext;
 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.TableConstraintContext;
 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.TruncateTableContext;
+import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.ViewNameContext;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.AlterDefinitionSegment;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.CreateDefinitionSegment;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.column.ColumnDefinitionSegment;
@@ -465,7 +466,11 @@ public final class SQLServerDDLStatementSQLVisitor extends SQLServerStatementSQL
     
     @Override
     public ASTNode visitAlterView(final AlterViewContext ctx) {
-        return new SQLServerAlterViewStatement();
+        SQLServerAlterViewStatement result = new SQLServerAlterViewStatement();
+        result.setView((SimpleTableSegment) visit(ctx.viewName()));
+        result.setViewDefinition(getOriginalText(ctx.createOrAlterViewClause().select()));
+        result.setSelect((SQLServerSelectStatement) visit(ctx.createOrAlterViewClause().select()));
+        return result;
     }
     
     @Override
@@ -490,7 +495,11 @@ public final class SQLServerDDLStatementSQLVisitor extends SQLServerStatementSQL
     
     @Override
     public ASTNode visitDropView(final DropViewContext ctx) {
-        return new SQLServerDropViewStatement();
+        SQLServerDropViewStatement result = new SQLServerDropViewStatement();
+        for (ViewNameContext each : ctx.viewName()) {
+            result.getViews().add((SimpleTableSegment) visit(each));
+        }
+        return result;
     }
     
     @Override
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/ddl/AlterViewStatement.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/ddl/AlterViewStatement.java
index 4d33c2373af..b8cf744077e 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/ddl/AlterViewStatement.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/ddl/AlterViewStatement.java
@@ -32,6 +32,4 @@ import org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStat
 public abstract class AlterViewStatement extends AbstractSQLStatement implements DDLStatement {
     
     private SimpleTableSegment view;
-    
-    private String viewSQL;
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/ddl/AlterViewStatementHandler.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/ddl/AlterViewStatementHandler.java
index fba1240fdc0..9fa9ffdcccb 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/ddl/AlterViewStatementHandler.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/ddl/AlterViewStatementHandler.java
@@ -29,6 +29,8 @@ import org.apache.shardingsphere.sql.parser.sql.dialect.statement.opengauss.Open
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.opengauss.ddl.OpenGaussAlterViewStatement;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.postgresql.PostgreSQLStatement;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.postgresql.ddl.PostgreSQLAlterViewStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.SQLServerStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.ddl.SQLServerAlterViewStatement;
 
 import java.util.Optional;
 
@@ -46,7 +48,26 @@ public final class AlterViewStatementHandler implements SQLStatementHandler {
      */
     public static Optional<SelectStatement> getSelectStatement(final AlterViewStatement alterViewStatement) {
         if (alterViewStatement instanceof MySQLStatement) {
-            return ((MySQLAlterViewStatement) alterViewStatement).getSelect();
+            return Optional.of(((MySQLAlterViewStatement) alterViewStatement).getSelect());
+        }
+        if (alterViewStatement instanceof SQLServerStatement) {
+            return Optional.of(((SQLServerAlterViewStatement) alterViewStatement).getSelect());
+        }
+        return Optional.empty();
+    }
+    
+    /**
+     * Get view definition.
+     *
+     * @param alterViewStatement AlterViewStatement
+     * @return view definition
+     */
+    public static Optional<String> getViewDefinition(final AlterViewStatement alterViewStatement) {
+        if (alterViewStatement instanceof MySQLStatement) {
+            return Optional.of(((MySQLAlterViewStatement) alterViewStatement).getViewDefinition());
+        }
+        if (alterViewStatement instanceof SQLServerStatement) {
+            return Optional.of(((SQLServerAlterViewStatement) alterViewStatement).getViewDefinition());
         }
         return Optional.empty();
     }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/ddl/MySQLAlterViewStatement.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/ddl/MySQLAlterViewStatement.java
index c374e22d463..2a49db51c4c 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/ddl/MySQLAlterViewStatement.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/ddl/MySQLAlterViewStatement.java
@@ -24,8 +24,6 @@ import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterViewSt
 import org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.MySQLStatement;
 
-import java.util.Optional;
-
 /**
  * MySQL alter view statement.
  */
@@ -36,12 +34,5 @@ public final class MySQLAlterViewStatement extends AlterViewStatement implements
     
     private SelectStatement select;
     
-    /**
-     * Get select statement.
-     *
-     * @return select statement
-     */
-    public Optional<SelectStatement> getSelect() {
-        return Optional.ofNullable(select);
-    }
+    private String viewDefinition;
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/sqlserver/ddl/SQLServerAlterViewStatement.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/sqlserver/ddl/SQLServerAlterViewStatement.java
index 1652a9c8e70..387d7989cce 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/sqlserver/ddl/SQLServerAlterViewStatement.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/sqlserver/ddl/SQLServerAlterViewStatement.java
@@ -17,13 +17,22 @@
 
 package org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.ddl;
 
+import lombok.Getter;
+import lombok.Setter;
 import lombok.ToString;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterViewStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.SQLServerStatement;
 
 /**
  * SQLServer alter view statement.
  */
+@Getter
+@Setter
 @ToString(callSuper = true)
 public final class SQLServerAlterViewStatement extends AlterViewStatement implements SQLServerStatement {
+    
+    private SelectStatement select;
+    
+    private String viewDefinition;
 }
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/test/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/ddl/AlterViewStatementHandlerTest.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/test/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/ddl/AlterViewStatementHandlerTest.java
index 82dea074bbb..8aa9b674c30 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/test/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/ddl/AlterViewStatementHandlerTest.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/test/java/org/apache/shardingsphere/sql/parser/sql/dialect/handler/ddl/AlterViewStatementHandlerTest.java
@@ -27,12 +27,14 @@ import org.apache.shardingsphere.sql.parser.sql.dialect.statement.opengauss.ddl.
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleAlterViewStatement;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.postgresql.ddl.PostgreSQLAlterViewStatement;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.ddl.SQLServerAlterViewStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.dml.SQLServerSelectStatement;
 import org.junit.Test;
 
 import java.util.Optional;
 
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
 
 public final class AlterViewStatementHandlerTest {
     
@@ -44,13 +46,6 @@ public final class AlterViewStatementHandlerTest {
         assertTrue(selectStatement.isPresent());
     }
     
-    @Test
-    public void assertGetSelectStatementWithoutSelectStatementForMySQL() {
-        MySQLAlterViewStatement alterViewStatement = new MySQLAlterViewStatement();
-        Optional<SelectStatement> selectStatement = AlterViewStatementHandler.getSelectStatement(alterViewStatement);
-        assertFalse(selectStatement.isPresent());
-    }
-    
     @Test
     public void assertGetRenameViewWithRenameViewSegmentForPostgreSQL() {
         PostgreSQLAlterViewStatement alterViewStatement = new PostgreSQLAlterViewStatement();
@@ -90,7 +85,9 @@ public final class AlterViewStatementHandlerTest {
         assertFalse(AlterViewStatementHandler.getSelectStatement(new OpenGaussAlterViewStatement()).isPresent());
         assertFalse(AlterViewStatementHandler.getSelectStatement(new OracleAlterViewStatement()).isPresent());
         assertFalse(AlterViewStatementHandler.getSelectStatement(new PostgreSQLAlterViewStatement()).isPresent());
-        assertFalse(AlterViewStatementHandler.getSelectStatement(new SQLServerAlterViewStatement()).isPresent());
+        SQLServerAlterViewStatement alterViewStatement = new SQLServerAlterViewStatement();
+        alterViewStatement.setSelect(mock(SQLServerSelectStatement.class));
+        assertTrue(AlterViewStatementHandler.getSelectStatement(alterViewStatement).isPresent());
     }
     
     @Test
diff --git a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/ddl/DDLStatementAssert.java b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/ddl/DDLStatementAssert.java
index 34ef1cee8f0..3d977b2ddc6 100644
--- a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/ddl/DDLStatementAssert.java
+++ b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/ddl/DDLStatementAssert.java
@@ -22,6 +22,7 @@ import lombok.NoArgsConstructor;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterIndexStatement;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterSystemStatement;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterTableStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterViewStatement;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CloseStatement;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.ClusterStatement;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CommentStatement;
@@ -32,6 +33,7 @@ import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DDLStatemen
 import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DeclareStatement;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DropIndexStatement;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DropTableStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DropViewStatement;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.FetchStatement;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.ListenStatement;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.MoveStatement;
@@ -56,6 +58,7 @@ import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.ddl.impl.AlterSynonymStatementAssert;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.ddl.impl.AlterSystemStatementAssert;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.ddl.impl.AlterTableStatementAssert;
+import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.ddl.impl.AlterViewStatementAssert;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.ddl.impl.AnalyzeStatementAssert;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.ddl.impl.AssociateStatisticsStatementAssert;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.ddl.impl.AuditStatementAssert;
@@ -70,6 +73,7 @@ import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.ddl.impl.DisassociateStatisticsStatementAssert;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.ddl.impl.DropIndexStatementAssert;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.ddl.impl.DropTableStatementAssert;
+import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.ddl.impl.DropViewStatementAssert;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.ddl.impl.FetchStatementAssert;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.ddl.impl.ListenStatementAssert;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.ddl.impl.MoveStatementAssert;
@@ -87,6 +91,7 @@ import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.ddl.AlterSynonymStatementTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.ddl.AlterSystemStatementTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.ddl.AlterTableStatementTestCase;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.ddl.AlterViewStatementTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.ddl.AnalyzeStatementTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.ddl.AssociateStatisticsStatementTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.ddl.AuditStatementTestCase;
@@ -101,6 +106,7 @@ import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.ddl.DisassociateStatisticsStatementTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.ddl.DropIndexStatementTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.ddl.DropTableStatementTestCase;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.ddl.DropViewStatementTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.ddl.FetchStatementTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.ddl.ListenStatementTestCase;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.ddl.MoveStatementTestCase;
@@ -187,6 +193,10 @@ public final class DDLStatementAssert {
             SecurityLabelStmtStatementAssert.assertIs(assertContext, (SecurityLabelStmtStatement) actual, (SecurityLabelStmtStatementTestCase) expected);
         } else if (actual instanceof CreateViewStatement) {
             CreateViewStatementAssert.assertIs(assertContext, (CreateViewStatement) actual, (CreateViewStatementTestCase) expected);
+        } else if (actual instanceof AlterViewStatement) {
+            AlterViewStatementAssert.assertIs(assertContext, (AlterViewStatement) actual, (AlterViewStatementTestCase) expected);
+        } else if (actual instanceof DropViewStatement) {
+            DropViewStatementAssert.assertIs(assertContext, (DropViewStatement) actual, (DropViewStatementTestCase) expected);
         }
     }
 }
diff --git a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/ddl/impl/CreateViewStatementAssert.java b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/ddl/impl/AlterViewStatementAssert.java
similarity index 61%
copy from shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/ddl/impl/CreateViewStatementAssert.java
copy to shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/ddl/impl/AlterViewStatementAssert.java
index c5b3ec21477..2733b5b2d8f 100644
--- a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/ddl/impl/CreateViewStatementAssert.java
+++ b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/ddl/impl/AlterViewStatementAssert.java
@@ -19,56 +19,57 @@ package org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statemen
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateViewStatement;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterViewStatement;
+import org.apache.shardingsphere.sql.parser.sql.dialect.handler.ddl.AlterViewStatementHandler;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.SQLCaseAssertContext;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.table.TableAssert;
 import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.dml.impl.SelectStatementAssert;
-import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.ddl.CreateViewStatementTestCase;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.ddl.AlterViewStatementTestCase;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
 
 /**
- * Create view statement assert.
+ * Alter view statement assert.
  */
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class CreateViewStatementAssert {
+public final class AlterViewStatementAssert {
     
     /**
-     * Assert create table statement is correct with expected parser result.
+     * Assert alter view statement is correct with expected parser result.
      * 
      * @param assertContext assert context
-     * @param actual actual create table statement
-     * @param expected expected create table statement test case
+     * @param actual actual alter view statement
+     * @param expected expected alter view statement test case
      */
-    public static void assertIs(final SQLCaseAssertContext assertContext, final CreateViewStatement actual, final CreateViewStatementTestCase expected) {
+    public static void assertIs(final SQLCaseAssertContext assertContext, final AlterViewStatement actual, final AlterViewStatementTestCase expected) {
         assertView(assertContext, actual, expected);
         assertViewDefinition(assertContext, actual, expected);
         assertSelect(assertContext, actual, expected);
     }
     
-    private static void assertView(final SQLCaseAssertContext assertContext, final CreateViewStatement actual, final CreateViewStatementTestCase expected) {
+    private static void assertView(final SQLCaseAssertContext assertContext, final AlterViewStatement actual, final AlterViewStatementTestCase expected) {
         TableAssert.assertIs(assertContext, actual.getView(), expected.getView());
     }
     
-    private static void assertViewDefinition(final SQLCaseAssertContext assertContext, final CreateViewStatement actual, final CreateViewStatementTestCase expected) {
+    private static void assertViewDefinition(final SQLCaseAssertContext assertContext, final AlterViewStatement actual, final AlterViewStatementTestCase expected) {
         if (null != expected.getViewDefinition()) {
-            assertNotNull("actual view definition should exist", actual.getViewDefinition());
-            assertThat(assertContext.getText(String.format("`%s`'s view definition assertion error: ", actual.getClass().getSimpleName())), actual.getViewDefinition(),
+            assertTrue("actual view definition should exist", AlterViewStatementHandler.getViewDefinition(actual).isPresent());
+            assertThat(assertContext.getText(String.format("`%s`'s view definition assertion error: ", actual.getClass().getSimpleName())), AlterViewStatementHandler.getViewDefinition(actual).get(),
                     is(expected.getViewDefinition()));
         } else {
-            assertNull("actual view definition should not exist", actual.getViewDefinition());
+            assertFalse("actual view definition should not exist", AlterViewStatementHandler.getViewDefinition(actual).isPresent());
         }
     }
     
-    private static void assertSelect(final SQLCaseAssertContext assertContext, final CreateViewStatement actual, final CreateViewStatementTestCase expected) {
+    private static void assertSelect(final SQLCaseAssertContext assertContext, final AlterViewStatement actual, final AlterViewStatementTestCase expected) {
         if (null != expected.getSelectStatement()) {
-            assertNotNull("actual select statement should exist", actual.getSelect());
-            SelectStatementAssert.assertIs(assertContext, actual.getSelect(), expected.getSelectStatement());
+            assertTrue("actual select statement should exist", AlterViewStatementHandler.getSelectStatement(actual).isPresent());
+            SelectStatementAssert.assertIs(assertContext, AlterViewStatementHandler.getSelectStatement(actual).get(), expected.getSelectStatement());
         } else {
-            assertNull("actual select statement should not exist", actual.getSelect());
+            assertFalse("actual select statement should not exist", AlterViewStatementHandler.getSelectStatement(actual).isPresent());
         }
     }
 }
diff --git a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/ddl/impl/CreateViewStatementAssert.java b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/ddl/impl/CreateViewStatementAssert.java
index c5b3ec21477..20b9dff4290 100644
--- a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/ddl/impl/CreateViewStatementAssert.java
+++ b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/ddl/impl/CreateViewStatementAssert.java
@@ -37,11 +37,11 @@ import static org.junit.Assert.assertNull;
 public final class CreateViewStatementAssert {
     
     /**
-     * Assert create table statement is correct with expected parser result.
+     * Assert create view statement is correct with expected parser result.
      * 
      * @param assertContext assert context
-     * @param actual actual create table statement
-     * @param expected expected create table statement test case
+     * @param actual actual create view statement
+     * @param expected expected create view statement test case
      */
     public static void assertIs(final SQLCaseAssertContext assertContext, final CreateViewStatement actual, final CreateViewStatementTestCase expected) {
         assertView(assertContext, actual, expected);
diff --git a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/ddl/impl/DropViewStatementAssert.java b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/ddl/impl/DropViewStatementAssert.java
new file mode 100644
index 00000000000..52a3b4e6cb2
--- /dev/null
+++ b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/ddl/impl/DropViewStatementAssert.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.ddl.impl;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.DropViewStatement;
+import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.SQLCaseAssertContext;
+import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.table.TableAssert;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.ddl.DropViewStatementTestCase;
+
+/**
+ * Drop view statement assert.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class DropViewStatementAssert {
+    
+    /**
+     * Assert drop view statement is correct with expected parser result.
+     * 
+     * @param assertContext assert context
+     * @param actual actual drop view statement
+     * @param expected expected drop view statement test case
+     */
+    public static void assertIs(final SQLCaseAssertContext assertContext, final DropViewStatement actual, final DropViewStatementTestCase expected) {
+        assertViews(assertContext, actual, expected);
+    }
+    
+    private static void assertViews(final SQLCaseAssertContext assertContext, final DropViewStatement actual, final DropViewStatementTestCase expected) {
+        TableAssert.assertIs(assertContext, actual.getViews(), expected.getViews());
+    }
+}
diff --git a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/ddl/AlterViewStatementTestCase.java b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/ddl/AlterViewStatementTestCase.java
index a49537e293c..d4c76d5e02d 100644
--- a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/ddl/AlterViewStatementTestCase.java
+++ b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/ddl/AlterViewStatementTestCase.java
@@ -17,10 +17,31 @@
 
 package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.ddl;
 
+import lombok.Getter;
+import lombok.Setter;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.table.ExpectedSimpleTable;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.SQLParserTestCase;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.dml.SelectStatementTestCase;
+
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
 
 /**
  * Alter view statement test case.
  */
+@Getter
+@Setter
 public final class AlterViewStatementTestCase extends SQLParserTestCase {
+    
+    @XmlAttribute(name = "view-definition")
+    private String viewDefinition;
+    
+    @XmlElement(name = "view")
+    private ExpectedSimpleTable view;
+    
+    @XmlElement(name = "rename-view")
+    private ExpectedSimpleTable renameView;
+    
+    @XmlElement(name = "select")
+    private SelectStatementTestCase selectStatement;
 }
diff --git a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/ddl/DropViewStatementTestCase.java b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/ddl/DropViewStatementTestCase.java
index ad65a7d92cb..cfdec0087b9 100644
--- a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/ddl/DropViewStatementTestCase.java
+++ b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/ddl/DropViewStatementTestCase.java
@@ -17,10 +17,22 @@
 
 package org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.ddl;
 
+import lombok.Getter;
+import lombok.Setter;
+import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.table.ExpectedSimpleTable;
 import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.SQLParserTestCase;
 
+import javax.xml.bind.annotation.XmlElement;
+import java.util.LinkedList;
+import java.util.List;
+
 /**
  * Drop view statement test case.
  */
+@Getter
+@Setter
 public final class DropViewStatementTestCase extends SQLParserTestCase {
+    
+    @XmlElement(name = "view")
+    private final List<ExpectedSimpleTable> views = new LinkedList<>();
 }
diff --git a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/ddl/alter-view.xml b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/ddl/alter-view.xml
index 9faad410a87..edfc0706dd5 100644
--- a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/ddl/alter-view.xml
+++ b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/ddl/alter-view.xml
@@ -17,13 +17,52 @@
   -->
 
 <sql-parser-test-cases>
-    <alter-view sql-case-id="alter_view" />
-    <alter-view sql-case-id="alter_view_set_default_column" />
-    <alter-view sql-case-id="alter_view_drop_default" />
-    <alter-view sql-case-id="alter_view_owner" />
-    <alter-view sql-case-id="alter_view_rename" />
-    <alter-view sql-case-id="alter_view_rename_column" />
-    <alter-view sql-case-id="alter_view_set_schema" />
-    <alter-view sql-case-id="alter_view_set_view_option" />
-    <alter-view sql-case-id="alter_view_reset" />
+    <alter-view sql-case-id="alter_view">
+        <view name="customer_ro" start-index="11" stop-index="21" />
+    </alter-view>
+    
+    <alter-view sql-case-id="alter_view_set_default_column">
+        <view name="order_view" start-index="11" stop-index="20" />
+    </alter-view>
+    
+    <alter-view sql-case-id="alter_view_drop_default">
+        <view name="order_view" start-index="11" stop-index="20" />
+    </alter-view>
+    
+    <alter-view sql-case-id="alter_view_owner">
+        <view name="order_view" start-index="11" stop-index="20" />
+    </alter-view>
+    
+    <alter-view sql-case-id="alter_view_rename">
+        <view name="order_view" start-index="11" stop-index="20" />
+        <rename-view name="new_order_view" start-index="32" stop-index="45" />
+    </alter-view>
+    
+    <alter-view sql-case-id="alter_view_rename_column">
+        <view name="order_view" start-index="11" stop-index="20" />
+    </alter-view>
+    
+    <alter-view sql-case-id="alter_view_set_schema">
+        <view name="order_view" start-index="11" stop-index="20" />
+    </alter-view>
+    
+    <alter-view sql-case-id="alter_view_set_view_option">
+        <view name="order_view" start-index="11" stop-index="20" />
+    </alter-view>
+    
+    <alter-view sql-case-id="alter_view_reset">
+        <view name="order_view" start-index="11" stop-index="20" />
+    </alter-view>
+
+    <alter-view sql-case-id="alter_view_definition" view-definition="SELECT * FROM t_order">
+        <view name="order_view" start-index="11" stop-index="20" />
+        <select>
+            <projections start-index="32" stop-index="32">
+                <shorthand-projection start-index="32" stop-index="32" />
+            </projections>
+            <from>
+                <simple-table name="t_order" start-index="39" stop-index="45" />
+            </from>
+        </select>
+    </alter-view>
 </sql-parser-test-cases>
diff --git a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/ddl/drop-view.xml b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/ddl/drop-view.xml
index 7cf571b58f6..494aa27d089 100644
--- a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/ddl/drop-view.xml
+++ b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/ddl/drop-view.xml
@@ -17,8 +17,24 @@
   -->
 
 <sql-parser-test-cases>
-    <drop-view sql-case-id="drop_view" />
-    <drop-view sql-case-id="drop_view_with_schemaname" />
-    <drop-view sql-case-id="drop_view_cascade_constraints" />
-    <drop-view sql-case-id="drop_view_cascade" />
+    <drop-view sql-case-id="drop_view">
+        <view name="kinds" start-index="10" stop-index="14" />
+    </drop-view>
+    
+    <drop-view sql-case-id="drop_view_with_schemaname">
+        <view name="viewName" start-index="10" stop-index="28">
+            <owner name="schemaName" start-index="10" stop-index="19" />
+        </view>
+    </drop-view>
+    
+    <drop-view sql-case-id="drop_view_cascade_constraints">
+        <view name="viewName" start-index="10" stop-index="28">
+            <owner name="schemaName" start-index="10" stop-index="19" />
+        </view>
+    </drop-view>
+    
+    <drop-view sql-case-id="drop_view_cascade">
+        <view name="order_view" start-index="17" stop-index="26" />
+        <view name="kinds" start-index="10" stop-index="14" />
+    </drop-view>
 </sql-parser-test-cases>
diff --git a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/ddl/alter-view.xml b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/ddl/alter-view.xml
index d7a5a42aff1..a6cfb5c5a41 100644
--- a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/ddl/alter-view.xml
+++ b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/ddl/alter-view.xml
@@ -26,4 +26,5 @@
     <sql-case id="alter_view_set_schema" value="ALTER VIEW order_view SET SCHEMA test" db-types="PostgreSQL,openGauss" />
     <sql-case id="alter_view_set_view_option" value="ALTER VIEW order_view SET (security_barrier=TRUE)" db-types="PostgreSQL,openGauss" />
     <sql-case id="alter_view_reset" value="ALTER VIEW order_view RESET (security_barrier)" db-types="PostgreSQL,openGauss" />
+    <sql-case id="alter_view_definition" value="ALTER VIEW order_view AS SELECT * FROM t_order" db-types="MySQL,SQLServer" />
 </sql-cases>