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()));

Reply via email to