You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by yx...@apache.org on 2022/08/29 02:23:14 UTC

[shardingsphere] branch master updated: Add SQLExceptionTransformEngine (#20624)

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

yx9o 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 f998702d507 Add SQLExceptionTransformEngine (#20624)
f998702d507 is described below

commit f998702d5072b3e6e7d68e153f545838401445db
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Mon Aug 29 10:23:06 2022 +0800

    Add SQLExceptionTransformEngine (#20624)
    
    * Add ExceptionTransformEngine
    
    * Add ExceptionTransformEngine
---
 .../dialect/SQLExceptionTransformEngine.java       | 35 ++++++++--------------
 .../frontend/mysql/err/MySQLErrPacketFactory.java  | 18 ++---------
 2 files changed, 15 insertions(+), 38 deletions(-)

diff --git a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/err/MySQLErrPacketFactory.java b/shardingsphere-dialect-exception/shardingsphere-dialect-exception-core/src/main/java/org/apache/shardingsphere/dialect/SQLExceptionTransformEngine.java
similarity index 51%
copy from shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/err/MySQLErrPacketFactory.java
copy to shardingsphere-dialect-exception/shardingsphere-dialect-exception-core/src/main/java/org/apache/shardingsphere/dialect/SQLExceptionTransformEngine.java
index 50bff2fad9a..823b5e5b3bf 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/err/MySQLErrPacketFactory.java
+++ b/shardingsphere-dialect-exception/shardingsphere-dialect-exception-core/src/main/java/org/apache/shardingsphere/dialect/SQLExceptionTransformEngine.java
@@ -15,51 +15,40 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.proxy.frontend.mysql.err;
+package org.apache.shardingsphere.dialect;
 
-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.dialect.exception.SQLDialectException;
 import org.apache.shardingsphere.dialect.mapper.SQLDialectExceptionMapperFactory;
-import org.apache.shardingsphere.dialect.mysql.vendor.MySQLVendorError;
 import org.apache.shardingsphere.infra.util.exception.sql.ShardingSphereSQLException;
 import org.apache.shardingsphere.infra.util.exception.sql.UnknownSQLException;
 
 import java.sql.SQLException;
 
 /**
- * ERR packet factory for MySQL.
+ * SQL Exception transform engine.
  */
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class MySQLErrPacketFactory {
+public final class SQLExceptionTransformEngine {
     
     /**
-     * Create new instance of MySQL ERR packet.
-     *
+     * To SQL exception.
+     * 
      * @param cause cause
-     * @return created instance
+     * @param databaseType database type
+     * @return SQL exception
      */
-    public static MySQLErrPacket newInstance(final Exception cause) {
+    public static SQLException toSQLException(final Exception cause, final String databaseType) {
         if (cause instanceof SQLException) {
-            SQLException sqlException = (SQLException) cause;
-            return null == sqlException.getSQLState() ? new MySQLErrPacket(1, MySQLVendorError.ER_INTERNAL_ERROR, getErrorMessage(sqlException)) : createErrPacket(sqlException);
+            return (SQLException) cause;
         }
         if (cause instanceof ShardingSphereSQLException) {
-            return createErrPacket(((ShardingSphereSQLException) cause).toSQLException());
+            return ((ShardingSphereSQLException) cause).toSQLException();
         }
         if (cause instanceof SQLDialectException) {
-            return createErrPacket(SQLDialectExceptionMapperFactory.getInstance("MySQL").convert((SQLDialectException) cause));
+            return SQLDialectExceptionMapperFactory.getInstance(databaseType).convert((SQLDialectException) cause);
         }
-        return createErrPacket(new UnknownSQLException(cause).toSQLException());
-    }
-    
-    private static String getErrorMessage(final SQLException cause) {
-        return null == cause.getNextException() || !Strings.isNullOrEmpty(cause.getMessage()) ? cause.getMessage() : cause.getNextException().getMessage();
-    }
-    
-    private static MySQLErrPacket createErrPacket(final SQLException cause) {
-        return new MySQLErrPacket(1, cause.getErrorCode(), cause.getSQLState(), cause.getMessage());
+        return new UnknownSQLException(cause).toSQLException();
     }
 }
diff --git a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/err/MySQLErrPacketFactory.java b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/err/MySQLErrPacketFactory.java
index 50bff2fad9a..c70af18c859 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/err/MySQLErrPacketFactory.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/err/MySQLErrPacketFactory.java
@@ -21,11 +21,8 @@ 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.dialect.exception.SQLDialectException;
-import org.apache.shardingsphere.dialect.mapper.SQLDialectExceptionMapperFactory;
+import org.apache.shardingsphere.dialect.SQLExceptionTransformEngine;
 import org.apache.shardingsphere.dialect.mysql.vendor.MySQLVendorError;
-import org.apache.shardingsphere.infra.util.exception.sql.ShardingSphereSQLException;
-import org.apache.shardingsphere.infra.util.exception.sql.UnknownSQLException;
 
 import java.sql.SQLException;
 
@@ -42,17 +39,8 @@ public final class MySQLErrPacketFactory {
      * @return created instance
      */
     public static MySQLErrPacket newInstance(final Exception cause) {
-        if (cause instanceof SQLException) {
-            SQLException sqlException = (SQLException) cause;
-            return null == sqlException.getSQLState() ? new MySQLErrPacket(1, MySQLVendorError.ER_INTERNAL_ERROR, getErrorMessage(sqlException)) : createErrPacket(sqlException);
-        }
-        if (cause instanceof ShardingSphereSQLException) {
-            return createErrPacket(((ShardingSphereSQLException) cause).toSQLException());
-        }
-        if (cause instanceof SQLDialectException) {
-            return createErrPacket(SQLDialectExceptionMapperFactory.getInstance("MySQL").convert((SQLDialectException) cause));
-        }
-        return createErrPacket(new UnknownSQLException(cause).toSQLException());
+        SQLException sqlException = SQLExceptionTransformEngine.toSQLException(cause, "MySQL");
+        return null == sqlException.getSQLState() ? new MySQLErrPacket(1, MySQLVendorError.ER_INTERNAL_ERROR, getErrorMessage(sqlException)) : createErrPacket(sqlException);
     }
     
     private static String getErrorMessage(final SQLException cause) {