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

menghaoran 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 38ea308a309 Refactor PostgreSQLVendorError (#20664)
38ea308a309 is described below

commit 38ea308a30975a44ff277ade5ef16b8de67c7e29
Author: Liang Zhang <[email protected]>
AuthorDate: Wed Aug 31 07:54:10 2022 +0800

    Refactor PostgreSQLVendorError (#20664)
---
 .../transaction/InTransactionException.java        |  6 -----
 .../exception/InvalidPasswordException.java        |  8 +++---
 .../PostgreSQLProtocolViolationException.java      | 10 +++++---
 .../exception/PrivilegeNotGrantedException.java    | 10 +++++---
 .../exception/UnknownUsernameException.java        |  8 +++---
 .../mapper/PostgreSQLDialectExceptionMapper.java   | 30 ++++++++++++----------
 .../message/ServerErrorMessageBuilder.java         |  9 ++++---
 .../postgresql/sqlstate/PostgreSQLState.java       |  2 ++
 .../postgresql/vendor/PostgreSQLVendorError.java   | 18 +++++++++----
 .../PostgreSQLDialectExceptionMapperTest.java      | 14 +++++-----
 .../message/ServerErrorMessageBuilderTest.java     |  6 ++---
 .../exception/sql/ShardingSphereSQLException.java  |  5 ++--
 .../util/exception/sql/sqlstate/XOpenSQLState.java |  2 ++
 .../transaction/TransactionBackendHandler.java     |  4 +--
 .../OpenGaussAuthenticationHandler.java            |  2 +-
 15 files changed, 77 insertions(+), 57 deletions(-)

diff --git 
a/shardingsphere-dialect-exception/shardingsphere-dialect-exception-core/src/main/java/org/apache/shardingsphere/dialect/exception/transaction/InTransactionException.java
 
b/shardingsphere-dialect-exception/shardingsphere-dialect-exception-core/src/main/java/org/apache/shardingsphere/dialect/exception/transaction/InTransactionException.java
index 0a7cfe34584..fb02f2990e5 100644
--- 
a/shardingsphere-dialect-exception/shardingsphere-dialect-exception-core/src/main/java/org/apache/shardingsphere/dialect/exception/transaction/InTransactionException.java
+++ 
b/shardingsphere-dialect-exception/shardingsphere-dialect-exception-core/src/main/java/org/apache/shardingsphere/dialect/exception/transaction/InTransactionException.java
@@ -17,18 +17,12 @@
 
 package org.apache.shardingsphere.dialect.exception.transaction;
 
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.dialect.exception.SQLDialectException;
 
 /**
  * In transaction exception.
  */
-@RequiredArgsConstructor
-@Getter
 public final class InTransactionException extends SQLDialectException {
     
     private static final long serialVersionUID = 8125852172126111520L;
-    
-    private final String message;
 }
diff --git 
a/shardingsphere-dialect-exception/shardingsphere-postgresql-dialect-exception/src/main/java/org/apache/shardingsphere/dialect/postgresql/exception/InvalidPasswordException.java
 
b/shardingsphere-dialect-exception/shardingsphere-postgresql-dialect-exception/src/main/java/org/apache/shardingsphere/dialect/postgresql/exception/InvalidPasswordException.java
index 60f177dc993..7246b14b6ca 100644
--- 
a/shardingsphere-dialect-exception/shardingsphere-postgresql-dialect-exception/src/main/java/org/apache/shardingsphere/dialect/postgresql/exception/InvalidPasswordException.java
+++ 
b/shardingsphere-dialect-exception/shardingsphere-postgresql-dialect-exception/src/main/java/org/apache/shardingsphere/dialect/postgresql/exception/InvalidPasswordException.java
@@ -17,16 +17,18 @@
 
 package org.apache.shardingsphere.dialect.postgresql.exception;
 
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.dialect.exception.SQLDialectException;
 
 /**
  * Invalid password exception.
  */
+@RequiredArgsConstructor
+@Getter
 public final class InvalidPasswordException extends SQLDialectException {
     
     private static final long serialVersionUID = -2266893048070563644L;
     
-    public InvalidPasswordException(final String username) {
-        super("password authentication failed for user \"%s\"", username);
-    }
+    private final String username;
 }
diff --git 
a/shardingsphere-dialect-exception/shardingsphere-postgresql-dialect-exception/src/main/java/org/apache/shardingsphere/dialect/postgresql/exception/PostgreSQLProtocolViolationException.java
 
b/shardingsphere-dialect-exception/shardingsphere-postgresql-dialect-exception/src/main/java/org/apache/shardingsphere/dialect/postgresql/exception/PostgreSQLProtocolViolationException.java
index c78d36dc5a0..cdb018fe807 100644
--- 
a/shardingsphere-dialect-exception/shardingsphere-postgresql-dialect-exception/src/main/java/org/apache/shardingsphere/dialect/postgresql/exception/PostgreSQLProtocolViolationException.java
+++ 
b/shardingsphere-dialect-exception/shardingsphere-postgresql-dialect-exception/src/main/java/org/apache/shardingsphere/dialect/postgresql/exception/PostgreSQLProtocolViolationException.java
@@ -17,16 +17,20 @@
 
 package org.apache.shardingsphere.dialect.postgresql.exception;
 
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.dialect.exception.SQLDialectException;
 
 /**
  * PostgreSQL protocol violation exception.
  */
+@RequiredArgsConstructor
+@Getter
 public final class PostgreSQLProtocolViolationException extends 
SQLDialectException {
     
     private static final long serialVersionUID = 6784109729740919997L;
     
-    public PostgreSQLProtocolViolationException(final String 
expectedMessageType, final String actualMessageType) {
-        super("expected %s response, got message type %s", 
expectedMessageType, actualMessageType);
-    }
+    private final String expectedMessageType;
+    
+    private final String actualMessageType;
 }
diff --git 
a/shardingsphere-dialect-exception/shardingsphere-postgresql-dialect-exception/src/main/java/org/apache/shardingsphere/dialect/postgresql/exception/PrivilegeNotGrantedException.java
 
b/shardingsphere-dialect-exception/shardingsphere-postgresql-dialect-exception/src/main/java/org/apache/shardingsphere/dialect/postgresql/exception/PrivilegeNotGrantedException.java
index 6db8c041ac8..b541b36ca91 100644
--- 
a/shardingsphere-dialect-exception/shardingsphere-postgresql-dialect-exception/src/main/java/org/apache/shardingsphere/dialect/postgresql/exception/PrivilegeNotGrantedException.java
+++ 
b/shardingsphere-dialect-exception/shardingsphere-postgresql-dialect-exception/src/main/java/org/apache/shardingsphere/dialect/postgresql/exception/PrivilegeNotGrantedException.java
@@ -17,16 +17,20 @@
 
 package org.apache.shardingsphere.dialect.postgresql.exception;
 
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.dialect.exception.SQLDialectException;
 
 /**
  * Privilege not granted exception.
  */
+@RequiredArgsConstructor
+@Getter
 public final class PrivilegeNotGrantedException extends SQLDialectException {
     
     private static final long serialVersionUID = 8410672833723209253L;
     
-    public PrivilegeNotGrantedException(final String username, final String 
databaseName) {
-        super("Access denied for user '%s' to database '%s'", username, 
databaseName);
-    }
+    private final String username;
+    
+    private final String databaseName;
 }
diff --git 
a/shardingsphere-dialect-exception/shardingsphere-postgresql-dialect-exception/src/main/java/org/apache/shardingsphere/dialect/postgresql/exception/UnknownUsernameException.java
 
b/shardingsphere-dialect-exception/shardingsphere-postgresql-dialect-exception/src/main/java/org/apache/shardingsphere/dialect/postgresql/exception/UnknownUsernameException.java
index 53c35c0a3c5..acaad5b4a01 100644
--- 
a/shardingsphere-dialect-exception/shardingsphere-postgresql-dialect-exception/src/main/java/org/apache/shardingsphere/dialect/postgresql/exception/UnknownUsernameException.java
+++ 
b/shardingsphere-dialect-exception/shardingsphere-postgresql-dialect-exception/src/main/java/org/apache/shardingsphere/dialect/postgresql/exception/UnknownUsernameException.java
@@ -17,16 +17,18 @@
 
 package org.apache.shardingsphere.dialect.postgresql.exception;
 
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.dialect.exception.SQLDialectException;
 
 /**
  * Unknown username exception.
  */
+@RequiredArgsConstructor
+@Getter
 public final class UnknownUsernameException extends SQLDialectException {
     
     private static final long serialVersionUID = -2895258747747089622L;
     
-    public UnknownUsernameException(final String username) {
-        super("unknown username: %s", username);
-    }
+    private final String username;
 }
diff --git 
a/shardingsphere-dialect-exception/shardingsphere-postgresql-dialect-exception/src/main/java/org/apache/shardingsphere/dialect/postgresql/mapper/PostgreSQLDialectExceptionMapper.java
 
b/shardingsphere-dialect-exception/shardingsphere-postgresql-dialect-exception/src/main/java/org/apache/shardingsphere/dialect/postgresql/mapper/PostgreSQLDialectExceptionMapper.java
index d93431a73d0..d902119d466 100644
--- 
a/shardingsphere-dialect-exception/shardingsphere-postgresql-dialect-exception/src/main/java/org/apache/shardingsphere/dialect/postgresql/mapper/PostgreSQLDialectExceptionMapper.java
+++ 
b/shardingsphere-dialect-exception/shardingsphere-postgresql-dialect-exception/src/main/java/org/apache/shardingsphere/dialect/postgresql/mapper/PostgreSQLDialectExceptionMapper.java
@@ -45,40 +45,42 @@ public final class PostgreSQLDialectExceptionMapper 
implements SQLDialectExcepti
     @Override
     public SQLException convert(final SQLDialectException sqlDialectException) 
{
         if (sqlDialectException instanceof UnknownDatabaseException) {
-            return new PSQLException(ServerErrorMessageBuilder.build("FATAL", 
PostgreSQLVendorError.INVALID_CATALOG_NAME,
-                    
String.format(PostgreSQLVendorError.INVALID_CATALOG_NAME.getReason(), 
((UnknownDatabaseException) sqlDialectException).getDatabaseName())));
+            return new PSQLException(ServerErrorMessageBuilder.build("FATAL", 
PostgreSQLVendorError.INVALID_CATALOG_NAME, ((UnknownDatabaseException) 
sqlDialectException).getDatabaseName()));
         }
         if (sqlDialectException instanceof UnknownUsernameException) {
-            return new PSQLException(ServerErrorMessageBuilder.build("FATAL", 
PostgreSQLVendorError.INVALID_AUTHORIZATION_SPECIFICATION, 
sqlDialectException.getMessage()));
+            return new PSQLException(ServerErrorMessageBuilder.build(
+                    "FATAL", 
PostgreSQLVendorError.INVALID_AUTHORIZATION_SPECIFICATION, 
((UnknownUsernameException) sqlDialectException).getUsername()));
         }
         if (sqlDialectException instanceof InvalidPasswordException) {
-            return new PSQLException(ServerErrorMessageBuilder.build("FATAL", 
PostgreSQLVendorError.INVALID_PASSWORD, sqlDialectException.getMessage()));
+            return new PSQLException(ServerErrorMessageBuilder.build("FATAL", 
PostgreSQLVendorError.INVALID_PASSWORD, ((InvalidPasswordException) 
sqlDialectException).getUsername()));
         }
         if (sqlDialectException instanceof PrivilegeNotGrantedException) {
-            return new PSQLException(ServerErrorMessageBuilder.build("FATAL", 
PostgreSQLVendorError.PRIVILEGE_NOT_GRANTED, sqlDialectException.getMessage()));
+            PrivilegeNotGrantedException cause = 
(PrivilegeNotGrantedException) sqlDialectException;
+            return new PSQLException(ServerErrorMessageBuilder.build("FATAL", 
PostgreSQLVendorError.PRIVILEGE_NOT_GRANTED, cause.getUsername(), 
cause.getDatabaseName()));
         }
         if (sqlDialectException instanceof DatabaseCreateExistsException) {
-            return new 
PSQLException(PostgreSQLVendorError.DUPLICATE_DATABASE.getReason(), null);
+            return new PSQLException(ServerErrorMessageBuilder.build("FATAL", 
PostgreSQLVendorError.DUPLICATE_DATABASE, ((DatabaseCreateExistsException) 
sqlDialectException).getDatabaseName()));
         }
         if (sqlDialectException instanceof InTransactionException) {
-            return new PSQLException(sqlDialectException.getMessage(), 
PSQLState.TRANSACTION_STATE_INVALID);
+            return new PSQLException(ServerErrorMessageBuilder.build("ERROR", 
PostgreSQLVendorError.TRANSACTION_STATE_INVALID));
         }
         if (sqlDialectException instanceof 
InsertColumnsAndValuesMismatchedException) {
-            return new PSQLException(sqlDialectException.getMessage(), 
PSQLState.SYNTAX_ERROR);
+            return new PSQLException(ServerErrorMessageBuilder.build("ERROR",
+                    PostgreSQLVendorError.WRONG_VALUE_COUNT_ON_ROW, 
((InsertColumnsAndValuesMismatchedException) 
sqlDialectException).getMismatchedRowNumber()));
         }
         if (sqlDialectException instanceof InvalidParameterValueException) {
-            InvalidParameterValueException invalidParameterValueException = 
(InvalidParameterValueException) sqlDialectException;
-            String message = String.format("invalid value for parameter 
\"%s\": \"%s\"", invalidParameterValueException.getParameterName(), 
invalidParameterValueException.getParameterValue());
-            return new PSQLException(message, 
PSQLState.INVALID_PARAMETER_VALUE);
+            InvalidParameterValueException cause = 
(InvalidParameterValueException) sqlDialectException;
+            return new PSQLException(ServerErrorMessageBuilder.build("ERROR", 
PostgreSQLVendorError.INVALID_PARAMETER_VALUE, cause.getParameterName(), 
cause.getParameterValue()));
         }
         if (sqlDialectException instanceof TooManyConnectionsException) {
-            return new 
PSQLException(PostgreSQLVendorError.DATA_SOURCE_REJECTED_CONNECTION_ATTEMPT.getReason(),
 null);
+            return new PSQLException(ServerErrorMessageBuilder.build("ERROR", 
PostgreSQLVendorError.DATA_SOURCE_REJECTED_CONNECTION_ATTEMPT));
         }
         if (sqlDialectException instanceof 
InvalidAuthorizationSpecificationException) {
-            return new PSQLException(ServerErrorMessageBuilder.build("FATAL", 
PostgreSQLVendorError.INVALID_AUTHORIZATION_SPECIFICATION, 
sqlDialectException.getMessage()));
+            return new PSQLException(ServerErrorMessageBuilder.build("FATAL", 
PostgreSQLVendorError.NO_USERNAME));
         }
         if (sqlDialectException instanceof 
PostgreSQLProtocolViolationException) {
-            return new PSQLException(ServerErrorMessageBuilder.build("FATAL", 
PostgreSQLVendorError.PROTOCOL_VIOLATION, sqlDialectException.getMessage()));
+            PostgreSQLProtocolViolationException cause = 
(PostgreSQLProtocolViolationException) sqlDialectException;
+            return new PSQLException(ServerErrorMessageBuilder.build("FATAL", 
PostgreSQLVendorError.PROTOCOL_VIOLATION, cause.getExpectedMessageType(), 
cause.getActualMessageType()));
         }
         return new PSQLException(sqlDialectException.getMessage(), 
PSQLState.UNEXPECTED_ERROR);
     }
diff --git 
a/shardingsphere-dialect-exception/shardingsphere-postgresql-dialect-exception/src/main/java/org/apache/shardingsphere/dialect/postgresql/message/ServerErrorMessageBuilder.java
 
b/shardingsphere-dialect-exception/shardingsphere-postgresql-dialect-exception/src/main/java/org/apache/shardingsphere/dialect/postgresql/message/ServerErrorMessageBuilder.java
index b3a3f4b79f4..abfa9da5f5f 100644
--- 
a/shardingsphere-dialect-exception/shardingsphere-postgresql-dialect-exception/src/main/java/org/apache/shardingsphere/dialect/postgresql/message/ServerErrorMessageBuilder.java
+++ 
b/shardingsphere-dialect-exception/shardingsphere-postgresql-dialect-exception/src/main/java/org/apache/shardingsphere/dialect/postgresql/message/ServerErrorMessageBuilder.java
@@ -30,14 +30,15 @@ public final class ServerErrorMessageBuilder {
     
     /**
      * Build server error message.
-     * 
+     *
      * @param severity severity
      * @param vendorError vendor error
-     * @param reason reason
+     * @param reasonArguments reason arguments
      * @return server error message
      */
-    public static ServerErrorMessage build(final String severity, final 
VendorError vendorError, final String reason) {
-        return new ServerErrorMessage(String.join("\0", 
buildSeverity(severity), buildNewSeverity(severity), 
buildSQLState(vendorError), buildReason(reason)));
+    public static ServerErrorMessage build(final String severity, final 
VendorError vendorError, final Object... reasonArguments) {
+        return new ServerErrorMessage(
+                String.join("\0", buildSeverity(severity), 
buildNewSeverity(severity), buildSQLState(vendorError), 
buildReason(String.format(vendorError.getReason(), reasonArguments))));
     }
     
     private static String buildSeverity(final String severity) {
diff --git 
a/shardingsphere-dialect-exception/shardingsphere-postgresql-dialect-exception/src/main/java/org/apache/shardingsphere/dialect/postgresql/sqlstate/PostgreSQLState.java
 
b/shardingsphere-dialect-exception/shardingsphere-postgresql-dialect-exception/src/main/java/org/apache/shardingsphere/dialect/postgresql/sqlstate/PostgreSQLState.java
index 8c8e6845c08..b65b58b70a1 100644
--- 
a/shardingsphere-dialect-exception/shardingsphere-postgresql-dialect-exception/src/main/java/org/apache/shardingsphere/dialect/postgresql/sqlstate/PostgreSQLState.java
+++ 
b/shardingsphere-dialect-exception/shardingsphere-postgresql-dialect-exception/src/main/java/org/apache/shardingsphere/dialect/postgresql/sqlstate/PostgreSQLState.java
@@ -30,6 +30,8 @@ public enum PostgreSQLState implements SQLState {
     
     PROTOCOL_VIOLATION("08P01"),
     
+    SYNTAX_ERROR("42601"),
+    
     DUPLICATE_DATABASE("42P04"),
     
     INVALID_PASSWORD("28P01"),
diff --git 
a/shardingsphere-dialect-exception/shardingsphere-postgresql-dialect-exception/src/main/java/org/apache/shardingsphere/dialect/postgresql/vendor/PostgreSQLVendorError.java
 
b/shardingsphere-dialect-exception/shardingsphere-postgresql-dialect-exception/src/main/java/org/apache/shardingsphere/dialect/postgresql/vendor/PostgreSQLVendorError.java
index 6d360c711fc..28201937431 100644
--- 
a/shardingsphere-dialect-exception/shardingsphere-postgresql-dialect-exception/src/main/java/org/apache/shardingsphere/dialect/postgresql/vendor/PostgreSQLVendorError.java
+++ 
b/shardingsphere-dialect-exception/shardingsphere-postgresql-dialect-exception/src/main/java/org/apache/shardingsphere/dialect/postgresql/vendor/PostgreSQLVendorError.java
@@ -35,23 +35,31 @@ public enum PostgreSQLVendorError implements VendorError {
     
     SUCCESSFUL_COMPLETION(XOpenSQLState.SUCCESSFUL_COMPLETION, 
"successful_completion"),
     
-    PRIVILEGE_NOT_GRANTED(XOpenSQLState.PRIVILEGE_NOT_GRANTED, 
"privilege_not_granted"),
+    PRIVILEGE_NOT_GRANTED(XOpenSQLState.PRIVILEGE_NOT_GRANTED, "Access denied 
for user '%s' to database '%s'"),
     
-    PROTOCOL_VIOLATION(PostgreSQLState.PROTOCOL_VIOLATION, 
"protocol_violation"),
+    PROTOCOL_VIOLATION(PostgreSQLState.PROTOCOL_VIOLATION, "expected %s 
response, got message type %s"),
     
     FEATURE_NOT_SUPPORTED(XOpenSQLState.FEATURE_NOT_SUPPORTED, 
"feature_not_supported"),
     
     DUPLICATE_DATABASE(PostgreSQLState.DUPLICATE_DATABASE, "Database '%s' 
already exists"),
     
-    
INVALID_AUTHORIZATION_SPECIFICATION(XOpenSQLState.INVALID_AUTHORIZATION_SPECIFICATION,
 "invalid_authorization_specification"),
+    
INVALID_AUTHORIZATION_SPECIFICATION(XOpenSQLState.INVALID_AUTHORIZATION_SPECIFICATION,
 "unknown username: %s"),
     
-    INVALID_PASSWORD(PostgreSQLState.INVALID_PASSWORD, "invalid_password"),
+    NO_USERNAME(XOpenSQLState.INVALID_AUTHORIZATION_SPECIFICATION, "no 
PostgreSQL user name specified in startup packet"),
+    
+    INVALID_PASSWORD(PostgreSQLState.INVALID_PASSWORD, "password 
authentication failed for user \"%s\""),
     
     INVALID_CATALOG_NAME(XOpenSQLState.INVALID_CATALOG_NAME, "database \"%s\" 
does not exist"),
     
     UNDEFINED_COLUMN(PostgreSQLState.UNDEFINED_COLUMN, "undefined_column"),
     
-    
DATA_SOURCE_REJECTED_CONNECTION_ATTEMPT(XOpenSQLState.DATA_SOURCE_REJECTED_CONNECTION_ATTEMPT,
 "sqlserver_rejected_establishment_of_sqlconnection"),
+    
DATA_SOURCE_REJECTED_CONNECTION_ATTEMPT(XOpenSQLState.DATA_SOURCE_REJECTED_CONNECTION_ATTEMPT,
 "server rejected establishment of sql connection"),
+    
+    TRANSACTION_STATE_INVALID(XOpenSQLState.INVALID_TRANSACTION_STATE, "There 
is already a transaction in progress"),
+    
+    WRONG_VALUE_COUNT_ON_ROW(PostgreSQLState.SYNTAX_ERROR, "Column count 
doesn't match value count at row %d"),
+    
+    INVALID_PARAMETER_VALUE(XOpenSQLState.INVALID_PARAMETER_VALUE, "invalid 
value for parameter \"%s\": \"%s\""),
     
     SYSTEM_ERROR(PostgreSQLState.SYSTEM_ERROR, "system_error");
     
diff --git 
a/shardingsphere-dialect-exception/shardingsphere-postgresql-dialect-exception/src/test/java/org/apache/shardingsphere/dialect/postgresql/mapper/PostgreSQLDialectExceptionMapperTest.java
 
b/shardingsphere-dialect-exception/shardingsphere-postgresql-dialect-exception/src/test/java/org/apache/shardingsphere/dialect/postgresql/mapper/PostgreSQLDialectExceptionMapperTest.java
index 48ff1f15acf..90088855ad5 100644
--- 
a/shardingsphere-dialect-exception/shardingsphere-postgresql-dialect-exception/src/test/java/org/apache/shardingsphere/dialect/postgresql/mapper/PostgreSQLDialectExceptionMapperTest.java
+++ 
b/shardingsphere-dialect-exception/shardingsphere-postgresql-dialect-exception/src/test/java/org/apache/shardingsphere/dialect/postgresql/mapper/PostgreSQLDialectExceptionMapperTest.java
@@ -37,20 +37,20 @@ public final class PostgreSQLDialectExceptionMapperTest {
     
     private Collection<Object[]> getConvertParameters() {
         return Arrays.asList(new Object[][]{
-                {DatabaseCreateExistsException.class, null},
-                {InTransactionException.class, 
PSQLState.TRANSACTION_STATE_INVALID},
-                {InsertColumnsAndValuesMismatchedException.class, 
PSQLState.SYNTAX_ERROR},
-                {InvalidParameterValueException.class, 
PSQLState.INVALID_PARAMETER_VALUE},
-                {TooManyConnectionsException.class, null},
+                {DatabaseCreateExistsException.class, "42P04"},
+                {InTransactionException.class, 
PSQLState.TRANSACTION_STATE_INVALID.getState()},
+                {InsertColumnsAndValuesMismatchedException.class, 
PSQLState.SYNTAX_ERROR.getState()},
+                {InvalidParameterValueException.class, 
PSQLState.INVALID_PARAMETER_VALUE.getState()},
+                {TooManyConnectionsException.class, 
PSQLState.CONNECTION_REJECTED.getState()},
         });
     }
     
     @Test
     @SuppressWarnings("unchecked")
     public void convert() {
-        PostgreSQLDialectExceptionMapper postgreSQLDialect = new 
PostgreSQLDialectExceptionMapper();
+        PostgreSQLDialectExceptionMapper dialectExceptionMapper = new 
PostgreSQLDialectExceptionMapper();
         for (Object[] item : getConvertParameters()) {
-            
assertThat(postgreSQLDialect.convert(mock((Class<SQLDialectException>) 
item[0])).getSQLState(), is(item[1] == null ? null : ((PSQLState) 
item[1]).getState()));
+            
assertThat(dialectExceptionMapper.convert(mock((Class<SQLDialectException>) 
item[0])).getSQLState(), is(null == item[1] ? null : item[1]));
         }
     }
 }
diff --git 
a/shardingsphere-dialect-exception/shardingsphere-postgresql-dialect-exception/src/test/java/org/apache/shardingsphere/dialect/postgresql/message/ServerErrorMessageBuilderTest.java
 
b/shardingsphere-dialect-exception/shardingsphere-postgresql-dialect-exception/src/test/java/org/apache/shardingsphere/dialect/postgresql/message/ServerErrorMessageBuilderTest.java
index f9284feaeb7..22d98f0a101 100644
--- 
a/shardingsphere-dialect-exception/shardingsphere-postgresql-dialect-exception/src/test/java/org/apache/shardingsphere/dialect/postgresql/message/ServerErrorMessageBuilderTest.java
+++ 
b/shardingsphere-dialect-exception/shardingsphere-postgresql-dialect-exception/src/test/java/org/apache/shardingsphere/dialect/postgresql/message/ServerErrorMessageBuilderTest.java
@@ -28,9 +28,9 @@ public final class ServerErrorMessageBuilderTest {
     
     @Test
     public void assertToServerErrorMessage() {
-        ServerErrorMessage actual = ServerErrorMessageBuilder.build("FATAL", 
PostgreSQLVendorError.SYSTEM_ERROR, "foo_reason");
+        ServerErrorMessage actual = ServerErrorMessageBuilder.build("FATAL", 
PostgreSQLVendorError.PRIVILEGE_NOT_GRANTED, "foo_user", "foo_db");
         Assert.assertThat(actual.getSeverity(), is("FATAL"));
-        Assert.assertThat(actual.getSQLState(), 
is(PostgreSQLVendorError.SYSTEM_ERROR.getSqlState().getValue()));
-        Assert.assertThat(actual.getMessage(), is("foo_reason"));
+        Assert.assertThat(actual.getSQLState(), 
is(PostgreSQLVendorError.PRIVILEGE_NOT_GRANTED.getSqlState().getValue()));
+        Assert.assertThat(actual.getMessage(), is("Access denied for user 
'foo_user' to database 'foo_db'"));
     }
 }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-util/src/main/java/org/apache/shardingsphere/infra/util/exception/sql/ShardingSphereSQLException.java
 
b/shardingsphere-infra/shardingsphere-infra-util/src/main/java/org/apache/shardingsphere/infra/util/exception/sql/ShardingSphereSQLException.java
index 8db1d216401..cf4c5660e7a 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-util/src/main/java/org/apache/shardingsphere/infra/util/exception/sql/ShardingSphereSQLException.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-util/src/main/java/org/apache/shardingsphere/infra/util/exception/sql/ShardingSphereSQLException.java
@@ -35,12 +35,11 @@ public abstract class ShardingSphereSQLException extends 
ShardingSphereInsideExc
     
     private final String reason;
     
-    public ShardingSphereSQLException(final SQLState sqlState, final int 
vendorCode, final String reason, final String... messageArguments) {
+    public ShardingSphereSQLException(final SQLState sqlState, final int 
vendorCode, final String reason, final Object... messageArguments) {
         this(sqlState.getValue(), vendorCode, reason, messageArguments);
     }
     
-    @SuppressWarnings("ConfusingArgumentToVarargsMethod")
-    public ShardingSphereSQLException(final String sqlState, final int 
vendorCode, final String reason, final String... messageArguments) {
+    public ShardingSphereSQLException(final String sqlState, final int 
vendorCode, final String reason, final Object... messageArguments) {
         this.sqlState = sqlState;
         this.vendorCode = vendorCode;
         this.reason = null == reason ? null : String.format(reason, 
messageArguments);
diff --git 
a/shardingsphere-infra/shardingsphere-infra-util/src/main/java/org/apache/shardingsphere/infra/util/exception/sql/sqlstate/XOpenSQLState.java
 
b/shardingsphere-infra/shardingsphere-infra-util/src/main/java/org/apache/shardingsphere/infra/util/exception/sql/sqlstate/XOpenSQLState.java
index 1d05bb1d18e..dc7315e2889 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-util/src/main/java/org/apache/shardingsphere/infra/util/exception/sql/sqlstate/XOpenSQLState.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-util/src/main/java/org/apache/shardingsphere/infra/util/exception/sql/sqlstate/XOpenSQLState.java
@@ -41,6 +41,8 @@ public enum XOpenSQLState implements SQLState {
     
     MISMATCH_INSERT_VALUES_AND_COLUMNS("21S01"),
     
+    INVALID_PARAMETER_VALUE("22023"),
+    
     INVALID_TRANSACTION_STATE("25000"),
     
     INVALID_AUTHORIZATION_SPECIFICATION("28000"),
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/transaction/TransactionBackendHandler.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/transaction/TransactionBackendHandler.java
index 65020e0e082..7c4dbd56bbc 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/transaction/TransactionBackendHandler.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/transaction/TransactionBackendHandler.java
@@ -85,7 +85,7 @@ public final class TransactionBackendHandler implements 
ProxyBackendHandler {
                     if (connectionSession.getDatabaseType() instanceof 
MySQLDatabaseType) {
                         return transactionManager.commit().compose(unused -> 
transactionManager.begin());
                     } else if (connectionSession.getDatabaseType() instanceof 
PostgreSQLDatabaseType || connectionSession.getDatabaseType() instanceof 
OpenGaussDatabaseType) {
-                        return Future.failedFuture(new 
InTransactionException("There is already a transaction in progress."));
+                        return Future.failedFuture(new 
InTransactionException());
                     }
                 }
                 return transactionManager.begin();
@@ -140,7 +140,7 @@ public final class TransactionBackendHandler implements 
ProxyBackendHandler {
             if (connectionSession.getDatabaseType() instanceof 
MySQLDatabaseType) {
                 backendTransactionManager.commit();
             } else if (connectionSession.getDatabaseType() instanceof 
PostgreSQLDatabaseType || connectionSession.getDatabaseType() instanceof 
OpenGaussDatabaseType) {
-                throw new InTransactionException("There is already a 
transaction in progress.");
+                throw new InTransactionException();
             }
         }
         backendTransactionManager.begin();
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-opengauss/src/main/java/org/apache/shardingsphere/proxy/frontend/opengauss/authentication/OpenGaussAuthenticationHandler.java
 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-opengauss/src/main/java/org/apache/shardingsphere/proxy/frontend/opengauss/authentication/OpenGaussAuthenticationHandler.java
index 1429439901f..16840c94201 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-opengauss/src/main/java/org/apache/shardingsphere/proxy/frontend/opengauss/authentication/OpenGaussAuthenticationHandler.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-opengauss/src/main/java/org/apache/shardingsphere/proxy/frontend/opengauss/authentication/OpenGaussAuthenticationHandler.java
@@ -72,7 +72,7 @@ public final class OpenGaussAuthenticationHandler {
      * @param passwordMessagePacket password message packet
      */
     public static void loginWithSCRAMSha256Password(final String username, 
final String databaseName, final String salt, final String nonce, final int 
serverIteration,
-                                                                     final 
PostgreSQLPasswordMessagePacket passwordMessagePacket) {
+                                                    final 
PostgreSQLPasswordMessagePacket passwordMessagePacket) {
         String clientDigest = passwordMessagePacket.getDigest();
         Grantee grantee = new Grantee(username, "%");
         if (!Strings.isNullOrEmpty(databaseName) && 
!ProxyContext.getInstance().databaseExists(databaseName)) {

Reply via email to