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

duanzhengqiang 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 f537f7f2d5e add hint disableAuditNames (#18751)
f537f7f2d5e is described below

commit f537f7f2d5e8156dae679f3072000e4757afc90e
Author: natehuang <[email protected]>
AuthorDate: Fri Jul 1 11:29:05 2022 +0800

    add hint disableAuditNames (#18751)
---
 .../sharding/checker/audit/ShardingAuditChecker.java        |  9 +++++++++
 .../apache/shardingsphere/infra/hint/SQLHintExtractor.java  | 10 ++++++++++
 .../shardingsphere/infra/hint/SQLHintPropertiesKey.java     |  7 ++++++-
 .../org/apache/shardingsphere/infra/hint/SQLHintUtils.java  | 13 +++++++++++++
 4 files changed, 38 insertions(+), 1 deletion(-)

diff --git 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/checker/audit/ShardingAuditChecker.java
 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/checker/audit/ShardingAuditChecker.java
index f897cef0e46..734ddcd89c7 100644
--- 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/checker/audit/ShardingAuditChecker.java
+++ 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/checker/audit/ShardingAuditChecker.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.sharding.checker.audit;
 
+import 
org.apache.shardingsphere.infra.binder.statement.CommonSQLStatementContext;
 import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
 import org.apache.shardingsphere.infra.check.SQLCheckResult;
 import org.apache.shardingsphere.infra.executor.check.SQLChecker;
@@ -25,6 +26,8 @@ import org.apache.shardingsphere.infra.metadata.user.Grantee;
 import org.apache.shardingsphere.sharding.constant.ShardingOrder;
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
 
+import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.function.BiPredicate;
@@ -42,7 +45,13 @@ public final class ShardingAuditChecker implements 
SQLChecker<ShardingRule> {
     @Override
     public SQLCheckResult check(final SQLStatementContext<?> 
sqlStatementContext, final List<Object> parameters, final Grantee grantee,
                                 final String currentDatabase, final 
Map<String, ShardingSphereDatabase> databases, final ShardingRule rule) {
+        Collection<String> disableAuditNames = sqlStatementContext instanceof 
CommonSQLStatementContext
+                ? ((CommonSQLStatementContext<?>) 
sqlStatementContext).getSqlHintExtractor().findDisableAuditNames()
+                : Collections.emptyList();
         for (String each : 
rule.getAuditStrategyConfig().getAuditAlgorithmNames()) {
+            if (rule.getAuditStrategyConfig().isAllowHintDisable() && 
disableAuditNames.contains(each.toLowerCase())) {
+                continue;
+            }
             SQLCheckResult result = 
rule.getAuditAlgorithms().get(each).check(sqlStatementContext, parameters, 
grantee, databases.get(currentDatabase));
             if (!result.isPassed()) {
                 return result;
diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/hint/SQLHintExtractor.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/hint/SQLHintExtractor.java
index c023ef97cf8..eaa2e573d16 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/hint/SQLHintExtractor.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/hint/SQLHintExtractor.java
@@ -22,6 +22,7 @@ import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.CommentSe
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 
+import java.util.Collection;
 import java.util.Properties;
 
 /**
@@ -64,4 +65,13 @@ public final class SQLHintExtractor {
     public boolean isHintSkipEncryptRewrite() {
         return 
sqlHintProperties.getValue(SQLHintPropertiesKey.SKIP_ENCRYPT_REWRITE_KEY);
     }
+    
+    /**
+     * Find hint disable audit names.
+     *
+     * @return disable audit names
+     */
+    public Collection<String> findDisableAuditNames() {
+        return 
SQLHintUtils.getSplitterSQLHintValue(sqlHintProperties.getValue(SQLHintPropertiesKey.DISABLE_AUDIT_NAMES));
+    }
 }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/hint/SQLHintPropertiesKey.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/hint/SQLHintPropertiesKey.java
index 4a94830be97..1616da6452b 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/hint/SQLHintPropertiesKey.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/hint/SQLHintPropertiesKey.java
@@ -41,7 +41,12 @@ public enum SQLHintPropertiesKey implements TypedPropertyKey 
{
     /**
      * Whether hint skip encrypt rewrite or not.
      */
-    SKIP_ENCRYPT_REWRITE_KEY("skipEncryptRewrite", 
String.valueOf(Boolean.FALSE), boolean.class);
+    SKIP_ENCRYPT_REWRITE_KEY("skipEncryptRewrite", 
String.valueOf(Boolean.FALSE), boolean.class),
+    
+    /**
+     * Hint disable audit names.
+     */
+    DISABLE_AUDIT_NAMES("disableAuditNames", "", String.class);
     
     private final String key;
     
diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/hint/SQLHintUtils.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/hint/SQLHintUtils.java
index d78b738e71b..a88b48e30e1 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/hint/SQLHintUtils.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/hint/SQLHintUtils.java
@@ -23,6 +23,7 @@ import lombok.NoArgsConstructor;
 
 import java.util.Collection;
 import java.util.List;
+import java.util.HashSet;
 import java.util.Properties;
 
 /**
@@ -39,6 +40,8 @@ public final class SQLHintUtils {
     
     private static final String SQL_HINT_VALUE_SPLIT = "=";
     
+    private static final String SQL_HINT_VALUE_COLLECTION_SPLIT = " ";
+    
     private static final int SQL_HINT_VALUE_SIZE = 2;
     
     /**
@@ -64,4 +67,14 @@ public final class SQLHintUtils {
         }
         return result;
     }
+    
+    /**
+     * Get splitter SQL hint Value.
+     *
+     * @param value SQL hint value
+     * @return Splitter SQL hint value
+     */
+    public static Collection<String> getSplitterSQLHintValue(final String 
value) {
+        return new 
HashSet<>(Splitter.on(SQLHintUtils.SQL_HINT_VALUE_COLLECTION_SPLIT).omitEmptyStrings().trimResults().splitToList(value));
+    }
 }

Reply via email to