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

chengzhang 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 5e345fbc4f4 Extract DCL statement to reduce duplicate logic for MySQL 
and doris (#31771)
5e345fbc4f4 is described below

commit 5e345fbc4f4b202f1fed1908d1262df8db43e1a7
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Thu Jun 20 15:33:51 2024 +0800

    Extract DCL statement to reduce duplicate logic for MySQL and doris (#31771)
---
 .../statement/SQLStatementContextFactory.java      |  6 +--
 .../statement/dcl/DenyUserStatementContext.java    |  8 ++--
 .../sql/common/statement/dal/FlushStatement.java   | 12 ++++++
 .../{FlushStatement.java => SpoolStatement.java}   | 10 ++++-
 .../AlterLoginStatement.java}                      | 13 ++++--
 .../CreateLoginStatement.java}                     | 13 ++++--
 .../statement/dcl/DenyUserStatement.java}          |  8 ++--
 .../DropLoginStatement.java}                       | 13 ++++--
 .../RenameUserStatement.java}                      |  8 ++--
 .../SetDefaultRoleStatement.java}                  |  6 +--
 .../SetPasswordStatement.java}                     |  6 +--
 .../SetUserStatement.java}                         | 13 ++++--
 .../statement/doris/dal/DorisFlushStatement.java   | 13 ------
 .../doris/dcl/DorisRenameUserStatement.java        |  5 +--
 .../doris/dcl/DorisSetDefaultRoleStatement.java    |  5 +--
 .../doris/dcl/DorisSetPasswordStatement.java       |  5 +--
 .../statement/doris/dcl/DorisSetRoleStatement.java |  5 +--
 .../statement/mysql/dal/MySQLFlushStatement.java   | 13 ------
 .../mysql/dcl/MySQLRenameUserStatement.java        |  5 +--
 .../mysql/dcl/MySQLSetDefaultRoleStatement.java    |  5 +--
 .../mysql/dcl/MySQLSetPasswordStatement.java       |  5 +--
 .../statement/mysql/dcl/MySQLSetRoleStatement.java |  5 +--
 .../statement/oracle/dal/OracleSpoolStatement.java | 11 +----
 .../dcl/SQLServerAlterLoginStatement.java          | 12 +-----
 .../dcl/SQLServerCreateLoginStatement.java         | 12 +-----
 .../sqlserver/dcl/SQLServerDenyUserStatement.java  | 18 +-------
 .../sqlserver/dcl/SQLServerDropLoginStatement.java | 12 +-----
 .../sqlserver/dcl/SQLServerSetUserStatement.java   | 12 +-----
 .../asserts/statement/dal/DALStatementAssert.java  | 20 ++++-----
 .../statement/dal/impl/FlushStatementAssert.java   |  6 +--
 .../statement/dal/impl/SpoolStatementAssert.java   |  4 +-
 ...tatementAssert.java => UseStatementAssert.java} |  8 ++--
 .../asserts/statement/dcl/DCLStatementAssert.java  | 48 +++++++++++-----------
 .../dcl/impl/AlterLoginStatementAssert.java        |  6 +--
 .../dcl/impl/CreateLoginStatementAssert.java       |  6 +--
 .../dcl/impl/DenyUserStatementAssert.java          |  8 ++--
 .../dcl/impl/DropLoginStatementAssert.java         |  6 +--
 .../dcl/impl/RenameUserStatementAssert.java        |  4 +-
 .../dcl/impl/SetDefaultRoleStatementAssert.java    |  4 +-
 .../dcl/impl/SetPasswordStatementAssert.java       |  4 +-
 .../sqlserver/SQLServerSetUserStatementAssert.java |  4 +-
 41 files changed, 172 insertions(+), 215 deletions(-)

diff --git 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/SQLStatementContextFactory.java
 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/SQLStatementContextFactory.java
index fd88ba9c9c6..c829c11ed72 100644
--- 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/SQLStatementContextFactory.java
+++ 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/SQLStatementContextFactory.java
@@ -77,6 +77,7 @@ import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dal.ShowIndexSt
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dal.ShowTableStatusStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dal.ShowTablesStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.DCLStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.DenyUserStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.GrantStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.RevokeStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.AlterIndexStatement;
@@ -111,7 +112,6 @@ import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dml.MySQ
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dml.MySQLLoadXMLStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.opengauss.ddl.OpenGaussCursorStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.dml.OracleMergeStatement;
-import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.dcl.SQLServerDenyUserStatement;
 
 import java.util.Collections;
 import java.util.List;
@@ -254,8 +254,8 @@ public final class SQLStatementContextFactory {
         if (sqlStatement instanceof RevokeStatement) {
             return new RevokeStatementContext((RevokeStatement) sqlStatement);
         }
-        if (sqlStatement instanceof SQLServerDenyUserStatement) {
-            return new DenyUserStatementContext((SQLServerDenyUserStatement) 
sqlStatement);
+        if (sqlStatement instanceof DenyUserStatement) {
+            return new DenyUserStatementContext((DenyUserStatement) 
sqlStatement);
         }
         return new UnknownSQLStatementContext(sqlStatement);
     }
diff --git 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dcl/DenyUserStatementContext.java
 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dcl/DenyUserStatementContext.java
index cc4d2824efe..3a573f43a22 100644
--- 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dcl/DenyUserStatementContext.java
+++ 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dcl/DenyUserStatementContext.java
@@ -21,7 +21,7 @@ import lombok.Getter;
 import 
org.apache.shardingsphere.infra.binder.context.segment.table.TablesContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.CommonSQLStatementContext;
 import org.apache.shardingsphere.infra.binder.context.type.TableAvailable;
-import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.dcl.SQLServerDenyUserStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.DenyUserStatement;
 
 /**
  * Deny user statement context.
@@ -31,13 +31,13 @@ public final class DenyUserStatementContext extends 
CommonSQLStatementContext im
     
     private final TablesContext tablesContext;
     
-    public DenyUserStatementContext(final SQLServerDenyUserStatement 
sqlStatement) {
+    public DenyUserStatementContext(final DenyUserStatement sqlStatement) {
         super(sqlStatement);
         tablesContext = new TablesContext(sqlStatement.getTable(), 
getDatabaseType());
     }
     
     @Override
-    public SQLServerDenyUserStatement getSqlStatement() {
-        return (SQLServerDenyUserStatement) super.getSqlStatement();
+    public DenyUserStatement getSqlStatement() {
+        return (DenyUserStatement) super.getSqlStatement();
     }
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dal/FlushStatement.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dal/FlushStatement.java
index c80b11f4e49..3f70ad19d4e 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dal/FlushStatement.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dal/FlushStatement.java
@@ -17,10 +17,22 @@
 
 package org.apache.shardingsphere.sql.parser.sql.common.statement.dal;
 
+import lombok.Getter;
+import lombok.Setter;
+import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
 
+import java.util.Collection;
+import java.util.LinkedList;
+
 /**
  * Flush statement.
  */
+@Getter
+@Setter
 public abstract class FlushStatement extends AbstractSQLStatement implements 
DALStatement {
+    
+    private final Collection<SimpleTableSegment> tables = new LinkedList<>();
+    
+    private boolean flushTable;
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dal/FlushStatement.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dal/SpoolStatement.java
similarity index 84%
copy from 
parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dal/FlushStatement.java
copy to 
parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dal/SpoolStatement.java
index c80b11f4e49..033be839d41 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dal/FlushStatement.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dal/SpoolStatement.java
@@ -17,10 +17,16 @@
 
 package org.apache.shardingsphere.sql.parser.sql.common.statement.dal;
 
+import lombok.Getter;
+import lombok.Setter;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
 
 /**
- * Flush statement.
+ * Spool statement.
  */
-public abstract class FlushStatement extends AbstractSQLStatement implements 
DALStatement {
+@Getter
+@Setter
+public abstract class SpoolStatement extends AbstractSQLStatement implements 
DALStatement {
+    
+    private String fileName;
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dal/FlushStatement.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dcl/AlterLoginStatement.java
similarity index 75%
copy from 
parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dal/FlushStatement.java
copy to 
parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dcl/AlterLoginStatement.java
index c80b11f4e49..05abedae0eb 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dal/FlushStatement.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dcl/AlterLoginStatement.java
@@ -15,12 +15,19 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sql.parser.sql.common.statement.dal;
+package org.apache.shardingsphere.sql.parser.sql.common.statement.dcl;
 
+import lombok.Getter;
+import lombok.Setter;
+import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dcl.LoginSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
 
 /**
- * Flush statement.
+ * Alter login statement.
  */
-public abstract class FlushStatement extends AbstractSQLStatement implements 
DALStatement {
+@Getter
+@Setter
+public abstract class AlterLoginStatement extends AbstractSQLStatement 
implements DCLStatement {
+    
+    private LoginSegment loginSegment;
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dal/FlushStatement.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dcl/CreateLoginStatement.java
similarity index 75%
copy from 
parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dal/FlushStatement.java
copy to 
parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dcl/CreateLoginStatement.java
index c80b11f4e49..466bd369898 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dal/FlushStatement.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dcl/CreateLoginStatement.java
@@ -15,12 +15,19 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sql.parser.sql.common.statement.dal;
+package org.apache.shardingsphere.sql.parser.sql.common.statement.dcl;
 
+import lombok.Getter;
+import lombok.Setter;
+import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dcl.LoginSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
 
 /**
- * Flush statement.
+ * Create login statement.
  */
-public abstract class FlushStatement extends AbstractSQLStatement implements 
DALStatement {
+@Getter
+@Setter
+public abstract class CreateLoginStatement extends AbstractSQLStatement 
implements DCLStatement {
+    
+    private LoginSegment loginSegment;
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/sqlserver/dcl/SQLServerDenyUserStatement.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dcl/DenyUserStatement.java
similarity index 76%
copy from 
parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/sqlserver/dcl/SQLServerDenyUserStatement.java
copy to 
parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dcl/DenyUserStatement.java
index 44a6dd8101d..8626b0a2d9b 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/sqlserver/dcl/SQLServerDenyUserStatement.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dcl/DenyUserStatement.java
@@ -15,25 +15,23 @@
  * limitations under the License.
  */
 
-package 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.dcl;
+package org.apache.shardingsphere.sql.parser.sql.common.statement.dcl;
 
 import lombok.Getter;
 import lombok.Setter;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
-import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.DCLStatement;
-import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.SQLServerStatement;
 
 import java.util.Collection;
 import java.util.LinkedList;
 
 /**
- * SQLServer deny user statement.
+ * Deny user statement.
  */
 @Getter
 @Setter
-public final class SQLServerDenyUserStatement extends AbstractSQLStatement 
implements DCLStatement, SQLServerStatement {
+public abstract class DenyUserStatement extends AbstractSQLStatement 
implements DCLStatement {
     
     private SimpleTableSegment table;
     
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dal/FlushStatement.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dcl/DropLoginStatement.java
similarity index 75%
copy from 
parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dal/FlushStatement.java
copy to 
parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dcl/DropLoginStatement.java
index c80b11f4e49..6a97a43a4ac 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dal/FlushStatement.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dcl/DropLoginStatement.java
@@ -15,12 +15,19 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sql.parser.sql.common.statement.dal;
+package org.apache.shardingsphere.sql.parser.sql.common.statement.dcl;
 
+import lombok.Getter;
+import lombok.Setter;
+import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dcl.LoginSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
 
 /**
- * Flush statement.
+ * Drop login statement.
  */
-public abstract class FlushStatement extends AbstractSQLStatement implements 
DALStatement {
+@Getter
+@Setter
+public abstract class DropLoginStatement extends AbstractSQLStatement 
implements DCLStatement {
+    
+    private LoginSegment loginSegment;
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dal/DorisUseStatement.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dcl/RenameUserStatement.java
similarity index 80%
rename from 
parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dal/DorisUseStatement.java
rename to 
parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dcl/RenameUserStatement.java
index aee3998f418..413a7cbf305 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dal/DorisUseStatement.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dcl/RenameUserStatement.java
@@ -15,12 +15,12 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sql.parser.sql.common.statement.dal;
+package org.apache.shardingsphere.sql.parser.sql.common.statement.dcl;
 
-import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.doris.DorisStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
 
 /**
- * Use database statement for Doris.
+ * Rename user statement.
  */
-public final class DorisUseStatement extends UseStatement implements 
DorisStatement {
+public abstract class RenameUserStatement extends AbstractSQLStatement 
implements DCLStatement {
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dal/FlushStatement.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dcl/SetDefaultRoleStatement.java
similarity index 87%
copy from 
parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dal/FlushStatement.java
copy to 
parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dcl/SetDefaultRoleStatement.java
index c80b11f4e49..7d0bfe0bd7d 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dal/FlushStatement.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dcl/SetDefaultRoleStatement.java
@@ -15,12 +15,12 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sql.parser.sql.common.statement.dal;
+package org.apache.shardingsphere.sql.parser.sql.common.statement.dcl;
 
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
 
 /**
- * Flush statement.
+ * Set default role statement.
  */
-public abstract class FlushStatement extends AbstractSQLStatement implements 
DALStatement {
+public abstract class SetDefaultRoleStatement extends AbstractSQLStatement 
implements DCLStatement {
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dal/FlushStatement.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dcl/SetPasswordStatement.java
similarity index 87%
copy from 
parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dal/FlushStatement.java
copy to 
parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dcl/SetPasswordStatement.java
index c80b11f4e49..4520e52412d 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dal/FlushStatement.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dcl/SetPasswordStatement.java
@@ -15,12 +15,12 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sql.parser.sql.common.statement.dal;
+package org.apache.shardingsphere.sql.parser.sql.common.statement.dcl;
 
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
 
 /**
- * Flush statement.
+ * Set password statement.
  */
-public abstract class FlushStatement extends AbstractSQLStatement implements 
DALStatement {
+public abstract class SetPasswordStatement extends AbstractSQLStatement 
implements DCLStatement {
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dal/FlushStatement.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dcl/SetUserStatement.java
similarity index 76%
copy from 
parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dal/FlushStatement.java
copy to 
parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dcl/SetUserStatement.java
index c80b11f4e49..3958af107c8 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dal/FlushStatement.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/dcl/SetUserStatement.java
@@ -15,12 +15,19 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sql.parser.sql.common.statement.dal;
+package org.apache.shardingsphere.sql.parser.sql.common.statement.dcl;
 
+import lombok.Getter;
+import lombok.Setter;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dcl.UserSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
 
 /**
- * Flush statement.
+ * Set user statement.
  */
-public abstract class FlushStatement extends AbstractSQLStatement implements 
DALStatement {
+@Getter
+@Setter
+public abstract class SetUserStatement extends AbstractSQLStatement implements 
DCLStatement {
+    
+    private UserSegment user;
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/doris/dal/DorisFlushStatement.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/doris/dal/DorisFlushStatement.java
index a46f470104b..ecf9e631d81 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/doris/dal/DorisFlushStatement.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/doris/dal/DorisFlushStatement.java
@@ -17,24 +17,11 @@
 
 package org.apache.shardingsphere.sql.parser.sql.dialect.statement.doris.dal;
 
-import lombok.Getter;
-import lombok.Setter;
-import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dal.FlushStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.doris.DorisStatement;
 
-import java.util.Collection;
-import java.util.LinkedList;
-
 /**
  * Doris flush statement.
  */
-@Getter
-@Setter
 public final class DorisFlushStatement extends FlushStatement implements 
DorisStatement {
-    
-    private final Collection<SimpleTableSegment> tables = new LinkedList<>();
-    
-    private boolean flushTable;
-    
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/doris/dcl/DorisRenameUserStatement.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/doris/dcl/DorisRenameUserStatement.java
index 01566f55413..fcd6cf5e22c 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/doris/dcl/DorisRenameUserStatement.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/doris/dcl/DorisRenameUserStatement.java
@@ -17,12 +17,11 @@
 
 package org.apache.shardingsphere.sql.parser.sql.dialect.statement.doris.dcl;
 
-import 
org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
-import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.DCLStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.RenameUserStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.doris.DorisStatement;
 
 /**
  * Doris rename user statement.
  */
-public final class DorisRenameUserStatement extends AbstractSQLStatement 
implements DCLStatement, DorisStatement {
+public final class DorisRenameUserStatement extends RenameUserStatement 
implements DorisStatement {
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/doris/dcl/DorisSetDefaultRoleStatement.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/doris/dcl/DorisSetDefaultRoleStatement.java
index 6d816c3866b..6eb27648c99 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/doris/dcl/DorisSetDefaultRoleStatement.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/doris/dcl/DorisSetDefaultRoleStatement.java
@@ -17,12 +17,11 @@
 
 package org.apache.shardingsphere.sql.parser.sql.dialect.statement.doris.dcl;
 
-import 
org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
-import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.DCLStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.SetDefaultRoleStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.doris.DorisStatement;
 
 /**
  * Doris set default role statement.
  */
-public final class DorisSetDefaultRoleStatement extends AbstractSQLStatement 
implements DCLStatement, DorisStatement {
+public final class DorisSetDefaultRoleStatement extends 
SetDefaultRoleStatement implements DorisStatement {
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/doris/dcl/DorisSetPasswordStatement.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/doris/dcl/DorisSetPasswordStatement.java
index 99424c8fe42..20fd080b726 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/doris/dcl/DorisSetPasswordStatement.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/doris/dcl/DorisSetPasswordStatement.java
@@ -17,12 +17,11 @@
 
 package org.apache.shardingsphere.sql.parser.sql.dialect.statement.doris.dcl;
 
-import 
org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
-import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.DCLStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.SetPasswordStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.doris.DorisStatement;
 
 /**
  * Doris set password statement.
  */
-public final class DorisSetPasswordStatement extends AbstractSQLStatement 
implements DCLStatement, DorisStatement {
+public final class DorisSetPasswordStatement extends SetPasswordStatement 
implements DorisStatement {
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/doris/dcl/DorisSetRoleStatement.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/doris/dcl/DorisSetRoleStatement.java
index 2c0880a71e2..aea567914e2 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/doris/dcl/DorisSetRoleStatement.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/doris/dcl/DorisSetRoleStatement.java
@@ -17,12 +17,11 @@
 
 package org.apache.shardingsphere.sql.parser.sql.dialect.statement.doris.dcl;
 
-import 
org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
-import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.DCLStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.SetRoleStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.doris.DorisStatement;
 
 /**
  * Doris set role statement.
  */
-public final class DorisSetRoleStatement extends AbstractSQLStatement 
implements DCLStatement, DorisStatement {
+public final class DorisSetRoleStatement extends SetRoleStatement implements 
DorisStatement {
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/dal/MySQLFlushStatement.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/dal/MySQLFlushStatement.java
index e16625856f6..e5f2e583ee5 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/dal/MySQLFlushStatement.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/dal/MySQLFlushStatement.java
@@ -17,24 +17,11 @@
 
 package org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal;
 
-import lombok.Getter;
-import lombok.Setter;
-import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dal.FlushStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.MySQLStatement;
 
-import java.util.Collection;
-import java.util.LinkedList;
-
 /**
  * MySQL flush statement.
  */
-@Getter
-@Setter
 public final class MySQLFlushStatement extends FlushStatement implements 
MySQLStatement {
-    
-    private final Collection<SimpleTableSegment> tables = new LinkedList<>();
-    
-    private boolean flushTable;
-    
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/dcl/MySQLRenameUserStatement.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/dcl/MySQLRenameUserStatement.java
index d1a8cd66f9b..9deb787dfe8 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/dcl/MySQLRenameUserStatement.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/dcl/MySQLRenameUserStatement.java
@@ -17,12 +17,11 @@
 
 package org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dcl;
 
-import 
org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
-import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.DCLStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.RenameUserStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.MySQLStatement;
 
 /**
  * MySQL rename user statement.
  */
-public final class MySQLRenameUserStatement extends AbstractSQLStatement 
implements DCLStatement, MySQLStatement {
+public final class MySQLRenameUserStatement extends RenameUserStatement 
implements MySQLStatement {
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/dcl/MySQLSetDefaultRoleStatement.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/dcl/MySQLSetDefaultRoleStatement.java
index aeb7cc68fa2..aec3e6da1f1 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/dcl/MySQLSetDefaultRoleStatement.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/dcl/MySQLSetDefaultRoleStatement.java
@@ -17,12 +17,11 @@
 
 package org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dcl;
 
-import 
org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
-import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.DCLStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.SetDefaultRoleStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.MySQLStatement;
 
 /**
  * MySQL set default role statement.
  */
-public final class MySQLSetDefaultRoleStatement extends AbstractSQLStatement 
implements DCLStatement, MySQLStatement {
+public final class MySQLSetDefaultRoleStatement extends 
SetDefaultRoleStatement implements MySQLStatement {
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/dcl/MySQLSetPasswordStatement.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/dcl/MySQLSetPasswordStatement.java
index 847a54a4d82..b8d3239ccb9 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/dcl/MySQLSetPasswordStatement.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/dcl/MySQLSetPasswordStatement.java
@@ -17,12 +17,11 @@
 
 package org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dcl;
 
-import 
org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
-import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.DCLStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.SetPasswordStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.MySQLStatement;
 
 /**
  * MySQL set password statement.
  */
-public final class MySQLSetPasswordStatement extends AbstractSQLStatement 
implements DCLStatement, MySQLStatement {
+public final class MySQLSetPasswordStatement extends SetPasswordStatement 
implements MySQLStatement {
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/dcl/MySQLSetRoleStatement.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/dcl/MySQLSetRoleStatement.java
index 7136f473035..157a15cb47d 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/dcl/MySQLSetRoleStatement.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/dcl/MySQLSetRoleStatement.java
@@ -17,12 +17,11 @@
 
 package org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dcl;
 
-import 
org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
-import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.DCLStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.SetRoleStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.MySQLStatement;
 
 /**
  * MySQL set role statement.
  */
-public final class MySQLSetRoleStatement extends AbstractSQLStatement 
implements DCLStatement, MySQLStatement {
+public final class MySQLSetRoleStatement extends SetRoleStatement implements 
MySQLStatement {
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/dal/OracleSpoolStatement.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/dal/OracleSpoolStatement.java
index e7aa69d7c9b..6fbc42549b1 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/dal/OracleSpoolStatement.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/dal/OracleSpoolStatement.java
@@ -17,18 +17,11 @@
 
 package org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.dal;
 
-import lombok.Getter;
-import lombok.Setter;
-import 
org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
-import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dal.DALStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dal.SpoolStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.OracleStatement;
 
 /**
  * Oracle Spool statement.
  */
-@Getter
-@Setter
-public final class OracleSpoolStatement extends AbstractSQLStatement 
implements DALStatement, OracleStatement {
-    
-    private String fileName;
+public final class OracleSpoolStatement extends SpoolStatement implements 
OracleStatement {
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/sqlserver/dcl/SQLServerAlterLoginStatement.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/sqlserver/dcl/SQLServerAlterLoginStatement.java
index a915ec1e10d..9de98ae06b7 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/sqlserver/dcl/SQLServerAlterLoginStatement.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/sqlserver/dcl/SQLServerAlterLoginStatement.java
@@ -17,19 +17,11 @@
 
 package 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.dcl;
 
-import lombok.Getter;
-import lombok.Setter;
-import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dcl.LoginSegment;
-import 
org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
-import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.DCLStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.AlterLoginStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.SQLServerStatement;
 
 /**
  * SQLServer alter login statement.
  */
-@Getter
-@Setter
-public final class SQLServerAlterLoginStatement extends AbstractSQLStatement 
implements DCLStatement, SQLServerStatement {
-    
-    private LoginSegment loginSegment;
+public final class SQLServerAlterLoginStatement extends AlterLoginStatement 
implements SQLServerStatement {
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/sqlserver/dcl/SQLServerCreateLoginStatement.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/sqlserver/dcl/SQLServerCreateLoginStatement.java
index 22e71b85183..f20bd8d43e5 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/sqlserver/dcl/SQLServerCreateLoginStatement.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/sqlserver/dcl/SQLServerCreateLoginStatement.java
@@ -17,19 +17,11 @@
 
 package 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.dcl;
 
-import lombok.Getter;
-import lombok.Setter;
-import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dcl.LoginSegment;
-import 
org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
-import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.DCLStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.CreateLoginStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.SQLServerStatement;
 
 /**
  * SQLServer create login statement.
  */
-@Getter
-@Setter
-public final class SQLServerCreateLoginStatement extends AbstractSQLStatement 
implements DCLStatement, SQLServerStatement {
-    
-    private LoginSegment loginSegment;
+public final class SQLServerCreateLoginStatement extends CreateLoginStatement 
implements SQLServerStatement {
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/sqlserver/dcl/SQLServerDenyUserStatement.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/sqlserver/dcl/SQLServerDenyUserStatement.java
index 44a6dd8101d..ecd9d6fa46a 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/sqlserver/dcl/SQLServerDenyUserStatement.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/sqlserver/dcl/SQLServerDenyUserStatement.java
@@ -17,25 +17,11 @@
 
 package 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.dcl;
 
-import lombok.Getter;
-import lombok.Setter;
-import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment;
-import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
-import 
org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
-import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.DCLStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.DenyUserStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.SQLServerStatement;
 
-import java.util.Collection;
-import java.util.LinkedList;
-
 /**
  * SQLServer deny user statement.
  */
-@Getter
-@Setter
-public final class SQLServerDenyUserStatement extends AbstractSQLStatement 
implements DCLStatement, SQLServerStatement {
-    
-    private SimpleTableSegment table;
-    
-    private final Collection<ColumnSegment> columns = new LinkedList<>();
+public final class SQLServerDenyUserStatement extends DenyUserStatement 
implements SQLServerStatement {
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/sqlserver/dcl/SQLServerDropLoginStatement.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/sqlserver/dcl/SQLServerDropLoginStatement.java
index a2794c995f9..8f67f92673c 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/sqlserver/dcl/SQLServerDropLoginStatement.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/sqlserver/dcl/SQLServerDropLoginStatement.java
@@ -17,19 +17,11 @@
 
 package 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.dcl;
 
-import lombok.Getter;
-import lombok.Setter;
-import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dcl.LoginSegment;
-import 
org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
-import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.DCLStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.DropLoginStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.SQLServerStatement;
 
 /**
  * SQLServer drop login statement.
  */
-@Getter
-@Setter
-public final class SQLServerDropLoginStatement extends AbstractSQLStatement 
implements DCLStatement, SQLServerStatement {
-    
-    private LoginSegment loginSegment;
+public final class SQLServerDropLoginStatement extends DropLoginStatement 
implements SQLServerStatement {
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/sqlserver/dcl/SQLServerSetUserStatement.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/sqlserver/dcl/SQLServerSetUserStatement.java
index 12a2a3491ea..a50272621f4 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/sqlserver/dcl/SQLServerSetUserStatement.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/sqlserver/dcl/SQLServerSetUserStatement.java
@@ -17,19 +17,11 @@
 
 package 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.dcl;
 
-import lombok.Getter;
-import lombok.Setter;
-import 
org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
-import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.DCLStatement;
-import org.apache.shardingsphere.sql.parser.sql.common.segment.dcl.UserSegment;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.SetUserStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.SQLServerStatement;
 
 /**
  * SQLServer set user statement.
  */
-@Getter
-@Setter
-public final class SQLServerSetUserStatement extends AbstractSQLStatement 
implements DCLStatement, SQLServerStatement {
-    
-    private UserSegment user;
+public final class SQLServerSetUserStatement extends SetUserStatement 
implements SQLServerStatement {
 }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/DALStatementAssert.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/DALStatementAssert.java
index a4738f947dd..bd3561d867d 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/DALStatementAssert.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/DALStatementAssert.java
@@ -31,6 +31,7 @@ import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dal.DelimiterSt
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dal.DropResourceGroupStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dal.EmptyStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dal.ExplainStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dal.FlushStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dal.InstallComponentStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dal.InstallPluginStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dal.KillStatement;
@@ -68,11 +69,10 @@ import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dal.ShowTablesS
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dal.ShowTriggersStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dal.ShowVariablesStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dal.ShutdownStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dal.SpoolStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dal.UninstallComponentStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dal.UninstallPluginStatement;
-import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLFlushStatement;
-import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLUseStatement;
-import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.dal.OracleSpoolStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dal.UseStatement;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.AlterResourceGroupStatementAssert;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.BinlogStatementAssert;
@@ -124,9 +124,9 @@ import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.d
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.SpoolStatementAssert;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.UninstallComponentStatementAssert;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.UninstallPluginStatementAssert;
-import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.mysql.MySQLUseStatementAssert;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.mysql.RepairTableStatementAssert;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.mysql.SetResourceGroupStatementAssert;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dal.impl.mysql.UseStatementAssert;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.SQLParserTestCase;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.AlterResourceGroupStatementTestCase;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.BinlogStatementTestCase;
@@ -196,8 +196,8 @@ public final class DALStatementAssert {
      * @param expected expected DAL statement test case
      */
     public static void assertIs(final SQLCaseAssertContext assertContext, 
final DALStatement actual, final SQLParserTestCase expected) {
-        if (actual instanceof MySQLUseStatement) {
-            MySQLUseStatementAssert.assertIs(assertContext, 
(MySQLUseStatement) actual, (UseStatementTestCase) expected);
+        if (actual instanceof UseStatement) {
+            UseStatementAssert.assertIs(assertContext, (UseStatement) actual, 
(UseStatementTestCase) expected);
         } else if (actual instanceof EmptyStatement) {
             EmptyStatementAssert.assertIs(assertContext, (EmptyStatement) 
actual, (EmptyStatementTestCase) expected);
         } else if (actual instanceof ExplainStatement) {
@@ -228,8 +228,8 @@ public final class DALStatementAssert {
             ResetParameterStatementAssert.assertIs(assertContext, 
(ResetParameterStatement) actual, (ResetParameterStatementTestCase) expected);
         } else if (actual instanceof InstallComponentStatement) {
             InstallComponentStatementAssert.assertIs(assertContext, 
(InstallComponentStatement) actual, (InstallComponentStatementTestCase) 
expected);
-        } else if (actual instanceof MySQLFlushStatement) {
-            FlushStatementAssert.assertIs(assertContext, (MySQLFlushStatement) 
actual, (FlushStatementTestCase) expected);
+        } else if (actual instanceof FlushStatement) {
+            FlushStatementAssert.assertIs(assertContext, (FlushStatement) 
actual, (FlushStatementTestCase) expected);
         } else if (actual instanceof InstallPluginStatement) {
             InstallPluginStatementAssert.assertIs(assertContext, 
(InstallPluginStatement) actual, (InstallPluginStatementTestCase) expected);
         } else if (actual instanceof CloneStatement) {
@@ -300,8 +300,8 @@ public final class DALStatementAssert {
             DelimiterStatementAssert.assertIs(assertContext, 
(DelimiterStatement) actual, (DelimiterStatementTestCase) expected);
         } else if (actual instanceof ShowBinlogEventsStatement) {
             ShowBinlogEventsStatementAssert.assertIs(assertContext, 
(ShowBinlogEventsStatement) actual, (ShowBinlogEventsStatementTestCase) 
expected);
-        } else if (actual instanceof OracleSpoolStatement) {
-            SpoolStatementAssert.assertIs(assertContext, 
(OracleSpoolStatement) actual, (SpoolStatementTestCase) expected);
+        } else if (actual instanceof SpoolStatement) {
+            SpoolStatementAssert.assertIs(assertContext, (SpoolStatement) 
actual, (SpoolStatementTestCase) expected);
         }
     }
 }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/FlushStatementAssert.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/FlushStatementAssert.java
index 98818133ce2..7318c1072a3 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/FlushStatementAssert.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/FlushStatementAssert.java
@@ -19,7 +19,7 @@ package 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLFlushStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dal.FlushStatement;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.table.TableAssert;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.FlushStatementTestCase;
@@ -40,12 +40,12 @@ public final class FlushStatementAssert {
      * @param actual actual flush statement
      * @param expected expected flush statement test case
      */
-    public static void assertIs(final SQLCaseAssertContext assertContext, 
final MySQLFlushStatement actual, final FlushStatementTestCase expected) {
+    public static void assertIs(final SQLCaseAssertContext assertContext, 
final FlushStatement actual, final FlushStatementTestCase expected) {
         assertThat(assertContext.getText("Flush statement is flush table 
assert error: "), actual.isFlushTable(), is(expected.isFlushTable()));
         assertTables(assertContext, actual, expected);
     }
     
-    private static void assertTables(final SQLCaseAssertContext assertContext, 
final MySQLFlushStatement actual, final FlushStatementTestCase expected) {
+    private static void assertTables(final SQLCaseAssertContext assertContext, 
final FlushStatement actual, final FlushStatementTestCase expected) {
         TableAssert.assertIs(assertContext, actual.getTables(), 
expected.getTables());
     }
 }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/SpoolStatementAssert.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/SpoolStatementAssert.java
index 246bfdcfbb0..eaf74ab7c0f 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/SpoolStatementAssert.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/SpoolStatementAssert.java
@@ -19,7 +19,7 @@ package 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.dal.OracleSpoolStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dal.SpoolStatement;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.SpoolStatementTestCase;
 
@@ -39,7 +39,7 @@ public final class SpoolStatementAssert {
      * @param actual actual spool statement
      * @param expected expected spool statement test case
      */
-    public static void assertIs(final SQLCaseAssertContext assertContext, 
final OracleSpoolStatement actual, final SpoolStatementTestCase expected) {
+    public static void assertIs(final SQLCaseAssertContext assertContext, 
final SpoolStatement actual, final SpoolStatementTestCase expected) {
         if (null != expected.getFilename()) {
             assertThat(assertContext.getText("Actual filename does not match: 
"), actual.getFileName(), is(expected.getFilename()));
         }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/mysql/MySQLUseStatementAssert.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/mysql/UseStatementAssert.java
similarity index 88%
rename from 
test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/mysql/MySQLUseStatementAssert.java
rename to 
test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/mysql/UseStatementAssert.java
index f83d1388827..338ac19ab56 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/mysql/MySQLUseStatementAssert.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dal/impl/mysql/UseStatementAssert.java
@@ -19,7 +19,7 @@ package 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLUseStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dal.UseStatement;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dal.UseStatementTestCase;
 
@@ -27,10 +27,10 @@ import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
- * MySQL use statement assert.
+ * Use statement assert.
  */
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class MySQLUseStatementAssert {
+public final class UseStatementAssert {
     
     /**
      * Assert use statement is correct with expected parser result.
@@ -39,7 +39,7 @@ public final class MySQLUseStatementAssert {
      * @param actual actual use statement
      * @param expected expected use statement test case
      */
-    public static void assertIs(final SQLCaseAssertContext assertContext, 
final MySQLUseStatement actual, final UseStatementTestCase expected) {
+    public static void assertIs(final SQLCaseAssertContext assertContext, 
final UseStatement actual, final UseStatementTestCase expected) {
         assertThat(assertContext.getText("Schema name assertion error: "), 
actual.getSchema(), is(expected.getSchema().getName()));
         // TODO create a new assert class named `SchemaAssert`
         // TODO extract and assert start index, stop index, start delimiter 
and end delimiter
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dcl/DCLStatementAssert.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dcl/DCLStatementAssert.java
index 490d95b3a20..2953450f942 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dcl/DCLStatementAssert.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dcl/DCLStatementAssert.java
@@ -19,25 +19,25 @@ package 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.AlterLoginStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.AlterRoleStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.AlterUserStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.CreateLoginStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.CreateRoleStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.CreateUserStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.DCLStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.DenyUserStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.DropLoginStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.DropRoleStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.DropUserStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.GrantStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.ReassignOwnedStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.RenameUserStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.RevokeStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.SetDefaultRoleStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.SetPasswordStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.SetRoleStatement;
-import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dcl.MySQLRenameUserStatement;
-import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dcl.MySQLSetDefaultRoleStatement;
-import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dcl.MySQLSetPasswordStatement;
-import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.dcl.SQLServerAlterLoginStatement;
-import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.dcl.SQLServerCreateLoginStatement;
-import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.dcl.SQLServerDenyUserStatement;
-import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.dcl.SQLServerDropLoginStatement;
-import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.dcl.SQLServerSetUserStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.SetUserStatement;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dcl.impl.AlterLoginStatementAssert;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.dcl.impl.AlterRoleStatementAssert;
@@ -101,16 +101,16 @@ public final class DCLStatementAssert {
             AlterUserStatementAssert.assertIs(assertContext, 
(AlterUserStatement) actual, (AlterUserStatementTestCase) expected);
         } else if (actual instanceof DropUserStatement) {
             DropUserStatementAssert.assertIs(assertContext, 
(DropUserStatement) actual, (DropUserStatementTestCase) expected);
-        } else if (actual instanceof MySQLRenameUserStatement) {
-            RenameUserStatementAssert.assertIs(assertContext, 
(MySQLRenameUserStatement) actual, (RenameUserStatementTestCase) expected);
-        } else if (actual instanceof SQLServerDenyUserStatement) {
-            DenyUserStatementAssert.assertIs(assertContext, 
(SQLServerDenyUserStatement) actual, (DenyUserStatementTestCase) expected);
-        } else if (actual instanceof SQLServerCreateLoginStatement) {
-            CreateLoginStatementAssert.assertIs(assertContext, 
(SQLServerCreateLoginStatement) actual, (CreateLoginStatementTestCase) 
expected);
-        } else if (actual instanceof SQLServerAlterLoginStatement) {
-            AlterLoginStatementAssert.assertIs(assertContext, 
(SQLServerAlterLoginStatement) actual, (AlterLoginStatementTestCase) expected);
-        } else if (actual instanceof SQLServerDropLoginStatement) {
-            DropLoginStatementAssert.assertIs(assertContext, 
(SQLServerDropLoginStatement) actual, (DropLoginStatementTestCase) expected);
+        } else if (actual instanceof RenameUserStatement) {
+            RenameUserStatementAssert.assertIs(assertContext, 
(RenameUserStatement) actual, (RenameUserStatementTestCase) expected);
+        } else if (actual instanceof DenyUserStatement) {
+            DenyUserStatementAssert.assertIs(assertContext, 
(DenyUserStatement) actual, (DenyUserStatementTestCase) expected);
+        } else if (actual instanceof CreateLoginStatement) {
+            CreateLoginStatementAssert.assertIs(assertContext, 
(CreateLoginStatement) actual, (CreateLoginStatementTestCase) expected);
+        } else if (actual instanceof AlterLoginStatement) {
+            AlterLoginStatementAssert.assertIs(assertContext, 
(AlterLoginStatement) actual, (AlterLoginStatementTestCase) expected);
+        } else if (actual instanceof DropLoginStatement) {
+            DropLoginStatementAssert.assertIs(assertContext, 
(DropLoginStatement) actual, (DropLoginStatementTestCase) expected);
         } else if (actual instanceof CreateRoleStatement) {
             CreateRoleStatementAssert.assertIs(assertContext, 
(CreateRoleStatement) actual, (CreateRoleStatementTestCase) expected);
         } else if (actual instanceof AlterRoleStatement) {
@@ -119,12 +119,12 @@ public final class DCLStatementAssert {
             DropRoleStatementAssert.assertIs(assertContext, 
(DropRoleStatement) actual, (DropRoleStatementTestCase) expected);
         } else if (actual instanceof SetRoleStatement) {
             SetRoleStatementAssert.assertIs(assertContext, (SetRoleStatement) 
actual, (SetRoleStatementTestCase) expected);
-        } else if (actual instanceof MySQLSetDefaultRoleStatement) {
-            SetDefaultRoleStatementAssert.assertIs(assertContext, 
(MySQLSetDefaultRoleStatement) actual, (SetDefaultRoleStatementTestCase) 
expected);
-        } else if (actual instanceof MySQLSetPasswordStatement) {
-            SetPasswordStatementAssert.assertIs(assertContext, 
(MySQLSetPasswordStatement) actual, (SetPasswordStatementTestCase) expected);
-        } else if (actual instanceof SQLServerSetUserStatement) {
-            SQLServerSetUserStatementAssert.assertIs(assertContext, 
(SQLServerSetUserStatement) actual, (SetUserStatementTestCase) expected);
+        } else if (actual instanceof SetDefaultRoleStatement) {
+            SetDefaultRoleStatementAssert.assertIs(assertContext, 
(SetDefaultRoleStatement) actual, (SetDefaultRoleStatementTestCase) expected);
+        } else if (actual instanceof SetPasswordStatement) {
+            SetPasswordStatementAssert.assertIs(assertContext, 
(SetPasswordStatement) actual, (SetPasswordStatementTestCase) expected);
+        } else if (actual instanceof SetUserStatement) {
+            SQLServerSetUserStatementAssert.assertIs(assertContext, 
(SetUserStatement) actual, (SetUserStatementTestCase) expected);
         } else if (actual instanceof ReassignOwnedStatement) {
             ReassignOwnedStatementAssert.assertIs(assertContext, 
(ReassignOwnedStatement) actual, (ReassignOwnedStatementTestCase) expected);
         }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dcl/impl/AlterLoginStatementAssert.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dcl/impl/AlterLoginStatementAssert.java
index e6c0961cddb..048e09af086 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dcl/impl/AlterLoginStatementAssert.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dcl/impl/AlterLoginStatementAssert.java
@@ -19,15 +19,15 @@ package 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.dcl.SQLServerAlterLoginStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.AlterLoginStatement;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.SQLSegmentAssert;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dcl.AlterLoginStatementTestCase;
 
 import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertNull;
-import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Alter login statement assert.
@@ -42,7 +42,7 @@ public final class AlterLoginStatementAssert {
      * @param actual actual alter login statement
      * @param expected expected alter login statement test case
      */
-    public static void assertIs(final SQLCaseAssertContext assertContext, 
final SQLServerAlterLoginStatement actual, final AlterLoginStatementTestCase 
expected) {
+    public static void assertIs(final SQLCaseAssertContext assertContext, 
final AlterLoginStatement actual, final AlterLoginStatementTestCase expected) {
         if (null == expected.getLogin()) {
             assertNull(actual.getLoginSegment(), assertContext.getText("Actual 
login should not exist."));
         } else {
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dcl/impl/CreateLoginStatementAssert.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dcl/impl/CreateLoginStatementAssert.java
index a059a18b8bf..067d1277624 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dcl/impl/CreateLoginStatementAssert.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dcl/impl/CreateLoginStatementAssert.java
@@ -19,15 +19,15 @@ package 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.dcl.SQLServerCreateLoginStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.CreateLoginStatement;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.SQLSegmentAssert;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dcl.CreateLoginStatementTestCase;
 
 import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertNull;
-import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Create login statement assert.
@@ -42,7 +42,7 @@ public final class CreateLoginStatementAssert {
      * @param actual actual create login statement
      * @param expected expected create login statement test case
      */
-    public static void assertIs(final SQLCaseAssertContext assertContext, 
final SQLServerCreateLoginStatement actual, final CreateLoginStatementTestCase 
expected) {
+    public static void assertIs(final SQLCaseAssertContext assertContext, 
final CreateLoginStatement actual, final CreateLoginStatementTestCase expected) 
{
         if (null == expected.getLogin()) {
             assertNull(actual.getLoginSegment(), assertContext.getText("Actual 
login should not exist."));
         } else {
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dcl/impl/DenyUserStatementAssert.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dcl/impl/DenyUserStatementAssert.java
index 60274afd67a..9d8801c65d9 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dcl/impl/DenyUserStatementAssert.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dcl/impl/DenyUserStatementAssert.java
@@ -19,7 +19,7 @@ package 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.dcl.SQLServerDenyUserStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.DenyUserStatement;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.column.ColumnAssert;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.table.TableAssert;
@@ -42,12 +42,12 @@ public final class DenyUserStatementAssert {
      * @param actual actual deny user statement
      * @param expected expected deny user statement test case
      */
-    public static void assertIs(final SQLCaseAssertContext assertContext, 
final SQLServerDenyUserStatement actual, final DenyUserStatementTestCase 
expected) {
+    public static void assertIs(final SQLCaseAssertContext assertContext, 
final DenyUserStatement actual, final DenyUserStatementTestCase expected) {
         assertTable(assertContext, actual, expected);
         assertColumns(assertContext, actual, expected);
     }
     
-    private static void assertTable(final SQLCaseAssertContext assertContext, 
final SQLServerDenyUserStatement actual, final DenyUserStatementTestCase 
expected) {
+    private static void assertTable(final SQLCaseAssertContext assertContext, 
final DenyUserStatement actual, final DenyUserStatementTestCase expected) {
         if (null == expected.getTable()) {
             assertNull(actual.getTable(), assertContext.getText("Actual table 
segment should not exist."));
         } else {
@@ -56,7 +56,7 @@ public final class DenyUserStatementAssert {
         }
     }
     
-    private static void assertColumns(final SQLCaseAssertContext 
assertContext, final SQLServerDenyUserStatement actual, final 
DenyUserStatementTestCase expected) {
+    private static void assertColumns(final SQLCaseAssertContext 
assertContext, final DenyUserStatement actual, final DenyUserStatementTestCase 
expected) {
         if (expected.getColumns().isEmpty()) {
             assertTrue(actual.getColumns().isEmpty(), 
assertContext.getText("Actual columns segments should not exist."));
         } else {
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dcl/impl/DropLoginStatementAssert.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dcl/impl/DropLoginStatementAssert.java
index 82e47c90250..fccfc03fc1c 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dcl/impl/DropLoginStatementAssert.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dcl/impl/DropLoginStatementAssert.java
@@ -19,15 +19,15 @@ package 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.dcl.SQLServerDropLoginStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.DropLoginStatement;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.SQLSegmentAssert;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dcl.DropLoginStatementTestCase;
 
 import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertNull;
-import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * Drop login statement assert.
@@ -42,7 +42,7 @@ public final class DropLoginStatementAssert {
      * @param actual actual drop login statement
      * @param expected expected drop login statement test case
      */
-    public static void assertIs(final SQLCaseAssertContext assertContext, 
final SQLServerDropLoginStatement actual, final DropLoginStatementTestCase 
expected) {
+    public static void assertIs(final SQLCaseAssertContext assertContext, 
final DropLoginStatement actual, final DropLoginStatementTestCase expected) {
         if (null == expected.getLogin()) {
             assertNull(actual.getLoginSegment(), assertContext.getText("Actual 
login should not exist."));
         } else {
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dcl/impl/RenameUserStatementAssert.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dcl/impl/RenameUserStatementAssert.java
index 2f9b5b57537..1837e972583 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dcl/impl/RenameUserStatementAssert.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dcl/impl/RenameUserStatementAssert.java
@@ -19,7 +19,7 @@ package 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dcl.MySQLRenameUserStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.RenameUserStatement;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dcl.RenameUserStatementTestCase;
 
@@ -36,6 +36,6 @@ public final class RenameUserStatementAssert {
      * @param actual actual rename user statement
      * @param expected expected rename user statement test case
      */
-    public static void assertIs(final SQLCaseAssertContext assertContext, 
final MySQLRenameUserStatement actual, final RenameUserStatementTestCase 
expected) {
+    public static void assertIs(final SQLCaseAssertContext assertContext, 
final RenameUserStatement actual, final RenameUserStatementTestCase expected) {
     }
 }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dcl/impl/SetDefaultRoleStatementAssert.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dcl/impl/SetDefaultRoleStatementAssert.java
index 4ed0233bcda..32bbe17147d 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dcl/impl/SetDefaultRoleStatementAssert.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dcl/impl/SetDefaultRoleStatementAssert.java
@@ -19,7 +19,7 @@ package 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dcl.MySQLSetDefaultRoleStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.SetDefaultRoleStatement;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dcl.SetDefaultRoleStatementTestCase;
 
@@ -36,6 +36,6 @@ public final class SetDefaultRoleStatementAssert {
      * @param actual actual set role statement
      * @param expected expected set role statement test case
      */
-    public static void assertIs(final SQLCaseAssertContext assertContext, 
final MySQLSetDefaultRoleStatement actual, final 
SetDefaultRoleStatementTestCase expected) {
+    public static void assertIs(final SQLCaseAssertContext assertContext, 
final SetDefaultRoleStatement actual, final SetDefaultRoleStatementTestCase 
expected) {
     }
 }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dcl/impl/SetPasswordStatementAssert.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dcl/impl/SetPasswordStatementAssert.java
index e706a8354cb..c519874b51e 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dcl/impl/SetPasswordStatementAssert.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dcl/impl/SetPasswordStatementAssert.java
@@ -19,7 +19,7 @@ package 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dcl.MySQLSetPasswordStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.SetPasswordStatement;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dcl.SetPasswordStatementTestCase;
 
@@ -36,6 +36,6 @@ public final class SetPasswordStatementAssert {
      * @param actual actual set password statement
      * @param expected expected set password statement test case
      */
-    public static void assertIs(final SQLCaseAssertContext assertContext, 
final MySQLSetPasswordStatement actual, final SetPasswordStatementTestCase 
expected) {
+    public static void assertIs(final SQLCaseAssertContext assertContext, 
final SetPasswordStatement actual, final SetPasswordStatementTestCase expected) 
{
     }
 }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dcl/impl/sqlserver/SQLServerSetUserStatementAssert.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dcl/impl/sqlserver/SQLServerSetUserStatementAssert.java
index 46850ef4262..f10098a881f 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dcl/impl/sqlserver/SQLServerSetUserStatementAssert.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/dcl/impl/sqlserver/SQLServerSetUserStatementAssert.java
@@ -19,7 +19,7 @@ package 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.statement.
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.dcl.SQLServerSetUserStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.SetUserStatement;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.SQLCaseAssertContext;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.SQLSegmentAssert;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.dcl.SetUserStatementTestCase;
@@ -40,7 +40,7 @@ public final class SQLServerSetUserStatementAssert {
      * @param actual actual SQLServer set user statement
      * @param expected expected set user statement test case
      */
-    public static void assertIs(final SQLCaseAssertContext assertContext, 
final SQLServerSetUserStatement actual, final SetUserStatementTestCase 
expected) {
+    public static void assertIs(final SQLCaseAssertContext assertContext, 
final SetUserStatement actual, final SetUserStatementTestCase expected) {
         if (null != expected.getUser()) {
             assertThat(assertContext.getText("Actual user name does not match: 
"), actual.getUser().getUser(), is(expected.getUser().getName()));
             SQLSegmentAssert.assertIs(assertContext, actual.getUser(), 
expected.getUser());

Reply via email to