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 a0ceb48  fix #14145 (#14149)
a0ceb48 is described below

commit a0ceb48fcdeaecc7853580da0c26aa1c91e3f408
Author: roodkcab <[email protected]>
AuthorDate: Tue Dec 21 09:41:47 2021 +0800

    fix #14145 (#14149)
---
 .../visitor/statement/impl/MySQLTCLStatementSQLVisitor.java  | 12 ++++++++++--
 .../dialect/statement/mysql/tcl/MySQLRollbackStatement.java  |  6 ++++++
 .../asserts/statement/tcl/impl/RollbackStatementAssert.java  |  6 ++++++
 .../asserts/statement/tcl/impl/SavepointStatementAssert.java |  6 ++++++
 .../domain/statement/tcl/RollbackStatementTestCase.java      |  9 +++++++++
 .../domain/statement/tcl/SavepointStatementTestCase.java     |  9 +++++++++
 .../src/main/resources/case/tcl/rollback.xml                 |  2 +-
 .../src/main/resources/case/tcl/savepoint.xml                |  2 +-
 8 files changed, 48 insertions(+), 4 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/MySQLTCLStatementSQLVisitor.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/MySQLTCLStatementSQLVisitor.java
index dbbe17c..6880f1c 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/MySQLTCLStatementSQLVisitor.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/MySQLTCLStatementSQLVisitor.java
@@ -89,12 +89,20 @@ public final class MySQLTCLStatementSQLVisitor extends 
MySQLStatementSQLVisitor
     
     @Override
     public ASTNode visitRollback(final RollbackContext ctx) {
-        return new MySQLRollbackStatement();
+        MySQLRollbackStatement result = new MySQLRollbackStatement();
+        if (ctx.getChildCount() > 1 && "TO".equals(ctx.getChild(1).getText())) 
{
+            String savepointName = ctx.getChild(2).getText();
+            result.setSavepointName(savepointName);
+        }
+        return result;
     }
     
     @Override
     public ASTNode visitSavepoint(final SavepointContext ctx) {
-        return new MySQLSavepointStatement();
+        MySQLSavepointStatement result = new MySQLSavepointStatement();
+        String savepointName = ctx.getChild(1).getText();
+        result.setSavepointName(savepointName);
+        return result;
     }
     
     @Override
diff --git 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/tcl/MySQLRollbackStatement.java
 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/tcl/MySQLRollbackStatement.java
index 6c10ae7..aff3f9f 100644
--- 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/tcl/MySQLRollbackStatement.java
+++ 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/tcl/MySQLRollbackStatement.java
@@ -17,6 +17,8 @@
 
 package org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.tcl;
 
+import lombok.Getter;
+import lombok.Setter;
 import lombok.ToString;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.tcl.RollbackStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.MySQLStatement;
@@ -25,5 +27,9 @@ import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.MySQLSta
  * MySQL rollback statement.
  */
 @ToString
+@Getter
+@Setter
 public final class MySQLRollbackStatement extends RollbackStatement implements 
MySQLStatement {
+
+    private String savepointName;
 }
diff --git 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/tcl/impl/RollbackStatementAssert.java
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/tcl/impl/RollbackStatementAssert.java
index d8a2df5..e178506 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/tcl/impl/RollbackStatementAssert.java
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/tcl/impl/RollbackStatementAssert.java
@@ -20,9 +20,12 @@ package 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statemen
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.tcl.RollbackStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.tcl.MySQLRollbackStatement;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.SQLCaseAssertContext;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.tcl.RollbackStatementTestCase;
 
+import static org.junit.Assert.assertEquals;
+
 /**
  * Rollback statement assert.
  */
@@ -37,5 +40,8 @@ public final class RollbackStatementAssert {
      * @param expected expected rollback statement test case
      */
     public static void assertIs(final SQLCaseAssertContext assertContext, 
final RollbackStatement actual, final RollbackStatementTestCase expected) {
+        if (actual instanceof MySQLRollbackStatement && 
((MySQLRollbackStatement) actual).getSavepointName() != null) {
+            assertEquals(expected.getName(), ((MySQLRollbackStatement) 
actual).getSavepointName());
+        }
     }
 }
diff --git 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/tcl/impl/SavepointStatementAssert.java
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/tcl/impl/SavepointStatementAssert.java
index ec02343..2a4051e 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/tcl/impl/SavepointStatementAssert.java
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/tcl/impl/SavepointStatementAssert.java
@@ -20,9 +20,12 @@ package 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statemen
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.tcl.SavepointStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.tcl.MySQLSavepointStatement;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.SQLCaseAssertContext;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.tcl.SavepointStatementTestCase;
 
+import static org.junit.Assert.assertEquals;
+
 /**
  * Savepoint statement assert.
  */
@@ -37,5 +40,8 @@ public final class SavepointStatementAssert {
      * @param expected expected savepoint statement test case
      */
     public static void assertIs(final SQLCaseAssertContext assertContext, 
final SavepointStatement actual, final SavepointStatementTestCase expected) {
+        if (actual instanceof MySQLSavepointStatement) {
+            assertEquals(expected.getName(), ((MySQLSavepointStatement) 
actual).getSavepointName());
+        }
     }
 }
diff --git 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/tcl/RollbackStatementTestCase.java
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/tcl/RollbackStatementTestCase.java
index c5fd8ed..32117b1 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/tcl/RollbackStatementTestCase.java
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/tcl/RollbackStatementTestCase.java
@@ -17,10 +17,19 @@
 
 package 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.tcl;
 
+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;
+
 /**
  * Rollback statement test case.
  */
+@Getter
+@Setter
 public final class RollbackStatementTestCase extends SQLParserTestCase {
+
+    @XmlAttribute
+    private String name;
 }
diff --git 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/tcl/SavepointStatementTestCase.java
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/tcl/SavepointStatementTestCase.java
index ad04be9..f25a4cf 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/tcl/SavepointStatementTestCase.java
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/tcl/SavepointStatementTestCase.java
@@ -17,10 +17,19 @@
 
 package 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.tcl;
 
+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;
+
 /**
  * Savepoint statement test case.
  */
+@Getter
+@Setter
 public final class SavepointStatementTestCase extends SQLParserTestCase {
+
+    @XmlAttribute
+    private String name;
 }
diff --git 
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/tcl/rollback.xml
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/tcl/rollback.xml
index 0347a0a..93b35e1 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/tcl/rollback.xml
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/tcl/rollback.xml
@@ -20,7 +20,7 @@
     <rollback sql-case-id="rollback" />
     <rollback sql-case-id="rollback_transaction" />
     <rollback sql-case-id="rollback_with_name" />
-    <rollback sql-case-id="rollback_to_savepoint" />
+    <rollback sql-case-id="rollback_to_savepoint" name="savepoint1" />
     <rollback sql-case-id="rollback_force" />
     <rollback sql-case-id="rollback_prepare" />
     <rollback sql-case-id="rollback_in_pg" />
diff --git 
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/tcl/savepoint.xml
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/tcl/savepoint.xml
index 719aa4e..bc55ccc 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/tcl/savepoint.xml
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/tcl/savepoint.xml
@@ -17,6 +17,6 @@
   -->
 
 <sql-parser-test-cases>
-    <savepoint sql-case-id="savepoint" />
+    <savepoint sql-case-id="savepoint" name="savepoint1" />
     <savepoint sql-case-id="savepoint_transaction" />
 </sql-parser-test-cases>

Reply via email to