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 457852ecbf0 Add RULStatement and RULBackendHandler. (#19504)
457852ecbf0 is described below

commit 457852ecbf0927cec6c9d62e16f8b3b3089a2439
Author: Raigor <[email protected]>
AuthorDate: Sun Jul 24 21:44:38 2022 +0800

    Add RULStatement and RULBackendHandler. (#19504)
---
 .../utility/UtilityDistSQLStatementVisitor.java    |  8 +--
 .../distsql/parser/statement/rul/RULStatement.java |  8 +--
 .../SQLRULStatement.java}                          |  9 ++-
 .../{ral/advanced => rul/sql}/FormatStatement.java | 12 ++--
 .../{ral/advanced => rul/sql}/ParseStatement.java  | 12 ++--
 .../advanced => rul/sql}/PreviewStatement.java     | 12 ++--
 .../text/distsql/DistSQLBackendHandlerFactory.java |  5 ++
 .../text/distsql/ral/RALBackendHandlerFactory.java |  9 ---
 .../text/distsql/rul/RULBackendHandler.java        | 45 ++++++++++++
 .../text/distsql/rul/RULBackendHandlerFactory.java | 79 +++++++++++++++++++++
 .../text/distsql/rul/SQLRULBackendHandler.java     | 82 ++++++++++++++++++++++
 .../advanced => rul/sql}/FormatSQLHandler.java     |  8 +--
 .../advanced => rul/sql}/ParseDistSQLHandler.java  |  8 +--
 .../{ral/advanced => rul/sql}/PreviewHandler.java  |  8 +--
 .../ral/advance/ParseDistSQLHandlerTest.java       |  4 +-
 .../statement/distsql/DistSQLStatementAssert.java  |  4 ++
 .../ral/impl/QueryableRALStatementAssert.java      | 10 ---
 .../RULStatementAssert.java}                       | 32 ++++-----
 .../impl/SQLRULStatementAssert.java}               | 38 +++++-----
 .../impl/sql}/ParseStatementAssert.java            |  6 +-
 .../impl/sql}/PreviewStatementAssert.java          |  9 ++-
 .../jaxb/cases/domain/SQLParserTestCases.java      |  4 +-
 .../{ral => rul}/ParseStatementTestCase.java       |  2 +-
 .../{ral => rul}/PreviewStatementTestCase.java     | 11 ++-
 .../case/{ral/advance.xml => rul/sql.xml}          |  2 +-
 25 files changed, 316 insertions(+), 111 deletions(-)

diff --git 
a/shardingsphere-distsql/shardingsphere-distsql-parser/src/main/java/org/apache/shardingsphere/distsql/parser/core/utility/UtilityDistSQLStatementVisitor.java
 
b/shardingsphere-distsql/shardingsphere-distsql-parser/src/main/java/org/apache/shardingsphere/distsql/parser/core/utility/UtilityDistSQLStatementVisitor.java
index 13d73de72f6..f37e8fd3700 100644
--- 
a/shardingsphere-distsql/shardingsphere-distsql-parser/src/main/java/org/apache/shardingsphere/distsql/parser/core/utility/UtilityDistSQLStatementVisitor.java
+++ 
b/shardingsphere-distsql/shardingsphere-distsql-parser/src/main/java/org/apache/shardingsphere/distsql/parser/core/utility/UtilityDistSQLStatementVisitor.java
@@ -21,14 +21,14 @@ import 
org.apache.shardingsphere.distsql.parser.autogen.UtilityDistSQLStatementB
 import 
org.apache.shardingsphere.distsql.parser.autogen.UtilityDistSQLStatementParser.FormatSQLContext;
 import 
org.apache.shardingsphere.distsql.parser.autogen.UtilityDistSQLStatementParser.ParseSQLContext;
 import 
org.apache.shardingsphere.distsql.parser.autogen.UtilityDistSQLStatementParser.PreviewSQLContext;
-import 
org.apache.shardingsphere.distsql.parser.statement.ral.advanced.FormatStatement;
-import 
org.apache.shardingsphere.distsql.parser.statement.ral.advanced.ParseStatement;
-import 
org.apache.shardingsphere.distsql.parser.statement.ral.advanced.PreviewStatement;
+import 
org.apache.shardingsphere.distsql.parser.statement.rul.sql.FormatStatement;
+import 
org.apache.shardingsphere.distsql.parser.statement.rul.sql.ParseStatement;
+import 
org.apache.shardingsphere.distsql.parser.statement.rul.sql.PreviewStatement;
 import org.apache.shardingsphere.sql.parser.api.visitor.ASTNode;
 import org.apache.shardingsphere.sql.parser.api.visitor.SQLVisitor;
 
 /**
- * SQL statement visitor for utility dist SQL.
+ * SQL statement visitor for utility Dist SQL.
  */
 public final class UtilityDistSQLStatementVisitor extends 
UtilityDistSQLStatementBaseVisitor<ASTNode> implements SQLVisitor {
     
diff --git 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/ral/PreviewStatementTestCase.java
 
b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rul/RULStatement.java
similarity index 71%
copy from 
shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/ral/PreviewStatementTestCase.java
copy to 
shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rul/RULStatement.java
index 50bf6187fd5..9082354c3b1 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/ral/PreviewStatementTestCase.java
+++ 
b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rul/RULStatement.java
@@ -15,12 +15,12 @@
  * limitations under the License.
  */
 
-package 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.ral;
+package org.apache.shardingsphere.distsql.parser.statement.rul;
 
-import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.SQLParserTestCase;
+import org.apache.shardingsphere.distsql.parser.statement.DistSQLStatement;
 
 /**
- * Preview statement test case.
+ * RUL statement.
  */
-public final class PreviewStatementTestCase extends SQLParserTestCase {
+public abstract class RULStatement extends DistSQLStatement {
 }
diff --git 
a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/ral/advanced/ParseStatement.java
 
b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rul/SQLRULStatement.java
similarity index 79%
copy from 
shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/ral/advanced/ParseStatement.java
copy to 
shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rul/SQLRULStatement.java
index 1d6f45b1b0d..3408c794caf 100644
--- 
a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/ral/advanced/ParseStatement.java
+++ 
b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rul/SQLRULStatement.java
@@ -15,18 +15,17 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.distsql.parser.statement.ral.advanced;
+package org.apache.shardingsphere.distsql.parser.statement.rul;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
-import 
org.apache.shardingsphere.distsql.parser.statement.ral.QueryableRALStatement;
 
 /**
- * Parse statement.
+ * SQL RUL statement.
  */
-@RequiredArgsConstructor
 @Getter
-public final class ParseStatement extends QueryableRALStatement {
+@RequiredArgsConstructor
+public abstract class SQLRULStatement extends RULStatement {
     
     private final String sql;
 }
diff --git 
a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/ral/advanced/FormatStatement.java
 
b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rul/sql/FormatStatement.java
similarity index 73%
rename from 
shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/ral/advanced/FormatStatement.java
rename to 
shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rul/sql/FormatStatement.java
index a68a66012b3..292eeaaa02c 100644
--- 
a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/ral/advanced/FormatStatement.java
+++ 
b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rul/sql/FormatStatement.java
@@ -15,18 +15,18 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.distsql.parser.statement.ral.advanced;
+package org.apache.shardingsphere.distsql.parser.statement.rul.sql;
 
 import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import 
org.apache.shardingsphere.distsql.parser.statement.ral.QueryableRALStatement;
+import org.apache.shardingsphere.distsql.parser.statement.rul.SQLRULStatement;
 
 /**
  * Format statement.
  */
-@RequiredArgsConstructor
 @Getter
-public final class FormatStatement extends QueryableRALStatement {
+public final class FormatStatement extends SQLRULStatement {
     
-    private final String sql;
+    public FormatStatement(final String sql) {
+        super(sql);
+    }
 }
diff --git 
a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/ral/advanced/ParseStatement.java
 
b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rul/sql/ParseStatement.java
similarity index 73%
rename from 
shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/ral/advanced/ParseStatement.java
rename to 
shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rul/sql/ParseStatement.java
index 1d6f45b1b0d..ec14a135f01 100644
--- 
a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/ral/advanced/ParseStatement.java
+++ 
b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rul/sql/ParseStatement.java
@@ -15,18 +15,18 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.distsql.parser.statement.ral.advanced;
+package org.apache.shardingsphere.distsql.parser.statement.rul.sql;
 
 import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import 
org.apache.shardingsphere.distsql.parser.statement.ral.QueryableRALStatement;
+import org.apache.shardingsphere.distsql.parser.statement.rul.SQLRULStatement;
 
 /**
  * Parse statement.
  */
-@RequiredArgsConstructor
 @Getter
-public final class ParseStatement extends QueryableRALStatement {
+public final class ParseStatement extends SQLRULStatement {
     
-    private final String sql;
+    public ParseStatement(final String sql) {
+        super(sql);
+    }
 }
diff --git 
a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/ral/advanced/PreviewStatement.java
 
b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rul/sql/PreviewStatement.java
similarity index 73%
rename from 
shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/ral/advanced/PreviewStatement.java
rename to 
shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rul/sql/PreviewStatement.java
index 79d3e7ee8d5..886f0f681a7 100644
--- 
a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/ral/advanced/PreviewStatement.java
+++ 
b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rul/sql/PreviewStatement.java
@@ -15,18 +15,18 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.distsql.parser.statement.ral.advanced;
+package org.apache.shardingsphere.distsql.parser.statement.rul.sql;
 
 import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import 
org.apache.shardingsphere.distsql.parser.statement.ral.QueryableRALStatement;
+import org.apache.shardingsphere.distsql.parser.statement.rul.SQLRULStatement;
 
 /**
  * Preview statement.
  */
-@RequiredArgsConstructor
 @Getter
-public final class PreviewStatement extends QueryableRALStatement {
+public final class PreviewStatement extends SQLRULStatement {
     
-    private final String sql;
+    public PreviewStatement(final String sql) {
+        super(sql);
+    }
 }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/DistSQLBackendHandlerFactory.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/DistSQLBackendHandlerFactory.java
index 3eab778d257..f01cb9b6444 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/DistSQLBackendHandlerFactory.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/DistSQLBackendHandlerFactory.java
@@ -24,6 +24,7 @@ import 
org.apache.shardingsphere.distsql.parser.statement.ral.RALStatement;
 import 
org.apache.shardingsphere.distsql.parser.statement.ral.UpdatableRALStatement;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.RDLStatement;
 import org.apache.shardingsphere.distsql.parser.statement.rql.RQLStatement;
+import org.apache.shardingsphere.distsql.parser.statement.rul.RULStatement;
 import org.apache.shardingsphere.infra.lock.LockContext;
 import 
org.apache.shardingsphere.mode.manager.lock.definition.LockDefinitionFactory;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
@@ -33,6 +34,7 @@ import 
org.apache.shardingsphere.proxy.backend.text.TextProtocolBackendHandler;
 import 
org.apache.shardingsphere.proxy.backend.text.distsql.ral.RALBackendHandlerFactory;
 import 
org.apache.shardingsphere.proxy.backend.text.distsql.rdl.RDLBackendHandlerFactory;
 import 
org.apache.shardingsphere.proxy.backend.text.distsql.rql.RQLBackendHandlerFactory;
+import 
org.apache.shardingsphere.proxy.backend.text.distsql.rul.RULBackendHandlerFactory;
 
 import java.sql.SQLException;
 
@@ -64,6 +66,9 @@ public final class DistSQLBackendHandlerFactory {
             }
             return RALBackendHandlerFactory.newInstance((RALStatement) 
sqlStatement, connectionSession);
         }
+        if (sqlStatement instanceof RULStatement) {
+            return RULBackendHandlerFactory.newInstance((RULStatement) 
sqlStatement, connectionSession);
+        }
         throw new 
UnsupportedOperationException(sqlStatement.getClass().getCanonicalName());
     }
     
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/RALBackendHandlerFactory.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/RALBackendHandlerFactory.java
index 7e12850f340..896c9a6289f 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/RALBackendHandlerFactory.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/RALBackendHandlerFactory.java
@@ -21,9 +21,6 @@ import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import org.apache.shardingsphere.distsql.parser.statement.ral.HintRALStatement;
 import org.apache.shardingsphere.distsql.parser.statement.ral.RALStatement;
-import 
org.apache.shardingsphere.distsql.parser.statement.ral.advanced.FormatStatement;
-import 
org.apache.shardingsphere.distsql.parser.statement.ral.advanced.ParseStatement;
-import 
org.apache.shardingsphere.distsql.parser.statement.ral.advanced.PreviewStatement;
 import 
org.apache.shardingsphere.distsql.parser.statement.ral.queryable.ConvertYamlConfigurationStatement;
 import 
org.apache.shardingsphere.distsql.parser.statement.ral.queryable.ExportDatabaseConfigurationStatement;
 import 
org.apache.shardingsphere.distsql.parser.statement.ral.queryable.ShowAllVariableStatement;
@@ -54,9 +51,6 @@ import 
org.apache.shardingsphere.distsql.parser.statement.ral.updatable.SetVaria
 import 
org.apache.shardingsphere.distsql.parser.statement.ral.updatable.UnlabelInstanceStatement;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import org.apache.shardingsphere.proxy.backend.text.TextProtocolBackendHandler;
-import 
org.apache.shardingsphere.proxy.backend.text.distsql.ral.advanced.FormatSQLHandler;
-import 
org.apache.shardingsphere.proxy.backend.text.distsql.ral.advanced.ParseDistSQLHandler;
-import 
org.apache.shardingsphere.proxy.backend.text.distsql.ral.advanced.PreviewHandler;
 import 
org.apache.shardingsphere.proxy.backend.text.distsql.ral.hint.HintRALBackendHandler;
 import 
org.apache.shardingsphere.proxy.backend.text.distsql.ral.queryable.ConvertYamlConfigurationHandler;
 import 
org.apache.shardingsphere.proxy.backend.text.distsql.ral.queryable.ExportDatabaseConfigurationHandler;
@@ -132,9 +126,6 @@ public final class RALBackendHandlerFactory {
         HANDLERS.put(ShowTransactionRuleStatement.class, 
ShowTransactionRuleHandler.class);
         HANDLERS.put(ExportDatabaseConfigurationStatement.class, 
ExportDatabaseConfigurationHandler.class);
         HANDLERS.put(ConvertYamlConfigurationStatement.class, 
ConvertYamlConfigurationHandler.class);
-        HANDLERS.put(ParseStatement.class, ParseDistSQLHandler.class);
-        HANDLERS.put(PreviewStatement.class, PreviewHandler.class);
-        HANDLERS.put(FormatStatement.class, FormatSQLHandler.class);
         HANDLERS.put(ShowSQLTranslatorRuleStatement.class, 
ShowSQLTranslatorRuleHandler.class);
     }
     
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rul/RULBackendHandler.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rul/RULBackendHandler.java
new file mode 100644
index 00000000000..3cc3d254304
--- /dev/null
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rul/RULBackendHandler.java
@@ -0,0 +1,45 @@
+/*
+ * 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.proxy.backend.text.distsql.rul;
+
+import lombok.Getter;
+import org.apache.shardingsphere.distsql.parser.statement.rul.RULStatement;
+import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
+import org.apache.shardingsphere.proxy.backend.text.TextProtocolBackendHandler;
+
+/**
+ * RUL backend handler.
+ */
+@Getter
+public abstract class RULBackendHandler<E extends RULStatement> implements 
TextProtocolBackendHandler {
+    
+    private E sqlStatement;
+    
+    private ConnectionSession connectionSession;
+    
+    /**
+     * Initialize.
+     *
+     * @param sqlStatement SQL statement
+     * @param connectionSession connection session
+     */
+    public final void init(final RULStatement sqlStatement, final 
ConnectionSession connectionSession) {
+        this.sqlStatement = (E) sqlStatement;
+        this.connectionSession = connectionSession;
+    }
+}
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rul/RULBackendHandlerFactory.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rul/RULBackendHandlerFactory.java
new file mode 100644
index 00000000000..93a5331e740
--- /dev/null
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rul/RULBackendHandlerFactory.java
@@ -0,0 +1,79 @@
+/*
+ * 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.proxy.backend.text.distsql.rul;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.statement.rul.RULStatement;
+import 
org.apache.shardingsphere.distsql.parser.statement.rul.sql.FormatStatement;
+import 
org.apache.shardingsphere.distsql.parser.statement.rul.sql.ParseStatement;
+import 
org.apache.shardingsphere.distsql.parser.statement.rul.sql.PreviewStatement;
+import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
+import org.apache.shardingsphere.proxy.backend.text.TextProtocolBackendHandler;
+import 
org.apache.shardingsphere.proxy.backend.text.distsql.rul.sql.FormatSQLHandler;
+import 
org.apache.shardingsphere.proxy.backend.text.distsql.rul.sql.ParseDistSQLHandler;
+import 
org.apache.shardingsphere.proxy.backend.text.distsql.rul.sql.PreviewHandler;
+
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * RUL backend handler factory.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class RULBackendHandlerFactory {
+    
+    private static final Map<Class<? extends RULStatement>, Class<? extends 
RULBackendHandler<?>>> HANDLERS = new HashMap<>();
+    
+    static {
+        HANDLERS.put(ParseStatement.class, ParseDistSQLHandler.class);
+        HANDLERS.put(PreviewStatement.class, PreviewHandler.class);
+        HANDLERS.put(FormatStatement.class, FormatSQLHandler.class);
+    }
+    
+    /**
+     * Create new instance of RUL backend handler.
+     *
+     * @param sqlStatement RUL statement
+     * @param connectionSession connection session
+     * @return created instance
+     * @throws SQLException SQL exception
+     */
+    public static TextProtocolBackendHandler newInstance(final RULStatement 
sqlStatement, final ConnectionSession connectionSession) throws SQLException {
+        return createRULBackendHandler(sqlStatement, connectionSession);
+    }
+    
+    private static RULBackendHandler<?> newInstance(final Class<? extends 
RULBackendHandler<?>> clazz) {
+        try {
+            return clazz.getDeclaredConstructor().newInstance();
+        } catch (final ReflectiveOperationException ex) {
+            throw new UnsupportedOperationException(String.format("Can not 
find public constructor for class `%s`", clazz.getName()));
+        }
+    }
+    
+    private static RULBackendHandler<?> createRULBackendHandler(final 
RULStatement sqlStatement, final ConnectionSession connectionSession) {
+        Class<? extends RULBackendHandler<?>> clazz = 
HANDLERS.get(sqlStatement.getClass());
+        if (null == clazz) {
+            throw new UnsupportedOperationException(String.format("Unsupported 
SQL statement : %s", sqlStatement.getClass().getCanonicalName()));
+        }
+        RULBackendHandler<?> result = newInstance(clazz);
+        result.init(sqlStatement, connectionSession);
+        return result;
+    }
+}
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rul/SQLRULBackendHandler.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rul/SQLRULBackendHandler.java
new file mode 100644
index 00000000000..9a1dd2ef55f
--- /dev/null
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rul/SQLRULBackendHandler.java
@@ -0,0 +1,82 @@
+/*
+ * 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.proxy.backend.text.distsql.rul;
+
+import org.apache.shardingsphere.distsql.parser.statement.rul.RULStatement;
+import org.apache.shardingsphere.infra.merge.result.MergedResult;
+import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataMergedResult;
+import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
+import org.apache.shardingsphere.mode.manager.ContextManager;
+import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
+import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseCell;
+import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseRow;
+import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
+import 
org.apache.shardingsphere.proxy.backend.response.header.query.QueryHeader;
+import 
org.apache.shardingsphere.proxy.backend.response.header.query.QueryResponseHeader;
+
+import java.sql.SQLException;
+import java.sql.Types;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * SQL RUL backend handler.
+ * 
+ * @param <E> type of RUL statement
+ */
+public abstract class SQLRULBackendHandler<E extends RULStatement> extends 
RULBackendHandler<E> {
+    
+    private List<QueryHeader> queryHeaders;
+    
+    private MergedResult mergedResult;
+    
+    @Override
+    public final ResponseHeader execute() throws SQLException {
+        queryHeaders = createQueryHeader();
+        mergedResult = createMergedResult();
+        return new QueryResponseHeader(queryHeaders);
+    }
+    
+    private List<QueryHeader> createQueryHeader() {
+        return getColumnNames().stream().map(each -> new QueryHeader("", "", 
each, each, Types.CHAR, "CHAR", 255, 0, false, false, false, 
false)).collect(Collectors.toList());
+    }
+    
+    private MergedResult createMergedResult() throws SQLException {
+        return new 
LocalDataMergedResult(getRows(ProxyContext.getInstance().getContextManager()));
+    }
+    
+    @Override
+    public final boolean next() throws SQLException {
+        return null != mergedResult && mergedResult.next();
+    }
+    
+    @Override
+    public final QueryResponseRow getRowData() throws SQLException {
+        List<QueryResponseCell> cells = new ArrayList<>(queryHeaders.size());
+        for (int i = 0; i < queryHeaders.size(); i++) {
+            cells.add(new 
QueryResponseCell(queryHeaders.get(i).getColumnType(), mergedResult.getValue(i 
+ 1, Object.class)));
+        }
+        return new QueryResponseRow(cells);
+    }
+    
+    protected abstract Collection<String> getColumnNames();
+    
+    protected abstract Collection<LocalDataQueryResultRow> 
getRows(ContextManager contextManager) throws SQLException;
+}
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advanced/FormatSQLHandler.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rul/sql/FormatSQLHandler.java
similarity index 88%
rename from 
shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advanced/FormatSQLHandler.java
rename to 
shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rul/sql/FormatSQLHandler.java
index 6b732cbf1eb..fd5ee25195a 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advanced/FormatSQLHandler.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rul/sql/FormatSQLHandler.java
@@ -15,12 +15,12 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.proxy.backend.text.distsql.ral.advanced;
+package org.apache.shardingsphere.proxy.backend.text.distsql.rul.sql;
 
-import 
org.apache.shardingsphere.distsql.parser.statement.ral.advanced.FormatStatement;
+import 
org.apache.shardingsphere.distsql.parser.statement.rul.sql.FormatStatement;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
 import org.apache.shardingsphere.mode.manager.ContextManager;
-import 
org.apache.shardingsphere.proxy.backend.text.distsql.ral.QueryableRALBackendHandler;
+import 
org.apache.shardingsphere.proxy.backend.text.distsql.rul.SQLRULBackendHandler;
 import org.apache.shardingsphere.sql.parser.api.CacheOption;
 import org.apache.shardingsphere.sql.parser.api.SQLParserEngine;
 import org.apache.shardingsphere.sql.parser.api.SQLVisitorEngine;
@@ -35,7 +35,7 @@ import java.util.Properties;
 /**
  * Format SQL handler.
  */
-public final class FormatSQLHandler extends 
QueryableRALBackendHandler<FormatStatement> {
+public final class FormatSQLHandler extends 
SQLRULBackendHandler<FormatStatement> {
     
     private static final String FORMATTED_RESULT = "formatted_result";
     
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advanced/ParseDistSQLHandler.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rul/sql/ParseDistSQLHandler.java
similarity index 88%
rename from 
shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advanced/ParseDistSQLHandler.java
rename to 
shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rul/sql/ParseDistSQLHandler.java
index 756255b6674..00dc883c110 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advanced/ParseDistSQLHandler.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rul/sql/ParseDistSQLHandler.java
@@ -15,14 +15,14 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.proxy.backend.text.distsql.ral.advanced;
+package org.apache.shardingsphere.proxy.backend.text.distsql.rul.sql;
 
 import com.google.gson.Gson;
-import 
org.apache.shardingsphere.distsql.parser.statement.ral.advanced.ParseStatement;
+import 
org.apache.shardingsphere.distsql.parser.statement.rul.sql.ParseStatement;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.parser.rule.SQLParserRule;
-import 
org.apache.shardingsphere.proxy.backend.text.distsql.ral.QueryableRALBackendHandler;
+import 
org.apache.shardingsphere.proxy.backend.text.distsql.rul.SQLRULBackendHandler;
 import org.apache.shardingsphere.sql.parser.exception.SQLParsingException;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 
@@ -33,7 +33,7 @@ import java.util.Collections;
 /**
  * Parse Dist SQL handler.
  */
-public final class ParseDistSQLHandler extends 
QueryableRALBackendHandler<ParseStatement> {
+public final class ParseDistSQLHandler extends 
SQLRULBackendHandler<ParseStatement> {
     
     private static final String PARSED_STATEMENT = "parsed_statement";
     
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advanced/PreviewHandler.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rul/sql/PreviewHandler.java
similarity index 97%
rename from 
shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advanced/PreviewHandler.java
rename to 
shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rul/sql/PreviewHandler.java
index 061e75bd322..f510a49f0d1 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advanced/PreviewHandler.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rul/sql/PreviewHandler.java
@@ -15,11 +15,11 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.proxy.backend.text.distsql.ral.advanced;
+package org.apache.shardingsphere.proxy.backend.text.distsql.rul.sql;
 
 import com.google.common.base.Preconditions;
 import com.google.common.base.Strings;
-import 
org.apache.shardingsphere.distsql.parser.statement.ral.advanced.PreviewStatement;
+import 
org.apache.shardingsphere.distsql.parser.statement.rul.sql.PreviewStatement;
 import org.apache.shardingsphere.infra.binder.LogicSQL;
 import org.apache.shardingsphere.infra.binder.SQLStatementContextFactory;
 import org.apache.shardingsphere.infra.binder.aware.CursorDefinitionAware;
@@ -60,7 +60,7 @@ import 
org.apache.shardingsphere.proxy.backend.context.BackendExecutorContext;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import 
org.apache.shardingsphere.proxy.backend.exception.NoDatabaseSelectedException;
 import 
org.apache.shardingsphere.proxy.backend.exception.RuleNotExistedException;
-import 
org.apache.shardingsphere.proxy.backend.text.distsql.ral.QueryableRALBackendHandler;
+import 
org.apache.shardingsphere.proxy.backend.text.distsql.rul.SQLRULBackendHandler;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dml.MySQLInsertStatement;
 
@@ -76,7 +76,7 @@ import java.util.stream.Collectors;
 /**
  * Preview handler.
  */
-public final class PreviewHandler extends 
QueryableRALBackendHandler<PreviewStatement> {
+public final class PreviewHandler extends 
SQLRULBackendHandler<PreviewStatement> {
     
     private static final String DATA_SOURCE_NAME = "data_source_name";
     
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advance/ParseDistSQLHandlerTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advance/ParseDistSQLHandlerTest.java
index 5567ed78f39..f6e9eebfa05 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advance/ParseDistSQLHandlerTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advance/ParseDistSQLHandlerTest.java
@@ -18,7 +18,7 @@
 package org.apache.shardingsphere.proxy.backend.text.distsql.ral.advance;
 
 import com.google.gson.Gson;
-import 
org.apache.shardingsphere.distsql.parser.statement.ral.advanced.ParseStatement;
+import 
org.apache.shardingsphere.distsql.parser.statement.rul.sql.ParseStatement;
 import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
 import 
org.apache.shardingsphere.infra.database.type.dialect.PostgreSQLDatabaseType;
 import 
org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
@@ -27,7 +27,7 @@ import org.apache.shardingsphere.parser.rule.SQLParserRule;
 import 
org.apache.shardingsphere.parser.rule.builder.DefaultSQLParserRuleConfigurationBuilder;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
-import 
org.apache.shardingsphere.proxy.backend.text.distsql.ral.advanced.ParseDistSQLHandler;
+import 
org.apache.shardingsphere.proxy.backend.text.distsql.rul.sql.ParseDistSQLHandler;
 import org.apache.shardingsphere.proxy.backend.util.ProxyContextRestorer;
 import org.apache.shardingsphere.sql.parser.exception.SQLParsingException;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
diff --git 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/DistSQLStatementAssert.java
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/DistSQLStatementAssert.java
index a5ade2d2c3c..9e681a5c2d4 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/DistSQLStatementAssert.java
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/DistSQLStatementAssert.java
@@ -23,10 +23,12 @@ import 
org.apache.shardingsphere.distsql.parser.statement.DistSQLStatement;
 import org.apache.shardingsphere.distsql.parser.statement.ral.RALStatement;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.RDLStatement;
 import org.apache.shardingsphere.distsql.parser.statement.rql.RQLStatement;
+import org.apache.shardingsphere.distsql.parser.statement.rul.RULStatement;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.SQLCaseAssertContext;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.ral.RALStatementAssert;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rdl.RDLStatementAssert;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rql.RQLStatementAssert;
+import 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rul.RULStatementAssert;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.SQLParserTestCase;
 
 /**
@@ -49,6 +51,8 @@ public final class DistSQLStatementAssert {
             RQLStatementAssert.assertIs(assertContext, (RQLStatement) actual, 
expected);
         } else if (actual instanceof RALStatement) {
             RALStatementAssert.assertIs(assertContext, (RALStatement) actual, 
expected);
+        } else if (actual instanceof RULStatement) {
+            RULStatementAssert.assertIs(assertContext, (RULStatement) actual, 
expected);
         }
     }
 }
diff --git 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/ral/impl/QueryableRALStatementAssert.java
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/ral/impl/QueryableRALStatementAssert.java
index e10d8a9f01b..30a1c1a6219 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/ral/impl/QueryableRALStatementAssert.java
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/ral/impl/QueryableRALStatementAssert.java
@@ -20,8 +20,6 @@ package 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statemen
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import 
org.apache.shardingsphere.distsql.parser.statement.ral.QueryableRALStatement;
-import 
org.apache.shardingsphere.distsql.parser.statement.ral.advanced.ParseStatement;
-import 
org.apache.shardingsphere.distsql.parser.statement.ral.advanced.PreviewStatement;
 import 
org.apache.shardingsphere.distsql.parser.statement.ral.queryable.ExportDatabaseConfigurationStatement;
 import 
org.apache.shardingsphere.distsql.parser.statement.ral.queryable.ShowAllVariableStatement;
 import 
org.apache.shardingsphere.distsql.parser.statement.ral.queryable.ShowAuthorityRuleStatement;
@@ -34,8 +32,6 @@ import 
org.apache.shardingsphere.distsql.parser.statement.ral.queryable.ShowTran
 import 
org.apache.shardingsphere.distsql.parser.statement.ral.queryable.ShowVariableStatement;
 import 
org.apache.shardingsphere.readwritesplitting.distsql.parser.statement.ShowReadwriteSplittingReadResourcesStatement;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.SQLCaseAssertContext;
-import 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.ral.impl.advanced.ParseStatementAssert;
-import 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.ral.impl.advanced.PreviewStatementAssert;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.ral.impl.queryable.ExportDatabaseConfigurationStatementAssert;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.ral.impl.queryable.ShowAllVariableStatementAssert;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.ral.impl.queryable.ShowAuthorityRuleStatementAssert;
@@ -49,8 +45,6 @@ import 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.ral.impl.queryable.ShowVariableStatementAssert;
 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.distsql.ral.ExportDatabaseConfigurationStatementTestCase;
-import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.ral.ParseStatementTestCase;
-import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.ral.PreviewStatementTestCase;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.ral.ShowAllVariableStatementTestCase;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.ral.ShowAuthorityRuleStatementTestCase;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.ral.ShowInstanceStatementTestCase;
@@ -97,10 +91,6 @@ public final class QueryableRALStatementAssert {
             ShowSQLParserRuleStatementAssert.assertIs(assertContext, 
(ShowSQLParserRuleStatement) actual, (ShowSQLParserRuleStatementTestCase) 
expected);
         } else if (actual instanceof ExportDatabaseConfigurationStatement) {
             ExportDatabaseConfigurationStatementAssert.assertIs(assertContext, 
(ExportDatabaseConfigurationStatement) actual, 
(ExportDatabaseConfigurationStatementTestCase) expected);
-        } else if (actual instanceof PreviewStatement) {
-            PreviewStatementAssert.assertIs(assertContext, (PreviewStatement) 
actual, (PreviewStatementTestCase) expected);
-        } else if (actual instanceof ParseStatement) {
-            ParseStatementAssert.assertIs(assertContext, (ParseStatement) 
actual, (ParseStatementTestCase) expected);
         } else if (actual instanceof ShowSQLTranslatorRuleStatement) {
             ShowSQLTranslatorRuleStatementAssert.assertIs(assertContext, 
(ShowSQLTranslatorRuleStatement) actual, 
(ShowSQLTranslatorRuleStatementTestCase) expected);
         }
diff --git 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/ral/impl/advanced/PreviewStatementAssert.java
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rul/RULStatementAssert.java
similarity index 56%
copy from 
shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/ral/impl/advanced/PreviewStatementAssert.java
copy to 
shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rul/RULStatementAssert.java
index 89819a4e085..f0b63a6b321 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/ral/impl/advanced/PreviewStatementAssert.java
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rul/RULStatementAssert.java
@@ -15,32 +15,32 @@
  * limitations under the License.
  */
 
-package 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.ral.impl.advanced;
+package 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rul;
 
-import 
org.apache.shardingsphere.distsql.parser.statement.ral.advanced.PreviewStatement;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.statement.rul.RULStatement;
+import org.apache.shardingsphere.distsql.parser.statement.rul.SQLRULStatement;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.SQLCaseAssertContext;
-import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.ral.PreviewStatementTestCase;
-
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
+import 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rul.impl.SQLRULStatementAssert;
+import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.SQLParserTestCase;
 
 /**
- * Preview statement assert.
+ * RUL statement assert.
  */
-public final class PreviewStatementAssert {
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class RULStatementAssert {
     
     /**
-     * Assert preview statement is correct with expected parser result.
+     * Assert RUL statement is correct with expected parser result.
      *
      * @param assertContext assert context
-     * @param actual actual preview statement
-     * @param expected expected preview statement test case
+     * @param actual actual RUL statement
+     * @param expected expected RUL statement test case
      */
-    public static void assertIs(final SQLCaseAssertContext assertContext, 
final PreviewStatement actual, final PreviewStatementTestCase expected) {
-        if (null == expected) {
-            assertNull(assertContext.getText("Actual statement should not 
exist."), actual);
-        } else {
-            assertNotNull(assertContext.getText("Actual statement should 
exist."), actual);
+    public static void assertIs(final SQLCaseAssertContext assertContext, 
final RULStatement actual, final SQLParserTestCase expected) {
+        if (actual instanceof SQLRULStatement) {
+            SQLRULStatementAssert.assertIs(assertContext, (SQLRULStatement) 
actual, expected);
         }
     }
 }
diff --git 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/DistSQLStatementAssert.java
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rul/impl/SQLRULStatementAssert.java
similarity index 52%
copy from 
shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/DistSQLStatementAssert.java
copy to 
shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rul/impl/SQLRULStatementAssert.java
index a5ade2d2c3c..c833560dbb3 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/DistSQLStatementAssert.java
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rul/impl/SQLRULStatementAssert.java
@@ -15,40 +15,38 @@
  * limitations under the License.
  */
 
-package 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql;
+package 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rul.impl;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-import org.apache.shardingsphere.distsql.parser.statement.DistSQLStatement;
-import org.apache.shardingsphere.distsql.parser.statement.ral.RALStatement;
-import org.apache.shardingsphere.distsql.parser.statement.rdl.RDLStatement;
-import org.apache.shardingsphere.distsql.parser.statement.rql.RQLStatement;
+import org.apache.shardingsphere.distsql.parser.statement.rul.SQLRULStatement;
+import 
org.apache.shardingsphere.distsql.parser.statement.rul.sql.ParseStatement;
+import 
org.apache.shardingsphere.distsql.parser.statement.rul.sql.PreviewStatement;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.SQLCaseAssertContext;
-import 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.ral.RALStatementAssert;
-import 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rdl.RDLStatementAssert;
-import 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rql.RQLStatementAssert;
+import 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rul.impl.sql.ParseStatementAssert;
+import 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rul.impl.sql.PreviewStatementAssert;
 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.distsql.rul.ParseStatementTestCase;
+import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rul.PreviewStatementTestCase;
 
 /**
- * DistSQL statement assert.
+ * SQL RUL statement assert.
  */
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class DistSQLStatementAssert {
+public final class SQLRULStatementAssert {
     
     /**
-     * Assert dist sql statement is correct with expected parser result.
+     * Assert SQL RUL statement is correct with expected parser result.
      *
      * @param assertContext assert context
-     * @param actual actual dist sql statement
-     * @param expected expected dist sql statement test case
+     * @param actual actual SQL RUL statement
+     * @param expected expected SQL RUL statement test case
      */
-    public static void assertIs(final SQLCaseAssertContext assertContext, 
final DistSQLStatement actual, final SQLParserTestCase expected) {
-        if (actual instanceof RDLStatement) {
-            RDLStatementAssert.assertIs(assertContext, (RDLStatement) actual, 
expected);
-        } else if (actual instanceof RQLStatement) {
-            RQLStatementAssert.assertIs(assertContext, (RQLStatement) actual, 
expected);
-        } else if (actual instanceof RALStatement) {
-            RALStatementAssert.assertIs(assertContext, (RALStatement) actual, 
expected);
+    public static void assertIs(final SQLCaseAssertContext assertContext, 
final SQLRULStatement actual, final SQLParserTestCase expected) {
+        if (actual instanceof PreviewStatement) {
+            PreviewStatementAssert.assertIs(assertContext, (PreviewStatement) 
actual, (PreviewStatementTestCase) expected);
+        } else if (actual instanceof ParseStatement) {
+            ParseStatementAssert.assertIs(assertContext, (ParseStatement) 
actual, (ParseStatementTestCase) expected);
         }
     }
 }
diff --git 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/ral/impl/advanced/ParseStatementAssert.java
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rul/impl/sql/ParseStatementAssert.java
similarity index 91%
rename from 
shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/ral/impl/advanced/ParseStatementAssert.java
rename to 
shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rul/impl/sql/ParseStatementAssert.java
index 47d53001e6c..85eac1aa752 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/ral/impl/advanced/ParseStatementAssert.java
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rul/impl/sql/ParseStatementAssert.java
@@ -15,11 +15,11 @@
  * limitations under the License.
  */
 
-package 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.ral.impl.advanced;
+package 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rul.impl.sql;
 
-import 
org.apache.shardingsphere.distsql.parser.statement.ral.advanced.ParseStatement;
+import 
org.apache.shardingsphere.distsql.parser.statement.rul.sql.ParseStatement;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.SQLCaseAssertContext;
-import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.ral.ParseStatementTestCase;
+import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rul.ParseStatementTestCase;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertNotNull;
diff --git 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/ral/impl/advanced/PreviewStatementAssert.java
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rul/impl/sql/PreviewStatementAssert.java
similarity index 82%
rename from 
shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/ral/impl/advanced/PreviewStatementAssert.java
rename to 
shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rul/impl/sql/PreviewStatementAssert.java
index 89819a4e085..0631aecddfe 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/ral/impl/advanced/PreviewStatementAssert.java
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rul/impl/sql/PreviewStatementAssert.java
@@ -15,14 +15,16 @@
  * limitations under the License.
  */
 
-package 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.ral.impl.advanced;
+package 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.distsql.rul.impl.sql;
 
-import 
org.apache.shardingsphere.distsql.parser.statement.ral.advanced.PreviewStatement;
+import 
org.apache.shardingsphere.distsql.parser.statement.rul.sql.PreviewStatement;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.SQLCaseAssertContext;
-import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.ral.PreviewStatementTestCase;
+import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rul.PreviewStatementTestCase;
 
+import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThat;
 
 /**
  * Preview statement assert.
@@ -41,6 +43,7 @@ public final class PreviewStatementAssert {
             assertNull(assertContext.getText("Actual statement should not 
exist."), actual);
         } else {
             assertNotNull(assertContext.getText("Actual statement should 
exist."), actual);
+            assertThat(assertContext.getText("SQL assertion error"), 
actual.getSql(), is(expected.getSql()));
         }
     }
 }
diff --git 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/SQLParserTestCases.java
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/SQLParserTestCases.java
index 90310ac6c58..5464dbe5ac3 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/SQLParserTestCases.java
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/SQLParserTestCases.java
@@ -275,9 +275,9 @@ import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.ral.ExportDatabaseConfigurationStatementTestCase;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.ral.ImportDatabaseConfigurationStatementTestCase;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.ral.LabelInstanceStatementTestCase;
-import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.ral.ParseStatementTestCase;
+import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rul.ParseStatementTestCase;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.ral.PrepareDistSQLStatementTestCase;
-import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.ral.PreviewStatementTestCase;
+import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rul.PreviewStatementTestCase;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.ral.RefreshTableMetadataStatementTestCase;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.ral.SetReadwriteSplittingHintStatementTestCase;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.ral.SetShardingHintDatabaseValueStatementTestCase;
diff --git 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/ral/ParseStatementTestCase.java
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rul/ParseStatementTestCase.java
similarity index 96%
rename from 
shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/ral/ParseStatementTestCase.java
rename to 
shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rul/ParseStatementTestCase.java
index 50537fe9fa9..73e7cd69af6 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/ral/ParseStatementTestCase.java
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rul/ParseStatementTestCase.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.ral;
+package 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rul;
 
 import lombok.Getter;
 import lombok.Setter;
diff --git 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/ral/PreviewStatementTestCase.java
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rul/PreviewStatementTestCase.java
similarity index 83%
rename from 
shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/ral/PreviewStatementTestCase.java
rename to 
shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rul/PreviewStatementTestCase.java
index 50bf6187fd5..a7f42e6fe96 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/ral/PreviewStatementTestCase.java
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rul/PreviewStatementTestCase.java
@@ -15,12 +15,21 @@
  * limitations under the License.
  */
 
-package 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.ral;
+package 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rul;
 
+import lombok.Getter;
+import lombok.Setter;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.SQLParserTestCase;
 
+import javax.xml.bind.annotation.XmlAttribute;
+
 /**
  * Preview statement test case.
  */
+@Getter
+@Setter
 public final class PreviewStatementTestCase extends SQLParserTestCase {
+    
+    @XmlAttribute(name = "sql")
+    private String sql;
 }
diff --git 
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/ral/advance.xml
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/rul/sql.xml
similarity index 92%
rename from 
shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/ral/advance.xml
rename to 
shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/rul/sql.xml
index 67a052bf0d1..48e269fe133 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/ral/advance.xml
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/rul/sql.xml
@@ -17,6 +17,6 @@
   -->
 
 <sql-parser-test-cases>
-    <preview-sql sql-case-id="preview-sql" />
+    <preview-sql sql-case-id="preview-sql" sql="SELECT * FROM t_order;"/>
     <parse-sql sql-case-id="parse-sql" sql="SELECT * FROM t_order;" />
 </sql-parser-test-cases>

Reply via email to