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

wuweijie 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 d3e7d1236c1 Add SQLExceptionIdentifier (#30651)
d3e7d1236c1 is described below

commit d3e7d1236c1a7212a4d4307641f94672e4fbdfd6
Author: Liang Zhang <zhangli...@apache.org>
AuthorDate: Tue Mar 26 13:10:55 2024 +0800

    Add SQLExceptionIdentifier (#30651)
    
    * Use UnregisteredAlgorithmException on  
ReadwriteSplittingRuleConfigurationChecker
    
    * Add SQLExceptionIdentifier
    
    * Add SQLExceptionIdentifier
---
 .../user-manual/error-code/sql-error-code.cn.md    |  4 +-
 .../user-manual/error-code/sql-error-code.en.md    |  4 +-
 .../checker/EncryptRuleConfigurationChecker.java   | 13 +++---
 .../mask/checker/MaskRuleConfigurationChecker.java |  3 +-
 ...ReadwriteSplittingRuleConfigurationChecker.java |  3 +-
 .../exception/EmptyAlgorithmOnColumnException.java |  5 ++-
 .../exception/UnregisteredAlgorithmException.java  |  9 ++--
 .../sql/identifier/SQLExceptionIdentifier.java     | 52 ++++++++++++++++++++++
 .../identifier/SQLExceptionIdentifierTest.java}    | 28 +++++++-----
 9 files changed, 91 insertions(+), 30 deletions(-)

diff --git a/docs/document/content/user-manual/error-code/sql-error-code.cn.md 
b/docs/document/content/user-manual/error-code/sql-error-code.cn.md
index 0d43dee8368..15c42ca1bdb 100644
--- a/docs/document/content/user-manual/error-code/sql-error-code.cn.md
+++ b/docs/document/content/user-manual/error-code/sql-error-code.cn.md
@@ -23,8 +23,8 @@ SQL 错误码以标准的 SQL State,Vendor Code 和详细错误信息提供,
 | 42S02     | 10007       | Table or view \`%s\` does not exist.               
                            |
 | 42000     | 10010       | Rule does not exist.                               
                            |
 | 44000     | 10011       | Algorithm '%s.'%s' initialization failed, reason 
is: %s.                       |
-| 44000     | 10012       | '%s' algorithm on database.table.column: 
'%s'.'%s'.'%s' is required.           |
-| 42S02     | 10013       | '%s' algorithm '%s' on database.table.column: 
'%s'.'%s'.'%s' is unregistered.  |
+| 44000     | 10012       | '%s' algorithm on %s is required.                  
                            |
+| 42S02     | 10013       | '%s' algorithm '%s' on %s is unregistered.         
                            |
 | HY000     | 10015       | Algorithm '%s.%s' execute failed, reason is: %s.   
                            |
 | 42S02     | 10020       | Schema \`%s\` does not exist.                      
                            |
 | 42S02     | 10021       | Single table \`%s\` does not exist.                
                            |
diff --git a/docs/document/content/user-manual/error-code/sql-error-code.en.md 
b/docs/document/content/user-manual/error-code/sql-error-code.en.md
index 7f5fcd4850a..9ce9f252c86 100644
--- a/docs/document/content/user-manual/error-code/sql-error-code.en.md
+++ b/docs/document/content/user-manual/error-code/sql-error-code.en.md
@@ -23,8 +23,8 @@ SQL error codes provide by standard `SQL State`, `Vendor 
Code` and `Reason`, whi
 | 42S02     | 10007       | Table or view \`%s\` does not exist.               
                            |
 | 42000     | 10010       | Rule does not exist.                               
                            |
 | 44000     | 10011       | Algorithm '%s.'%s' initialization failed, reason 
is: %s.                       |
-| 44000     | 10012       | '%s' algorithm on database.table.column: 
'%s'.'%s'.'%s' is required.           |
-| 42S02     | 10013       | '%s' algorithm '%s' on database.table.column: 
'%s'.'%s'.'%s' is unregistered.  |
+| 44000     | 10012       | '%s' algorithm on %s is required.                  
                            |
+| 42S02     | 10013       | '%s' algorithm '%s' on %s is unregistered.         
                            |
 | HY000     | 10015       | Algorithm '%s.%s' execute failed, reason is: %s.   
                            |
 | 42S02     | 10020       | Schema \`%s\` does not exist.                      
                            |
 | 42S02     | 10021       | Single table \`%s\` does not exist.                
                            |
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/checker/EncryptRuleConfigurationChecker.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/checker/EncryptRuleConfigurationChecker.java
index 0912cea66c7..0dd8a7d1b85 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/checker/EncryptRuleConfigurationChecker.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/checker/EncryptRuleConfigurationChecker.java
@@ -32,6 +32,7 @@ import 
org.apache.shardingsphere.infra.algorithm.core.exception.EmptyAlgorithmOn
 import 
org.apache.shardingsphere.infra.algorithm.core.exception.UnregisteredAlgorithmException;
 import 
org.apache.shardingsphere.infra.config.rule.checker.RuleConfigurationChecker;
 import 
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
+import 
org.apache.shardingsphere.infra.exception.core.external.sql.identifier.SQLExceptionIdentifier;
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 
@@ -73,27 +74,27 @@ public final class EncryptRuleConfigurationChecker 
implements RuleConfigurationC
                                    final EncryptColumnItemRuleConfiguration 
cipherColumnConfig, final Map<String, AlgorithmConfiguration> encryptors) {
         
ShardingSpherePreconditions.checkState(!Strings.isNullOrEmpty(cipherColumnConfig.getName()),
 () -> new EncryptCipherColumnNotFoundException(logicColumnName, databaseName));
         
ShardingSpherePreconditions.checkState(!Strings.isNullOrEmpty(cipherColumnConfig.getEncryptorName()),
-                () -> new EmptyAlgorithmOnColumnException("Standard encrypt", 
databaseName, tableName, logicColumnName));
+                () -> new EmptyAlgorithmOnColumnException("Standard encrypt", 
new SQLExceptionIdentifier(databaseName, tableName, logicColumnName)));
         
ShardingSpherePreconditions.checkState(encryptors.containsKey(cipherColumnConfig.getEncryptorName()),
-                () -> new UnregisteredAlgorithmException("Standard encrypt", 
cipherColumnConfig.getEncryptorName(), databaseName, tableName, 
logicColumnName));
+                () -> new UnregisteredAlgorithmException("Standard encrypt", 
cipherColumnConfig.getEncryptorName(), new SQLExceptionIdentifier(databaseName, 
tableName, logicColumnName)));
     }
     
     private void checkAssistColumn(final String databaseName, final String 
tableName, final String logicColumnName,
                                    final EncryptColumnItemRuleConfiguration 
assistedQueryColumnConfig, final Map<String, AlgorithmConfiguration> 
encryptors) {
         
ShardingSpherePreconditions.checkState(!Strings.isNullOrEmpty(assistedQueryColumnConfig.getName()),
 () -> new EncryptAssistedQueryColumnNotFoundException(logicColumnName, 
databaseName));
         
ShardingSpherePreconditions.checkState(!Strings.isNullOrEmpty(assistedQueryColumnConfig.getEncryptorName()),
-                () -> new EmptyAlgorithmOnColumnException("Assist query 
encrypt", databaseName, tableName, logicColumnName));
+                () -> new EmptyAlgorithmOnColumnException("Assist query 
encrypt", new SQLExceptionIdentifier(databaseName, tableName, 
logicColumnName)));
         
ShardingSpherePreconditions.checkState(encryptors.containsKey(assistedQueryColumnConfig.getEncryptorName()),
-                () -> new UnregisteredAlgorithmException("Assist query 
encrypt", assistedQueryColumnConfig.getEncryptorName(), databaseName, 
tableName, logicColumnName));
+                () -> new UnregisteredAlgorithmException("Assist query 
encrypt", assistedQueryColumnConfig.getEncryptorName(), new 
SQLExceptionIdentifier(databaseName, tableName, logicColumnName)));
     }
     
     private void checkLikeColumn(final String databaseName, final String 
tableName, final String logicColumnName,
                                  final EncryptColumnItemRuleConfiguration 
likeQueryColumnConfig, final Map<String, AlgorithmConfiguration> encryptors) {
         
ShardingSpherePreconditions.checkState(!Strings.isNullOrEmpty(likeQueryColumnConfig.getName()),
 () -> new EncryptLikeQueryColumnNotFoundException(logicColumnName, 
databaseName));
         
ShardingSpherePreconditions.checkState(!Strings.isNullOrEmpty(likeQueryColumnConfig.getEncryptorName()),
-                () -> new EmptyAlgorithmOnColumnException("Like query", 
databaseName, tableName, logicColumnName));
+                () -> new EmptyAlgorithmOnColumnException("Like query", new 
SQLExceptionIdentifier(databaseName, tableName, logicColumnName)));
         
ShardingSpherePreconditions.checkState(encryptors.containsKey(likeQueryColumnConfig.getEncryptorName()),
-                () -> new UnregisteredAlgorithmException("Like query encrypt", 
likeQueryColumnConfig.getEncryptorName(), databaseName, tableName, 
logicColumnName));
+                () -> new UnregisteredAlgorithmException("Like query encrypt", 
likeQueryColumnConfig.getEncryptorName(), new 
SQLExceptionIdentifier(databaseName, tableName, logicColumnName)));
     }
     
     @Override
diff --git 
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/checker/MaskRuleConfigurationChecker.java
 
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/checker/MaskRuleConfigurationChecker.java
index d7cfda42b7e..494aa0862ec 100644
--- 
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/checker/MaskRuleConfigurationChecker.java
+++ 
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/checker/MaskRuleConfigurationChecker.java
@@ -21,6 +21,7 @@ import 
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfigurat
 import 
org.apache.shardingsphere.infra.algorithm.core.exception.UnregisteredAlgorithmException;
 import 
org.apache.shardingsphere.infra.config.rule.checker.RuleConfigurationChecker;
 import 
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
+import 
org.apache.shardingsphere.infra.exception.core.external.sql.identifier.SQLExceptionIdentifier;
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.mask.api.config.MaskRuleConfiguration;
@@ -59,7 +60,7 @@ public final class MaskRuleConfigurationChecker implements 
RuleConfigurationChec
     
     private void checkColumn(final String databaseName, final String 
tableName, final MaskColumnRuleConfiguration columnRuleConfig, final 
Map<String, AlgorithmConfiguration> maskAlgorithms) {
         
ShardingSpherePreconditions.checkState(maskAlgorithms.containsKey(columnRuleConfig.getMaskAlgorithm()),
-                () -> new UnregisteredAlgorithmException("Mask", 
columnRuleConfig.getMaskAlgorithm(), databaseName, tableName, 
columnRuleConfig.getLogicColumn()));
+                () -> new UnregisteredAlgorithmException("Mask", 
columnRuleConfig.getMaskAlgorithm(), new SQLExceptionIdentifier(databaseName, 
tableName, columnRuleConfig.getLogicColumn())));
     }
     
     @Override
diff --git 
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/checker/ReadwriteSplittingRuleConfigurationChecker.java
 
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/checker/ReadwriteSplittingRuleConfigurationChecker.java
index 12f02038692..866d817056a 100644
--- 
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/checker/ReadwriteSplittingRuleConfigurationChecker.java
+++ 
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/checker/ReadwriteSplittingRuleConfigurationChecker.java
@@ -22,6 +22,7 @@ import 
org.apache.shardingsphere.infra.algorithm.core.exception.UnregisteredAlgo
 import 
org.apache.shardingsphere.infra.algorithm.loadbalancer.core.LoadBalanceAlgorithm;
 import 
org.apache.shardingsphere.infra.config.rule.checker.RuleConfigurationChecker;
 import 
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
+import 
org.apache.shardingsphere.infra.exception.core.external.sql.identifier.SQLExceptionIdentifier;
 import org.apache.shardingsphere.infra.expr.core.InlineExpressionParserFactory;
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import 
org.apache.shardingsphere.infra.rule.attribute.datasource.DataSourceMapperRuleAttribute;
@@ -107,7 +108,7 @@ public final class 
ReadwriteSplittingRuleConfigurationChecker implements RuleCon
                 continue;
             }
             LoadBalanceAlgorithm loadBalancer = 
loadBalancers.get(each.getLoadBalancerName());
-            ShardingSpherePreconditions.checkNotNull(loadBalancer, () -> new 
UnregisteredAlgorithmException("Load balancer", each.getLoadBalancerName(), 
databaseName));
+            ShardingSpherePreconditions.checkNotNull(loadBalancer, () -> new 
UnregisteredAlgorithmException("Load balancer", each.getLoadBalancerName(), new 
SQLExceptionIdentifier(databaseName)));
             loadBalancer.check(databaseName, each.getReadDataSourceNames());
         }
     }
diff --git 
a/infra/algorithm/core/src/main/java/org/apache/shardingsphere/infra/algorithm/core/exception/EmptyAlgorithmOnColumnException.java
 
b/infra/algorithm/core/src/main/java/org/apache/shardingsphere/infra/algorithm/core/exception/EmptyAlgorithmOnColumnException.java
index b2de509faf7..006600e60ee 100644
--- 
a/infra/algorithm/core/src/main/java/org/apache/shardingsphere/infra/algorithm/core/exception/EmptyAlgorithmOnColumnException.java
+++ 
b/infra/algorithm/core/src/main/java/org/apache/shardingsphere/infra/algorithm/core/exception/EmptyAlgorithmOnColumnException.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.infra.algorithm.core.exception;
 
+import 
org.apache.shardingsphere.infra.exception.core.external.sql.identifier.SQLExceptionIdentifier;
 import 
org.apache.shardingsphere.infra.exception.core.external.sql.sqlstate.XOpenSQLState;
 import 
org.apache.shardingsphere.infra.exception.core.external.sql.type.kernel.category.MetaDataSQLException;
 
@@ -27,7 +28,7 @@ public final class EmptyAlgorithmOnColumnException extends 
MetaDataSQLException
     
     private static final long serialVersionUID = 8128067899672436211L;
     
-    public EmptyAlgorithmOnColumnException(final String algorithmType, final 
String databaseName, final String tableName, final String columnName) {
-        super(XOpenSQLState.NOT_FOUND, 12, "'%s' algorithm on 
database.table.column: '%s'.'%s'.'%s' is required.", algorithmType, 
databaseName, tableName, columnName);
+    public EmptyAlgorithmOnColumnException(final String algorithmType, final 
SQLExceptionIdentifier sqlExceptionIdentifier) {
+        super(XOpenSQLState.NOT_FOUND, 12, "'%s' algorithm on %s is 
required.", algorithmType, sqlExceptionIdentifier);
     }
 }
diff --git 
a/infra/algorithm/core/src/main/java/org/apache/shardingsphere/infra/algorithm/core/exception/UnregisteredAlgorithmException.java
 
b/infra/algorithm/core/src/main/java/org/apache/shardingsphere/infra/algorithm/core/exception/UnregisteredAlgorithmException.java
index 29f25c71a1a..5a08a6093fe 100644
--- 
a/infra/algorithm/core/src/main/java/org/apache/shardingsphere/infra/algorithm/core/exception/UnregisteredAlgorithmException.java
+++ 
b/infra/algorithm/core/src/main/java/org/apache/shardingsphere/infra/algorithm/core/exception/UnregisteredAlgorithmException.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.infra.algorithm.core.exception;
 
+import 
org.apache.shardingsphere.infra.exception.core.external.sql.identifier.SQLExceptionIdentifier;
 import 
org.apache.shardingsphere.infra.exception.core.external.sql.sqlstate.XOpenSQLState;
 import 
org.apache.shardingsphere.infra.exception.core.external.sql.type.kernel.category.MetaDataSQLException;
 
@@ -27,11 +28,7 @@ public final class UnregisteredAlgorithmException extends 
MetaDataSQLException {
     
     private static final long serialVersionUID = -4570489906443880879L;
     
-    public UnregisteredAlgorithmException(final String algorithmType, final 
String algorithmName, final String databaseName) {
-        super(XOpenSQLState.NOT_FOUND, 13, "'%s' algorithm '%s' on database: 
'%s' is unregistered.", algorithmType, algorithmName, databaseName);
-    }
-    
-    public UnregisteredAlgorithmException(final String algorithmType, final 
String algorithmName, final String databaseName, final String tableName, final 
String columnName) {
-        super(XOpenSQLState.NOT_FOUND, 13, "'%s' algorithm '%s' on 
database.table.column: '%s'.'%s'.'%s' is unregistered.", algorithmType, 
algorithmName, databaseName, tableName, columnName);
+    public UnregisteredAlgorithmException(final String algorithmType, final 
String algorithmName, final SQLExceptionIdentifier sqlExceptionIdentifier) {
+        super(XOpenSQLState.NOT_FOUND, 13, "'%s' algorithm '%s' on %s is 
unregistered.", algorithmType, algorithmName, sqlExceptionIdentifier);
     }
 }
diff --git 
a/infra/exception/core/src/main/java/org/apache/shardingsphere/infra/exception/core/external/sql/identifier/SQLExceptionIdentifier.java
 
b/infra/exception/core/src/main/java/org/apache/shardingsphere/infra/exception/core/external/sql/identifier/SQLExceptionIdentifier.java
new file mode 100644
index 00000000000..62e0269ade1
--- /dev/null
+++ 
b/infra/exception/core/src/main/java/org/apache/shardingsphere/infra/exception/core/external/sql/identifier/SQLExceptionIdentifier.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.infra.exception.core.external.sql.identifier;
+
+import lombok.RequiredArgsConstructor;
+
+/**
+ * SQL Exception identifier.
+ */
+@RequiredArgsConstructor
+public final class SQLExceptionIdentifier {
+    
+    private final String database;
+    
+    private final String table;
+    
+    private final String column;
+    
+    public SQLExceptionIdentifier(final String database) {
+        this(database, null, null);
+    }
+    
+    public SQLExceptionIdentifier(final String database, final String table) {
+        this(database, table, null);
+    }
+    
+    @Override
+    public String toString() {
+        if (null != table && null != column) {
+            return String.format("database.table.column: '%s'.'%s'.'%s'", 
database, table, column);
+        }
+        if (null != table) {
+            return String.format("database.table: '%s'.'%s'", database, table);
+        }
+        return String.format("database: '%s'", database);
+    }
+}
diff --git 
a/infra/algorithm/core/src/main/java/org/apache/shardingsphere/infra/algorithm/core/exception/EmptyAlgorithmOnColumnException.java
 
b/infra/exception/core/src/test/java/org/apache/shardingsphere/infra/exception/core/external/sql/identifier/SQLExceptionIdentifierTest.java
similarity index 51%
copy from 
infra/algorithm/core/src/main/java/org/apache/shardingsphere/infra/algorithm/core/exception/EmptyAlgorithmOnColumnException.java
copy to 
infra/exception/core/src/test/java/org/apache/shardingsphere/infra/exception/core/external/sql/identifier/SQLExceptionIdentifierTest.java
index b2de509faf7..1807b711e78 100644
--- 
a/infra/algorithm/core/src/main/java/org/apache/shardingsphere/infra/algorithm/core/exception/EmptyAlgorithmOnColumnException.java
+++ 
b/infra/exception/core/src/test/java/org/apache/shardingsphere/infra/exception/core/external/sql/identifier/SQLExceptionIdentifierTest.java
@@ -15,19 +15,27 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.infra.algorithm.core.exception;
+package org.apache.shardingsphere.infra.exception.core.external.sql.identifier;
 
-import 
org.apache.shardingsphere.infra.exception.core.external.sql.sqlstate.XOpenSQLState;
-import 
org.apache.shardingsphere.infra.exception.core.external.sql.type.kernel.category.MetaDataSQLException;
+import org.junit.jupiter.api.Test;
 
-/**
- * Empty algorithm on column exception.
- */
-public final class EmptyAlgorithmOnColumnException extends 
MetaDataSQLException {
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+class SQLExceptionIdentifierTest {
     
-    private static final long serialVersionUID = 8128067899672436211L;
+    @Test
+    void assertToStringForColumnIdentifier() {
+        assertThat(new SQLExceptionIdentifier("foo_db", "foo_tbl", 
"foo_col").toString(), is("database.table.column: 
'foo_db'.'foo_tbl'.'foo_col'"));
+    }
+    
+    @Test
+    void assertToStringForTableIdentifier() {
+        assertThat(new SQLExceptionIdentifier("foo_db", "foo_tbl").toString(), 
is("database.table: 'foo_db'.'foo_tbl'"));
+    }
     
-    public EmptyAlgorithmOnColumnException(final String algorithmType, final 
String databaseName, final String tableName, final String columnName) {
-        super(XOpenSQLState.NOT_FOUND, 12, "'%s' algorithm on 
database.table.column: '%s'.'%s'.'%s' is required.", algorithmType, 
databaseName, tableName, columnName);
+    @Test
+    void assertToStringForDatabaseIdentifier() {
+        assertThat(new SQLExceptionIdentifier("foo_db").toString(), 
is("database: 'foo_db'"));
     }
 }

Reply via email to