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

duanzhengqiang 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 1d2d71d  Refactor MySQL show procedure status SQL parser. (#13729)
1d2d71d is described below

commit 1d2d71d36d0bcc9c56620732fc14742611a8554d
Author: Zonglei Dong <[email protected]>
AuthorDate: Mon Nov 22 13:32:15 2021 +0800

    Refactor MySQL show procedure status SQL parser. (#13729)
    
    * add ShowFilterSegment, refactor MySQL show procedure status SQL parser.
    
    * add ShowFilterSegment test case, refactor MySQL show procedure status SQL 
parser.
---
 .../impl/MySQLDALStatementSQLVisitor.java          |  8 +---
 .../dal/MySQLShowProcedureStatusStatement.java     | 24 +++---------
 .../impl/ShowProcedureStatusStatementAssert.java   |  4 ++
 .../dal/ShowProcedureStatusStatementTestCase.java  |  4 +-
 .../src/main/resources/case/dal/show.xml           | 43 ++++++++++++++++++++++
 .../src/main/resources/sql/supported/dal/show.xml  |  3 ++
 6 files changed, 60 insertions(+), 26 deletions(-)

diff --git 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLDALStatementSQLVisitor.java
 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLDALStatementSQLVisitor.java
index 00794c1..0eb66c5 100644
--- 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLDALStatementSQLVisitor.java
+++ 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLDALStatementSQLVisitor.java
@@ -711,13 +711,9 @@ public final class MySQLDALStatementSQLVisitor extends 
MySQLStatementSQLVisitor
     public ASTNode visitShowProcedureStatus(final ShowProcedureStatusContext 
ctx) {
         MySQLShowProcedureStatusStatement result = new 
MySQLShowProcedureStatusStatement();
         if (null != ctx.showFilter()) {
-            if (null != ctx.showFilter().showLike()) {
-                result.setLike((ShowLikeSegment) 
visit(ctx.showFilter().showLike()));
-            }
-            if (null != ctx.showFilter().showWhereClause()) {
-                result.setWhere((WhereSegment) 
visit(ctx.showFilter().showWhereClause()));
-            }
+            result.setFilter((ShowFilterSegment) visit(ctx.showFilter()));
         }
+        result.setParameterCount(getCurrentParameterIndex());
         return result;
     }
 
diff --git 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/dal/MySQLShowProcedureStatusStatement.java
 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/dal/MySQLShowProcedureStatusStatement.java
index 2503768..3dda2db 100644
--- 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/dal/MySQLShowProcedureStatusStatement.java
+++ 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/dal/MySQLShowProcedureStatusStatement.java
@@ -19,8 +19,7 @@ package 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal;
 
 import lombok.Setter;
 import lombok.ToString;
-import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dal.ShowLikeSegment;
-import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.WhereSegment;
+import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dal.ShowFilterSegment;
 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.dialect.statement.mysql.MySQLStatement;
@@ -34,25 +33,14 @@ import java.util.Optional;
 @ToString
 public final class MySQLShowProcedureStatusStatement extends 
AbstractSQLStatement implements DALStatement, MySQLStatement {
     
-    private ShowLikeSegment like;
-    
-    private WhereSegment where;
-    
-    /**
-     * Get like segment.
-     *
-     * @return like segment
-     */
-    public Optional<ShowLikeSegment> getLike() {
-        return Optional.ofNullable(like);
-    }
+    private ShowFilterSegment filter;
     
     /**
-     * Get where segment.
+     * Get filter segment.
      *
-     * @return where segment
+     * @return filter segment
      */
-    public Optional<WhereSegment> getWhere() {
-        return Optional.ofNullable(where);
+    public Optional<ShowFilterSegment> getFilter() {
+        return Optional.ofNullable(filter);
     }
 }
diff --git 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/dal/impl/ShowProcedureStatusStatementAssert.java
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/dal/impl/ShowProcedureStatusStatementAssert.java
index b4f0485..e4e9dce 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/dal/impl/ShowProcedureStatusStatementAssert.java
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/dal/impl/ShowProcedureStatusStatementAssert.java
@@ -21,6 +21,7 @@ import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLShowProcedureStatusStatement;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.SQLCaseAssertContext;
+import 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.show.ShowFilterAssert;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.dal.ShowProcedureStatusStatementTestCase;
 
 /**
@@ -37,5 +38,8 @@ public final class ShowProcedureStatusStatementAssert {
      * @param expected expected show procedure status statement test case
      */
     public static void assertIs(final SQLCaseAssertContext assertContext, 
final MySQLShowProcedureStatusStatement actual, final 
ShowProcedureStatusStatementTestCase expected) {
+        if (actual.getFilter().isPresent()) {
+            ShowFilterAssert.assertIs(assertContext, actual.getFilter().get(), 
expected.getFilter());
+        }
     }
 }
diff --git 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/dal/ShowProcedureStatusStatementTestCase.java
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/dal/ShowProcedureStatusStatementTestCase.java
index 5b9bbd9..47f72f9 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/dal/ShowProcedureStatusStatementTestCase.java
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/dal/ShowProcedureStatusStatementTestCase.java
@@ -19,7 +19,7 @@ package 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domai
 
 import lombok.Getter;
 import lombok.Setter;
-import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.where.ExpectedWhereClause;
+import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.show.ExpectedShowFilter;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.SQLParserTestCase;
 
 import javax.xml.bind.annotation.XmlElement;
@@ -32,5 +32,5 @@ import javax.xml.bind.annotation.XmlElement;
 public final class ShowProcedureStatusStatementTestCase extends 
SQLParserTestCase {
     
     @XmlElement
-    private ExpectedWhereClause where;
+    private ExpectedShowFilter filter;
 }
diff --git 
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dal/show.xml
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dal/show.xml
index 94fac34..3fe20a2 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dal/show.xml
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dal/show.xml
@@ -165,6 +165,49 @@
 
     <show-function-status sql-case-id="show_function_status" />
     <show-procedure-status sql-case-id="show_procedure_status" />
+    <show-procedure-status sql-case-id="show_procedure_status_with_like">
+        <filter start-index="22" stop-index="38">
+            <like pattern="procedure%" start-index="22" stop-index="38" 
start-delimiter="'" end-delimiter="'" />
+        </filter>
+    </show-procedure-status>
+
+    <show-procedure-status sql-case-id="show_procedure_status_with_where_expr" 
parameters="'procedure1'">
+        <filter start-index="22" stop-index="35" literal-stop-index="46">
+            <where start-index="22" stop-index="35" literal-stop-index="46">
+                <expr>
+                    <binary-operation-expression start-index="28" 
stop-index="35" literal-stop-index="46">
+                        <left>
+                            <column name="name" start-index="28" 
stop-index="31" />
+                        </left>
+                        <operator>=</operator>
+                        <right>
+                            <literal-expression value="procedure1" 
start-index="35" stop-index="46" />
+                            <parameter-marker-expression value="0" 
start-index="35" stop-index="35" />
+                        </right>
+                    </binary-operation-expression>
+                </expr>
+            </where>
+        </filter>
+    </show-procedure-status>
+
+    <show-procedure-status 
sql-case-id="show_procedure_status_with_where_expr_no_parameter">
+        <filter start-index="22" stop-index="42" literal-stop-index="46">
+            <where start-index="22" stop-index="42" literal-stop-index="46">
+                <expr>
+                    <binary-operation-expression start-index="28" 
stop-index="42" literal-stop-index="46">
+                        <left>
+                            <column name="name" start-index="28" 
stop-index="31" />
+                        </left>
+                        <operator>=</operator>
+                        <right>
+                            <literal-expression value="procedure1" 
start-index="35" stop-index="46" />
+                        </right>
+                    </binary-operation-expression>
+                </expr>
+            </where>
+        </filter>
+    </show-procedure-status>
+
     <show-replicas sql-case-id="show_replicas" />
     <show-procedure-code sql-case-id="show_procedure_code_func">
         <function function-name="TEST_FUNC" start-index="20" stop-index="28" 
text="TEST_FUNC" />
diff --git 
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/dal/show.xml
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/dal/show.xml
index f3b9ede..f2035e1 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/dal/show.xml
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/dal/show.xml
@@ -44,6 +44,9 @@
     <sql-case id="show_databases_with_where_expr_no_parameter" value="SHOW 
DATABASES where `database` = 'sharding_db'" db-types="MySQL" />
     <sql-case id="show_function_status" value="SHOW FUNCTION STATUS" 
db-types="MySQL" />
     <sql-case id="show_procedure_status" value="SHOW PROCEDURE STATUS" 
db-types="MySQL" />
+    <sql-case id="show_procedure_status_with_like" value="SHOW PROCEDURE 
STATUS like 'procedure%'" db-types="MySQL" />
+    <sql-case id="show_procedure_status_with_where_expr" value="SHOW PROCEDURE 
STATUS where name = ?" db-types="MySQL" />
+    <sql-case id="show_procedure_status_with_where_expr_no_parameter" 
value="SHOW PROCEDURE STATUS where name = 'procedure1'" db-types="MySQL" />
     <sql-case id="show_replicas" value="SHOW REPLICAS" db-types="MySQL" />
     <sql-case id="show_procedure_code_func" value="SHOW PROCEDURE CODE 
TEST_FUNC" db-types="MySQL" />
     <sql-case id="show_procedure_code_owner_func" value="SHOW PROCEDURE CODE 
TEST_USER.TEST_FUNC" db-types="MySQL" />

Reply via email to