You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by pa...@apache.org on 2023/05/21 10:25:22 UTC
[shardingsphere] branch master updated: Refactor XAStatement (#25821)
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 482e30c51f0 Refactor XAStatement (#25821)
482e30c51f0 is described below
commit 482e30c51f0e9de4bef4615a6f7754852b1ccdcf
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Sun May 21 18:25:13 2023 +0800
Refactor XAStatement (#25821)
---
.github/workflows/ci.yml | 2 +-
.../client/netty/MySQLBinlogEventPacketDecoder.java | 2 ++
.../src/main/antlr4/imports/mysql/TCLStatement.g4 | 20 ++++++++++----------
.../statement/type/MySQLTCLStatementVisitor.java | 7 +------
.../mysql/visitor/statement/MySQLXAVisitorTest.java | 2 +-
.../parser/sql/common/statement/tcl/XAStatement.java | 8 ++++----
.../statement/mysql/tcl/MySQLXAStatement.java | 4 ++++
.../handler/transaction/TransactionXAHandler.java | 11 +++++------
.../prepare/MySQLComStmtPrepareCheckerTest.java | 2 +-
9 files changed, 29 insertions(+), 29 deletions(-)
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 3fc296c953c..c956b1af9b6 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -51,7 +51,7 @@ concurrency:
cancel-in-progress: true
env:
- MAVEN_OPTS: -Dhttp.keepAlive=false -Dmaven.wagon.http.pool=false -Dmaven.wagon.http.retryHandler.class=standard -Dmaven.wagon.http.retryHandler.count=3 -Dcheckstyle.skip=true -Dspotless.apply.skip=true -Dmaven.javadoc.skip=true -Djacoco.skip=true
+ MAVEN_OPTS: -XX:+UseStringDeduplication -Dhttp.keepAlive=false -Dmaven.wagon.http.pool=false -Dmaven.wagon.http.retryHandler.class=standard -Dmaven.wagon.http.retryHandler.count=3 -Dcheckstyle.skip=true -Dspotless.apply.skip=true -Dmaven.javadoc.skip=true -Djacoco.skip=true
REPOSITORY_NAME: shardingsphere
jobs:
diff --git a/kernel/data-pipeline/dialect/mysql/src/main/java/org/apache/shardingsphere/data/pipeline/mysql/ingest/client/netty/MySQLBinlogEventPacketDecoder.java b/kernel/data-pipeline/dialect/mysql/src/main/java/org/apache/shardingsphere/data/pipeline/mysql/ingest/client/netty/MySQLBinlogEventPacketDecoder.java
index ffe36f12b28..98079fc3c97 100644
--- a/kernel/data-pipeline/dialect/mysql/src/main/java/org/apache/shardingsphere/data/pipeline/mysql/ingest/client/netty/MySQLBinlogEventPacketDecoder.java
+++ b/kernel/data-pipeline/dialect/mysql/src/main/java/org/apache/shardingsphere/data/pipeline/mysql/ingest/client/netty/MySQLBinlogEventPacketDecoder.java
@@ -66,6 +66,8 @@ public final class MySQLBinlogEventPacketDecoder extends ByteToMessageDecoder {
if (checkEventIntegrity(in, binlogEventHeader)) {
decodeEvent(binlogEventHeader, payload).ifPresent(out::add);
skipChecksum(binlogEventHeader.getEventType(), in);
+ } else {
+ break;
}
}
}
diff --git a/parser/sql/dialect/mysql/src/main/antlr4/imports/mysql/TCLStatement.g4 b/parser/sql/dialect/mysql/src/main/antlr4/imports/mysql/TCLStatement.g4
index 9e8393a1c2a..00bb7524553 100644
--- a/parser/sql/dialect/mysql/src/main/antlr4/imports/mysql/TCLStatement.g4
+++ b/parser/sql/dialect/mysql/src/main/antlr4/imports/mysql/TCLStatement.g4
@@ -63,16 +63,6 @@ releaseSavepoint
: RELEASE SAVEPOINT identifier
;
-xa
- : XA ((START | BEGIN) xid (JOIN | RESUME)?
- | END xid (SUSPEND (FOR MIGRATE)?)?
- | PREPARE xid
- | COMMIT xid (ONE PHASE)?
- | ROLLBACK xid
- | RECOVER (CONVERT XID)?
- )
- ;
-
optionChain
: AND NO? CHAIN
;
@@ -89,6 +79,16 @@ lockOption
: READ LOCAL? | LOW_PRIORITY? WRITE
;
+xa
+ : XA ((START | BEGIN) xid (JOIN | RESUME)?
+ | END xid (SUSPEND (FOR MIGRATE)?)?
+ | PREPARE xid
+ | COMMIT xid (ONE PHASE)?
+ | ROLLBACK xid
+ | RECOVER (CONVERT XID)?
+ )
+ ;
+
xid
: gtrid=textString (COMMA_ bqual=textString (COMMA_ formatID=NUMBER_)?)?
;
diff --git a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLTCLStatementVisitor.java b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLTCLStatementVisitor.java
index df637c937bc..35cf1303a8d 100644
--- a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLTCLStatementVisitor.java
+++ b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLTCLStatementVisitor.java
@@ -143,12 +143,7 @@ public final class MySQLTCLStatementVisitor extends MySQLStatementVisitor implem
@Override
public ASTNode visitXa(final XaContext ctx) {
- MySQLXAStatement result = new MySQLXAStatement();
- result.setOp(ctx.getChild(1).getText().toUpperCase());
- if (null != ctx.xid()) {
- result.setXid(ctx.xid().getText());
- }
- return result;
+ return new MySQLXAStatement(ctx.getChild(1).getText().toUpperCase(), null == ctx.xid() ? null : ctx.xid().getText());
}
@Override
diff --git a/parser/sql/dialect/mysql/src/test/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/MySQLXAVisitorTest.java b/parser/sql/dialect/mysql/src/test/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/MySQLXAVisitorTest.java
index dc11e5883a3..90a1c465867 100644
--- a/parser/sql/dialect/mysql/src/test/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/MySQLXAVisitorTest.java
+++ b/parser/sql/dialect/mysql/src/test/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/MySQLXAVisitorTest.java
@@ -47,7 +47,7 @@ class MySQLXAVisitorTest {
MySQLTCLStatementVisitor visitor = new MySQLTCLStatementVisitor();
MySQLXAStatement xaStatement = (MySQLXAStatement) visitor.visitXa(parser.xa());
assertThat("XA parse error.", parser.getNumberOfSyntaxErrors(), is(0));
- assertThat("XA operation error.", xaStatement.getOp(), is(operation));
+ assertThat("XA operation error.", xaStatement.getOperator(), is(operation));
assertThat("XA xid error.", xaStatement.getXid(), is(xid));
}
diff --git a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/tcl/XAStatement.java b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/tcl/XAStatement.java
index 8381e8d27d8..94b8992143e 100644
--- a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/tcl/XAStatement.java
+++ b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/tcl/XAStatement.java
@@ -18,17 +18,17 @@
package org.apache.shardingsphere.sql.parser.sql.common.statement.tcl;
import lombok.Getter;
-import lombok.Setter;
+import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
/**
* XA statement.
*/
+@RequiredArgsConstructor
@Getter
-@Setter
public abstract class XAStatement extends AbstractSQLStatement implements TCLStatement {
- private String op;
+ private final String operator;
- private String xid;
+ private final String xid;
}
diff --git a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/tcl/MySQLXAStatement.java b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/tcl/MySQLXAStatement.java
index f6e4f242bc3..c897c671c73 100644
--- a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/tcl/MySQLXAStatement.java
+++ b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/tcl/MySQLXAStatement.java
@@ -24,4 +24,8 @@ import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.MySQLSta
* MySQL XA statement.
*/
public final class MySQLXAStatement extends XAStatement implements MySQLStatement {
+
+ public MySQLXAStatement(final String operator, final String xid) {
+ super(operator, xid);
+ }
}
diff --git a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/transaction/TransactionXAHandler.java b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/transaction/TransactionXAHandler.java
index 7db34e8564c..0882e56836c 100644
--- a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/transaction/TransactionXAHandler.java
+++ b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/transaction/TransactionXAHandler.java
@@ -56,17 +56,17 @@ public final class TransactionXAHandler implements ProxyBackendHandler {
@Override
public boolean next() throws SQLException {
- return "RECOVER".equals(tclStatement.getOp()) && backendHandler.next();
+ return "RECOVER".equals(tclStatement.getOperator()) && backendHandler.next();
}
@Override
public QueryResponseRow getRowData() throws SQLException {
- return "RECOVER".equals(tclStatement.getOp()) ? backendHandler.getRowData() : new QueryResponseRow(Collections.emptyList());
+ return "RECOVER".equals(tclStatement.getOperator()) ? backendHandler.getRowData() : new QueryResponseRow(Collections.emptyList());
}
@Override
public ResponseHeader execute() throws SQLException {
- switch (tclStatement.getOp()) {
+ switch (tclStatement.getOperator()) {
case "START":
case "BEGIN":
return begin();
@@ -78,13 +78,12 @@ public final class TransactionXAHandler implements ProxyBackendHandler {
case "ROLLBACK":
return finish();
default:
- throw new SQLFeatureNotSupportedException(String.format("unrecognized XA statement `%s`", tclStatement.getOp()));
+ throw new SQLFeatureNotSupportedException(String.format("unrecognized XA statement `%s`", tclStatement.getOperator()));
}
}
/*
- * We have to let session occupy the thread when doing xa transaction.
- * According to https://dev.mysql.com/doc/refman/5.7/en/xa-states.html XA and local transactions are mutually exclusive.
+ * We have to let session occupy the thread when doing xa transaction. According to https://dev.mysql.com/doc/refman/5.7/en/xa-states.html XA and local transactions are mutually exclusive.
*/
private ResponseHeader begin() throws SQLException {
ShardingSpherePreconditions.checkState(!connectionSession.getTransactionStatus().isInTransaction(), XATransactionNestedBeginException::new);
diff --git a/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareCheckerTest.java b/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareCheckerTest.java
index da86fcf2541..c5d01dd7839 100644
--- a/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareCheckerTest.java
+++ b/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareCheckerTest.java
@@ -91,7 +91,7 @@ class MySQLComStmtPrepareCheckerTest {
new MySQLShowErrorsStatement(), new MySQLShowBinlogEventsStatement(), new MySQLShowCreateProcedureStatement(), new MySQLShowCreateFunctionStatement(),
new MySQLShowCreateEventStatement(),
new MySQLShowCreateTableStatement(), new MySQLShowCreateViewStatement(), new MySQLShowBinaryLogsStatement(), new MySQLShowStatusStatement(), new MySQLStartSlaveStatement(),
- new MySQLStopSlaveStatement(), new MySQLTruncateStatement(), new MySQLUninstallPluginStatement(), new MySQLUpdateStatement(), new MySQLXAStatement());
+ new MySQLStopSlaveStatement(), new MySQLTruncateStatement(), new MySQLUninstallPluginStatement(), new MySQLUpdateStatement(), new MySQLXAStatement("END", null));
for (SQLStatement each : sqlStatements) {
assertTrue(MySQLComStmtPrepareChecker.isStatementAllowed(each));
}