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));
+ }
}