This is an automated email from the ASF dual-hosted git repository.
sunnianjun 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 1ff1d191ab2 Refactor MySQLErrPacket (#28132)
1ff1d191ab2 is described below
commit 1ff1d191ab27539f70081dde6f81edbe1f373390
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Aug 17 10:47:08 2023 +0800
Refactor MySQLErrPacket (#28132)
* Refactor MySQLErrPacket
* Refactor MySQLErrPacket
---
.../mysql/packet/generic/MySQLErrPacket.java | 22 ++++++++++------------
.../mysql/packet/generic/MySQLErrPacketTest.java | 10 +++++-----
.../mysql/err/MySQLErrorPacketFactory.java | 11 ++++++++++-
.../mysql/err/MySQLErrorPacketFactoryTest.java | 12 +++++++++++-
4 files changed, 36 insertions(+), 19 deletions(-)
diff --git
a/db-protocol/mysql/src/main/java/org/apache/shardingsphere/db/protocol/mysql/packet/generic/MySQLErrPacket.java
b/db-protocol/mysql/src/main/java/org/apache/shardingsphere/db/protocol/mysql/packet/generic/MySQLErrPacket.java
index 842041f4471..5ed84acdac5 100644
---
a/db-protocol/mysql/src/main/java/org/apache/shardingsphere/db/protocol/mysql/packet/generic/MySQLErrPacket.java
+++
b/db-protocol/mysql/src/main/java/org/apache/shardingsphere/db/protocol/mysql/packet/generic/MySQLErrPacket.java
@@ -18,11 +18,10 @@
package org.apache.shardingsphere.db.protocol.mysql.packet.generic;
import com.google.common.base.Preconditions;
-import com.google.common.base.Strings;
import lombok.Getter;
import org.apache.shardingsphere.db.protocol.mysql.packet.MySQLPacket;
import org.apache.shardingsphere.db.protocol.mysql.payload.MySQLPacketPayload;
-import org.apache.shardingsphere.infra.exception.mysql.vendor.MySQLVendorError;
+import
org.apache.shardingsphere.infra.exception.core.external.sql.vendor.VendorError;
import java.sql.SQLException;
@@ -48,16 +47,15 @@ public final class MySQLErrPacket extends MySQLPacket {
private final String errorMessage;
public MySQLErrPacket(final SQLException exception) {
- if (null == exception.getSQLState()) {
- errorCode = MySQLVendorError.ER_INTERNAL_ERROR.getVendorCode();
- sqlState =
MySQLVendorError.ER_INTERNAL_ERROR.getSqlState().getValue();
- errorMessage =
String.format(MySQLVendorError.ER_INTERNAL_ERROR.getReason(),
- null == exception.getNextException() ||
!Strings.isNullOrEmpty(exception.getMessage()) ? exception.getMessage() :
exception.getNextException().getMessage());
- } else {
- errorCode = exception.getErrorCode();
- sqlState = exception.getSQLState();
- errorMessage = exception.getMessage();
- }
+ errorCode = exception.getErrorCode();
+ sqlState = exception.getSQLState();
+ errorMessage = exception.getMessage();
+ }
+
+ public MySQLErrPacket(final VendorError vendorError, final Object...
errorMessageArgs) {
+ errorCode = vendorError.getVendorCode();
+ sqlState = vendorError.getSqlState().getValue();
+ errorMessage = String.format(vendorError.getReason(),
errorMessageArgs);
}
public MySQLErrPacket(final MySQLPacketPayload payload) {
diff --git
a/db-protocol/mysql/src/test/java/org/apache/shardingsphere/db/protocol/mysql/packet/generic/MySQLErrPacketTest.java
b/db-protocol/mysql/src/test/java/org/apache/shardingsphere/db/protocol/mysql/packet/generic/MySQLErrPacketTest.java
index ddf6a46a742..5074e7aab56 100644
---
a/db-protocol/mysql/src/test/java/org/apache/shardingsphere/db/protocol/mysql/packet/generic/MySQLErrPacketTest.java
+++
b/db-protocol/mysql/src/test/java/org/apache/shardingsphere/db/protocol/mysql/packet/generic/MySQLErrPacketTest.java
@@ -39,16 +39,16 @@ class MySQLErrPacketTest {
private MySQLPacketPayload payload;
@Test
- void assertNewErrPacketWithServerErrorCode() {
- MySQLErrPacket actual = new MySQLErrPacket(new SQLException("test",
"FOO_STATE", 1));
+ void assertNewErrPacketWithSQLException() {
+ MySQLErrPacket actual = new MySQLErrPacket(new SQLException("No
reason", "FOO_STATE", 1));
assertThat(actual.getErrorCode(), is(1));
assertThat(actual.getSqlState(), is("FOO_STATE"));
- assertThat(actual.getErrorMessage(), is("test"));
+ assertThat(actual.getErrorMessage(), is("No reason"));
}
@Test
- void assertNewErrPacketWithInternalServerError() {
- MySQLErrPacket actual = new MySQLErrPacket(new SQLException("No
reason"));
+ void assertNewErrPacketWithVendorError() {
+ MySQLErrPacket actual = new
MySQLErrPacket(MySQLVendorError.ER_INTERNAL_ERROR, "No reason");
assertThat(actual.getErrorCode(), is(1815));
assertThat(actual.getSqlState(),
is(XOpenSQLState.GENERAL_ERROR.getValue()));
assertThat(actual.getErrorMessage(), is("Internal error: No reason"));
diff --git
a/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/err/MySQLErrorPacketFactory.java
b/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/err/MySQLErrorPacketFactory.java
index d75fef84eeb..ba938d756c9 100644
---
a/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/err/MySQLErrorPacketFactory.java
+++
b/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/err/MySQLErrorPacketFactory.java
@@ -17,13 +17,17 @@
package org.apache.shardingsphere.proxy.frontend.mysql.err;
+import com.google.common.base.Strings;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import
org.apache.shardingsphere.db.protocol.mysql.packet.generic.MySQLErrPacket;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
import
org.apache.shardingsphere.infra.exception.dialect.SQLExceptionTransformEngine;
+import org.apache.shardingsphere.infra.exception.mysql.vendor.MySQLVendorError;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
+import java.sql.SQLException;
+
/**
* Error packet factory for MySQL.
*/
@@ -37,6 +41,11 @@ public final class MySQLErrorPacketFactory {
* @return created instance
*/
public static MySQLErrPacket newInstance(final Exception cause) {
- return new
MySQLErrPacket(SQLExceptionTransformEngine.toSQLException(cause,
TypedSPILoader.getService(DatabaseType.class, "MySQL")));
+ SQLException sqlException =
SQLExceptionTransformEngine.toSQLException(cause,
TypedSPILoader.getService(DatabaseType.class, "MySQL"));
+ return null == sqlException.getSQLState() ? new
MySQLErrPacket(MySQLVendorError.ER_INTERNAL_ERROR,
getErrorMessage(sqlException)) : new MySQLErrPacket(sqlException);
+ }
+
+ private static String getErrorMessage(final SQLException cause) {
+ return null == cause.getNextException() ||
!Strings.isNullOrEmpty(cause.getMessage()) ? cause.getMessage() :
cause.getNextException().getMessage();
}
}
diff --git
a/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/err/MySQLErrorPacketFactoryTest.java
b/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/err/MySQLErrorPacketFactoryTest.java
index a47366380c7..847522da441 100644
---
a/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/err/MySQLErrorPacketFactoryTest.java
+++
b/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/err/MySQLErrorPacketFactoryTest.java
@@ -21,13 +21,23 @@ import
org.apache.shardingsphere.db.protocol.mysql.packet.generic.MySQLErrPacket
import
org.apache.shardingsphere.infra.exception.core.external.sql.sqlstate.XOpenSQLState;
import org.junit.jupiter.api.Test;
+import java.sql.SQLException;
+
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
class MySQLErrorPacketFactoryTest {
@Test
- void assertNewInstance() {
+ void assertNewInstanceWithoutSQLState() {
+ MySQLErrPacket actual = MySQLErrorPacketFactory.newInstance(new
SQLException("No reason"));
+ assertThat(actual.getErrorCode(), is(1815));
+ assertThat(actual.getSqlState(),
is(XOpenSQLState.GENERAL_ERROR.getValue()));
+ assertThat(actual.getErrorMessage(), is("Internal error: No reason"));
+ }
+
+ @Test
+ void assertNewInstanceWithSQLState() {
MySQLErrPacket actual = MySQLErrorPacketFactory.newInstance(new
RuntimeException("No reason"));
assertThat(actual.getErrorCode(), is(30000));
assertThat(actual.getSqlState(),
is(XOpenSQLState.GENERAL_ERROR.getValue()));