You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2023/06/25 09:08:13 UTC

[shardingsphere] branch master updated: Remove SQLHintExtractor (#26539)

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 5dbc236759b Remove SQLHintExtractor (#26539)
5dbc236759b is described below

commit 5dbc236759b0bb48099fcdc1d10376e13aec164f
Author: Chuxin Chen <ch...@qq.com>
AuthorDate: Sun Jun 25 17:08:06 2023 +0800

    Remove SQLHintExtractor (#26539)
---
 .../shadow/hint/SQLHintShadowAlgorithm.java        |   5 +-
 .../standard/ShardingStandardRoutingEngine.java    |  15 +-
 .../infra/hint/HintValueContext.java               |  59 +++++++
 .../infra/hint/SQLHintExtractor.java               | 143 -----------------
 .../shardingsphere/infra/hint/SQLHintUtils.java    |  14 +-
 .../infra/hint/SQLHintExtractorTest.java           | 170 ---------------------
 .../infra/hint/SQLHintUtilsTest.java               |  90 +++++++++++
 7 files changed, 163 insertions(+), 333 deletions(-)

diff --git a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/algorithm/shadow/hint/SQLHintShadowAlgorithm.java b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/algorithm/shadow/hint/SQLHintShadowAlgorithm.java
index ee7270da727..fa7bf125a22 100644
--- a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/algorithm/shadow/hint/SQLHintShadowAlgorithm.java
+++ b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/algorithm/shadow/hint/SQLHintShadowAlgorithm.java
@@ -17,7 +17,8 @@
 
 package org.apache.shardingsphere.shadow.algorithm.shadow.hint;
 
-import org.apache.shardingsphere.infra.hint.SQLHintExtractor;
+import org.apache.shardingsphere.infra.hint.HintValueContext;
+import org.apache.shardingsphere.infra.hint.SQLHintUtils;
 import org.apache.shardingsphere.shadow.api.shadow.ShadowOperationType;
 import org.apache.shardingsphere.shadow.api.shadow.hint.HintShadowAlgorithm;
 import org.apache.shardingsphere.shadow.api.shadow.hint.PreciseHintShadowValue;
@@ -32,7 +33,7 @@ public final class SQLHintShadowAlgorithm implements HintShadowAlgorithm<String>
     @Override
     public boolean isShadow(final Collection<String> shadowTableNames, final PreciseHintShadowValue<String> noteShadowValue) {
         if (ShadowOperationType.HINT_MATCH == noteShadowValue.getShadowOperationType() || shadowTableNames.contains(noteShadowValue.getLogicTableName())) {
-            return new SQLHintExtractor(noteShadowValue.getValue()).isShadow();
+            return SQLHintUtils.extractHint(noteShadowValue.getValue()).map(HintValueContext::isShadow).orElse(false);
         }
         return false;
     }
diff --git a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/type/standard/ShardingStandardRoutingEngine.java b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/type/standard/ShardingStandardRoutingEngine.java
index 6eefd27f5c7..769d055fa4c 100644
--- a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/type/standard/ShardingStandardRoutingEngine.java
+++ b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/type/standard/ShardingStandardRoutingEngine.java
@@ -22,7 +22,6 @@ import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import org.apache.shardingsphere.infra.datanode.DataNode;
 import org.apache.shardingsphere.infra.hint.HintManager;
 import org.apache.shardingsphere.infra.hint.HintValueContext;
-import org.apache.shardingsphere.infra.hint.SQLHintExtractor;
 import org.apache.shardingsphere.infra.route.context.RouteContext;
 import org.apache.shardingsphere.infra.route.context.RouteMapper;
 import org.apache.shardingsphere.infra.route.context.RouteUnit;
@@ -68,7 +67,7 @@ public final class ShardingStandardRoutingEngine implements ShardingRouteEngine
     
     private final Collection<Collection<DataNode>> originalDataNodes = new LinkedList<>();
     
-    private final SQLHintExtractor sqlHintExtractor;
+    private final HintValueContext hintValueContext;
     
     public ShardingStandardRoutingEngine(final String logicTableName, final ShardingConditions shardingConditions, final SQLStatementContext sqlStatementContext,
                                          final HintValueContext hintValueContext, final ConfigurationProperties props) {
@@ -76,7 +75,7 @@ public final class ShardingStandardRoutingEngine implements ShardingRouteEngine
         this.shardingConditions = shardingConditions;
         this.sqlStatementContext = sqlStatementContext;
         this.props = props;
-        this.sqlHintExtractor = new SQLHintExtractor(sqlStatementContext.getSqlStatement(), hintValueContext);
+        this.hintValueContext = hintValueContext;
     }
     
     @Override
@@ -113,7 +112,7 @@ public final class ShardingStandardRoutingEngine implements ShardingRouteEngine
     private boolean isRoutingBySQLHint() {
         Collection<String> tableNames = sqlStatementContext.getTablesContext().getTableNames();
         for (String each : tableNames) {
-            if (sqlHintExtractor.containsHintShardingValue(each)) {
+            if (hintValueContext.containsHintShardingValue(each)) {
                 return true;
             }
         }
@@ -203,8 +202,8 @@ public final class ShardingStandardRoutingEngine implements ShardingRouteEngine
         Collection<Comparable<?>> shardingValues = new LinkedList<>();
         Collection<String> tableNames = sqlStatementContext.getTablesContext().getTableNames();
         for (String each : tableNames) {
-            if (each.equals(logicTableName) && sqlHintExtractor.containsHintShardingDatabaseValue(each)) {
-                shardingValues.addAll(sqlHintExtractor.getHintShardingDatabaseValue(each));
+            if (each.equals(logicTableName) && hintValueContext.containsHintShardingDatabaseValue(each)) {
+                shardingValues.addAll(hintValueContext.getHintShardingDatabaseValue(each));
             }
         }
         return getShardingConditions(shardingValues);
@@ -221,8 +220,8 @@ public final class ShardingStandardRoutingEngine implements ShardingRouteEngine
         Collection<Comparable<?>> shardingValues = new LinkedList<>();
         Collection<String> tableNames = sqlStatementContext.getTablesContext().getTableNames();
         for (String each : tableNames) {
-            if (each.equals(logicTableName) && sqlHintExtractor.containsHintShardingTableValue(each)) {
-                shardingValues.addAll(sqlHintExtractor.getHintShardingTableValue(each));
+            if (each.equals(logicTableName) && hintValueContext.containsHintShardingTableValue(each)) {
+                shardingValues.addAll(hintValueContext.getHintShardingTableValue(each));
             }
         }
         return getShardingConditions(shardingValues);
diff --git a/infra/common/src/main/java/org/apache/shardingsphere/infra/hint/HintValueContext.java b/infra/common/src/main/java/org/apache/shardingsphere/infra/hint/HintValueContext.java
index 0372a3cf41b..beedb5c7d3e 100644
--- a/infra/common/src/main/java/org/apache/shardingsphere/infra/hint/HintValueContext.java
+++ b/infra/common/src/main/java/org/apache/shardingsphere/infra/hint/HintValueContext.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.infra.hint;
 
+import com.google.common.base.Joiner;
 import com.google.common.collect.ArrayListMultimap;
 import com.google.common.collect.Multimap;
 import lombok.Getter;
@@ -69,4 +70,62 @@ public final class HintValueContext {
     public Optional<String> findHintDataSourceName() {
         return dataSourceName.isEmpty() ? Optional.empty() : Optional.of(dataSourceName);
     }
+    
+    /**
+     * Judge contains hint sharding databases value or not.
+     *
+     * @param tableName table name
+     * @return contains hint sharding databases value or not
+     */
+    public boolean containsHintShardingDatabaseValue(final String tableName) {
+        String key = Joiner.on(".").join(tableName.toUpperCase(), SQLHintPropertiesKey.SHARDING_DATABASE_VALUE_KEY.getKey());
+        return shardingDatabaseValues.containsKey(key) || shardingDatabaseValues.containsKey(SQLHintPropertiesKey.SHARDING_DATABASE_VALUE_KEY.getKey());
+    }
+    
+    /**
+     * Judge contains hint sharding table value or not.
+     *
+     * @param tableName table name
+     * @return Contains hint sharding table value or not
+     */
+    public boolean containsHintShardingTableValue(final String tableName) {
+        String key = Joiner.on(".").join(tableName.toUpperCase(), SQLHintPropertiesKey.SHARDING_TABLE_VALUE_KEY.getKey());
+        return shardingTableValues.containsKey(key) || shardingTableValues.containsKey(SQLHintPropertiesKey.SHARDING_TABLE_VALUE_KEY.getKey());
+    }
+    
+    /**
+     * Judge contains hint sharding value or not.
+     *
+     * @param tableName table name
+     * @return Contains hint sharding value or not
+     */
+    public boolean containsHintShardingValue(final String tableName) {
+        return containsHintShardingDatabaseValue(tableName) || containsHintShardingTableValue(tableName);
+    }
+    
+    /**
+     * Get hint sharding table value.
+     *
+     * @param tableName table name
+     * @return sharding table value
+     */
+    public Collection<Comparable<?>> getHintShardingTableValue(final String tableName) {
+        String key = String.join(".", tableName.toUpperCase(), SQLHintPropertiesKey.SHARDING_TABLE_VALUE_KEY.getKey());
+        return shardingTableValues.containsKey(key)
+                ? shardingTableValues.get(key)
+                : shardingTableValues.get(SQLHintPropertiesKey.SHARDING_TABLE_VALUE_KEY.getKey());
+    }
+    
+    /**
+     * Get hint sharding database value.
+     *
+     * @param tableName table name
+     * @return sharding database value
+     */
+    public Collection<Comparable<?>> getHintShardingDatabaseValue(final String tableName) {
+        String key = String.join(".", tableName.toUpperCase(), SQLHintPropertiesKey.SHARDING_DATABASE_VALUE_KEY.getKey());
+        return shardingDatabaseValues.containsKey(key)
+                ? shardingDatabaseValues.get(key)
+                : shardingDatabaseValues.get(SQLHintPropertiesKey.SHARDING_DATABASE_VALUE_KEY.getKey());
+    }
 }
diff --git a/infra/common/src/main/java/org/apache/shardingsphere/infra/hint/SQLHintExtractor.java b/infra/common/src/main/java/org/apache/shardingsphere/infra/hint/SQLHintExtractor.java
deleted file mode 100644
index 443fdb107b0..00000000000
--- a/infra/common/src/main/java/org/apache/shardingsphere/infra/hint/SQLHintExtractor.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * 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.hint;
-
-import com.google.common.base.Joiner;
-import com.google.common.base.Strings;
-import lombok.Getter;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
-
-import java.util.Collection;
-
-/**
- * SQL hint extractor.
- */
-@Getter
-public final class SQLHintExtractor {
-    
-    private final HintValueContext hintValueContext;
-    
-    public SQLHintExtractor(final String sqlComment) {
-        hintValueContext = Strings.isNullOrEmpty(sqlComment) ? new HintValueContext() : SQLHintUtils.extractHint(sqlComment).orElseGet(HintValueContext::new);
-    }
-    
-    public SQLHintExtractor(final SQLStatement sqlStatement) {
-        this(sqlStatement, new HintValueContext());
-    }
-    
-    public SQLHintExtractor(final SQLStatement sqlStatement, final HintValueContext hintValueContext) {
-        this.hintValueContext = sqlStatement instanceof AbstractSQLStatement && !((AbstractSQLStatement) sqlStatement).getCommentSegments().isEmpty()
-                ? SQLHintUtils.extractHint(((AbstractSQLStatement) sqlStatement).getCommentSegments().iterator().next().getText()).orElse(hintValueContext)
-                : hintValueContext;
-    }
-    
-    /**
-     * Judge whether is hint routed to write data source or not.
-     *
-     * @return whether is hint routed to write data source or not
-     */
-    public boolean isHintWriteRouteOnly() {
-        return hintValueContext.isWriteRouteOnly();
-    }
-    
-    /**
-     * Judge whether hint skip sql rewrite or not.
-     *
-     * @return whether hint skip sql rewrite or not
-     */
-    public boolean isHintSkipSQLRewrite() {
-        return hintValueContext.isSkipSQLRewrite();
-    }
-    
-    /**
-     * Judge whether is hint routed to shadow data source or not.
-     *
-     * @return whether is hint routed to shadow data source or not
-     */
-    public boolean isShadow() {
-        return hintValueContext.isShadow();
-    }
-    
-    /**
-     * Find hint disable audit names.
-     *
-     * @return disable audit names
-     */
-    public Collection<String> findDisableAuditNames() {
-        return SQLHintUtils.getSplitterSQLHintValue(hintValueContext.getDisableAuditNames());
-    }
-    
-    /**
-     * Get hint sharding database value.
-     *
-     * @param tableName table name
-     * @return sharding database value
-     */
-    public Collection<Comparable<?>> getHintShardingDatabaseValue(final String tableName) {
-        String key = String.join(".", tableName.toUpperCase(), SQLHintPropertiesKey.SHARDING_DATABASE_VALUE_KEY.getKey());
-        return hintValueContext.getShardingDatabaseValues().containsKey(key)
-                ? hintValueContext.getShardingDatabaseValues().get(key)
-                : hintValueContext.getShardingDatabaseValues().get(SQLHintPropertiesKey.SHARDING_DATABASE_VALUE_KEY.getKey());
-    }
-    
-    /**
-     * Judge contains hint sharding databases value or not.
-     *
-     * @param tableName table name
-     * @return contains hint sharding databases value or not
-     */
-    public boolean containsHintShardingDatabaseValue(final String tableName) {
-        String key = Joiner.on(".").join(tableName.toUpperCase(), SQLHintPropertiesKey.SHARDING_DATABASE_VALUE_KEY.getKey());
-        return hintValueContext.getShardingDatabaseValues().containsKey(key) || hintValueContext.getShardingDatabaseValues().containsKey(SQLHintPropertiesKey.SHARDING_DATABASE_VALUE_KEY.getKey());
-    }
-    
-    /**
-     * Get hint sharding table value.
-     *
-     * @param tableName table name
-     * @return sharding table value
-     */
-    public Collection<Comparable<?>> getHintShardingTableValue(final String tableName) {
-        String key = String.join(".", tableName.toUpperCase(), SQLHintPropertiesKey.SHARDING_TABLE_VALUE_KEY.getKey());
-        return hintValueContext.getShardingTableValues().containsKey(key)
-                ? hintValueContext.getShardingTableValues().get(key)
-                : hintValueContext.getShardingTableValues().get(SQLHintPropertiesKey.SHARDING_TABLE_VALUE_KEY.getKey());
-    }
-    
-    /**
-     * Judge contains hint sharding table value or not.
-     *
-     * @param tableName table name
-     * @return Contains hint sharding table value or not
-     */
-    public boolean containsHintShardingTableValue(final String tableName) {
-        String key = Joiner.on(".").join(tableName.toUpperCase(), SQLHintPropertiesKey.SHARDING_TABLE_VALUE_KEY.getKey());
-        return hintValueContext.getShardingTableValues().containsKey(key) || hintValueContext.getShardingTableValues().containsKey(SQLHintPropertiesKey.SHARDING_TABLE_VALUE_KEY.getKey());
-    }
-    
-    /**
-     * Judge contains hint sharding value or not.
-     *
-     * @param tableName table name
-     * @return Contains hint sharding value or not
-     */
-    public boolean containsHintShardingValue(final String tableName) {
-        return containsHintShardingDatabaseValue(tableName) || containsHintShardingTableValue(tableName);
-    }
-}
diff --git a/infra/common/src/main/java/org/apache/shardingsphere/infra/hint/SQLHintUtils.java b/infra/common/src/main/java/org/apache/shardingsphere/infra/hint/SQLHintUtils.java
index 7541368ac6d..5ee411150bd 100644
--- a/infra/common/src/main/java/org/apache/shardingsphere/infra/hint/SQLHintUtils.java
+++ b/infra/common/src/main/java/org/apache/shardingsphere/infra/hint/SQLHintUtils.java
@@ -47,16 +47,6 @@ public final class SQLHintUtils {
     
     private static final int SQL_HINT_VALUE_SIZE = 2;
     
-    /**
-     * Whether the SQL statement starts with the hint prefix.
-     *
-     * @param sql SQL statement
-     * @return whether starts with hint prefix
-     */
-    public static boolean startWithHint(final String sql) {
-        return sql.startsWith(SQLHintTokenEnum.SQL_START_HINT_TOKEN.getKey()) || sql.startsWith(SQLHintTokenEnum.SQL_START_HINT_TOKEN.getAlias());
-    }
-    
     /**
      * Get SQL hint props.
      *
@@ -145,6 +135,10 @@ public final class SQLHintUtils {
         return Optional.of(result);
     }
     
+    private static boolean startWithHint(final String sql) {
+        return sql.startsWith(SQLHintTokenEnum.SQL_START_HINT_TOKEN.getKey()) || sql.startsWith(SQLHintTokenEnum.SQL_START_HINT_TOKEN.getAlias());
+    }
+    
     private static boolean containsPropertyKey(final Properties hintProperties, final SQLHintPropertiesKey sqlHintPropertiesKey) {
         return hintProperties.containsKey(sqlHintPropertiesKey.getKey()) || hintProperties.containsKey(sqlHintPropertiesKey.getAlias());
     }
diff --git a/infra/common/src/test/java/org/apache/shardingsphere/infra/hint/SQLHintExtractorTest.java b/infra/common/src/test/java/org/apache/shardingsphere/infra/hint/SQLHintExtractorTest.java
deleted file mode 100644
index ea3a00244a0..00000000000
--- a/infra/common/src/test/java/org/apache/shardingsphere/infra/hint/SQLHintExtractorTest.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * 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.hint;
-
-import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.CommentSegment;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
-import org.junit.jupiter.api.Test;
-
-import java.math.BigInteger;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Optional;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-class SQLHintExtractorTest {
-    
-    @Test
-    void assertSQLHintWriteRouteOnly() {
-        AbstractSQLStatement statement = mock(AbstractSQLStatement.class);
-        when(statement.getCommentSegments()).thenReturn(Collections.singletonList(new CommentSegment("/* SHARDINGSPHERE_HINT: WRITE_ROUTE_ONLY=true */", 0, 0)));
-        assertTrue(new SQLHintExtractor(statement).isHintWriteRouteOnly());
-    }
-    
-    @Test
-    void assertSQLHintSkipSQLRewrite() {
-        AbstractSQLStatement statement = mock(AbstractSQLStatement.class);
-        when(statement.getCommentSegments()).thenReturn(Collections.singletonList(new CommentSegment("/* SHARDINGSPHERE_HINT: SKIP_SQL_REWRITE=true */", 0, 0)));
-        assertTrue(new SQLHintExtractor(statement).isHintSkipSQLRewrite());
-    }
-    
-    @Test
-    void assertSQLHintSkipSQLRewriteWithCommentString() {
-        assertTrue(new SQLHintExtractor("/* SHARDINGSPHERE_HINT: SKIP_SQL_REWRITE=true */").isHintSkipSQLRewrite());
-    }
-    
-    @Test
-    void assertSQLHintDisableAuditNames() {
-        AbstractSQLStatement statement = mock(AbstractSQLStatement.class);
-        when(statement.getCommentSegments()).thenReturn(Collections.singletonList(new CommentSegment("/* SHARDINGSPHERE_HINT: DISABLE_AUDIT_NAMES=sharding_audit1 sharding_audit2 */", 0, 0)));
-        Collection<String> actual = new SQLHintExtractor(statement).findDisableAuditNames();
-        assertThat(actual.size(), is(2));
-        assertTrue(actual.containsAll(Arrays.asList("sharding_audit1", "sharding_audit2")));
-    }
-    
-    @Test
-    void assertSQLHintDisableAuditNamesWithCommentString() {
-        Collection<String> actual = new SQLHintExtractor("/* SHARDINGSPHERE_HINT: DISABLE_AUDIT_NAMES=sharding_audit1 sharding_audit2 */").findDisableAuditNames();
-        assertThat(actual.size(), is(2));
-        assertTrue(actual.containsAll(Arrays.asList("sharding_audit1", "sharding_audit2")));
-    }
-    
-    @Test
-    void assertSQLHintShardingDatabaseValue() {
-        AbstractSQLStatement statement = mock(AbstractSQLStatement.class);
-        when(statement.getCommentSegments()).thenReturn(Collections.singletonList(new CommentSegment("/* SHARDINGSPHERE_HINT: SHARDING_DATABASE_VALUE=10 */", 0, 0)));
-        assertThat(new SQLHintExtractor(statement).getHintShardingDatabaseValue("t_order"), is(Collections.singletonList(new BigInteger("10"))));
-    }
-    
-    @Test
-    void assertSQLHintShardingDatabaseValueWithTableName() {
-        AbstractSQLStatement statement = mock(AbstractSQLStatement.class);
-        when(statement.getCommentSegments()).thenReturn(Collections.singletonList(new CommentSegment("/* SHARDINGSPHERE_HINT: t_order.SHARDING_DATABASE_VALUE=10 */", 0, 0)));
-        assertThat(new SQLHintExtractor(statement).getHintShardingDatabaseValue("t_order"), is(Collections.singletonList(new BigInteger("10"))));
-    }
-    
-    @Test
-    void assertSQLHintShardingDatabaseValueWithCommentString() {
-        assertThat(new SQLHintExtractor("/* SHARDINGSPHERE_HINT: SHARDING_DATABASE_VALUE=10 */").getHintShardingDatabaseValue("t_order"), is(Collections.singletonList(new BigInteger("10"))));
-    }
-    
-    @Test
-    void assertSQLHintShardingDatabaseValueWithStringHintValue() {
-        AbstractSQLStatement statement = mock(AbstractSQLStatement.class);
-        when(statement.getCommentSegments()).thenReturn(Collections.singletonList(new CommentSegment("/* SHARDINGSPHERE_HINT: t_order.SHARDING_DATABASE_VALUE=a */", 0, 0)));
-        assertThat(new SQLHintExtractor(statement).getHintShardingDatabaseValue("t_order"), is(Collections.singletonList("a")));
-    }
-    
-    @Test
-    void assertSQLHintShardingTableValue() {
-        AbstractSQLStatement statement = mock(AbstractSQLStatement.class);
-        when(statement.getCommentSegments()).thenReturn(Collections.singletonList(new CommentSegment("/* SHARDINGSPHERE_HINT: SHARDING_TABLE_VALUE=10 */", 0, 0)));
-        assertThat(new SQLHintExtractor(statement).getHintShardingTableValue("t_order"), is(Collections.singletonList(new BigInteger("10"))));
-    }
-    
-    @Test
-    void assertSQLHintShardingTableValueWithCommentString() {
-        assertThat(new SQLHintExtractor("/* SHARDINGSPHERE_HINT: SHARDING_TABLE_VALUE=10 */").getHintShardingTableValue("t_order"), is(Collections.singletonList(new BigInteger("10"))));
-    }
-    
-    @Test
-    void assertSQLHintShardingTableValueWithTableName() {
-        AbstractSQLStatement statement = mock(AbstractSQLStatement.class);
-        when(statement.getCommentSegments()).thenReturn(Collections.singletonList(new CommentSegment("/* SHARDINGSPHERE_HINT: t_order.SHARDING_TABLE_VALUE=10 */", 0, 0)));
-        assertThat(new SQLHintExtractor(statement).getHintShardingTableValue("t_order"), is(Collections.singletonList(new BigInteger("10"))));
-    }
-    
-    @Test
-    void assertSQLHintShardingTableValueWithStringHintValue() {
-        AbstractSQLStatement statement = mock(AbstractSQLStatement.class);
-        when(statement.getCommentSegments()).thenReturn(Collections.singletonList(new CommentSegment("/* SHARDINGSPHERE_HINT: t_order.SHARDING_TABLE_VALUE=a */", 0, 0)));
-        assertThat(new SQLHintExtractor(statement).getHintShardingTableValue("t_order"), is(Collections.singletonList("a")));
-    }
-    
-    @Test
-    void assertSQLHintShadow() {
-        AbstractSQLStatement statement = mock(AbstractSQLStatement.class);
-        when(statement.getCommentSegments()).thenReturn(Collections.singletonList(new CommentSegment("/* SHARDINGSPHERE_HINT: SHADOW=true */", 0, 0)));
-        assertTrue(new SQLHintExtractor(statement).isShadow());
-    }
-    
-    @Test
-    void assertSQLHintShadowWithCommentString() {
-        assertTrue(new SQLHintExtractor("/* SHARDINGSPHERE_HINT: SHADOW=true */").isShadow());
-    }
-    
-    @Test
-    void assertFindHintDataSourceNameExist() {
-        AbstractSQLStatement statement = mock(AbstractSQLStatement.class);
-        when(statement.getCommentSegments()).thenReturn(Collections.singletonList(new CommentSegment("/* SHARDINGSPHERE_HINT: DATA_SOURCE_NAME=ds_1 */", 0, 0)));
-        Optional<String> dataSourceName = new SQLHintExtractor(statement).getHintValueContext().findHintDataSourceName();
-        assertTrue(dataSourceName.isPresent());
-        assertThat(dataSourceName.get(), is("ds_1"));
-    }
-    
-    @Test
-    void assertFindHintDataSourceNameAliasExist() {
-        AbstractSQLStatement statement = mock(AbstractSQLStatement.class);
-        when(statement.getCommentSegments()).thenReturn(Collections.singletonList(new CommentSegment("/* ShardingSphere hint: dataSourceName=ds_1 */", 0, 0)));
-        Optional<String> dataSourceName = new SQLHintExtractor(statement).getHintValueContext().findHintDataSourceName();
-        assertTrue(dataSourceName.isPresent());
-        assertThat(dataSourceName.get(), is("ds_1"));
-    }
-    
-    @Test
-    void assertFindHintDataSourceNameNotExist() {
-        AbstractSQLStatement statement = mock(AbstractSQLStatement.class);
-        when(statement.getCommentSegments()).thenReturn(Collections.singletonList(new CommentSegment("/* no hint */", 0, 0)));
-        Optional<String> dataSourceName = new SQLHintExtractor(statement).getHintValueContext().findHintDataSourceName();
-        assertFalse(dataSourceName.isPresent());
-    }
-    
-    @Test
-    void assertFindHintDataSourceNameNotExistWithoutComment() {
-        AbstractSQLStatement statement = mock(AbstractSQLStatement.class);
-        Optional<String> dataSourceName = new SQLHintExtractor(statement).getHintValueContext().findHintDataSourceName();
-        assertFalse(dataSourceName.isPresent());
-    }
-}
diff --git a/infra/common/src/test/java/org/apache/shardingsphere/infra/hint/SQLHintUtilsTest.java b/infra/common/src/test/java/org/apache/shardingsphere/infra/hint/SQLHintUtilsTest.java
index 953acac4360..ec466175917 100644
--- a/infra/common/src/test/java/org/apache/shardingsphere/infra/hint/SQLHintUtilsTest.java
+++ b/infra/common/src/test/java/org/apache/shardingsphere/infra/hint/SQLHintUtilsTest.java
@@ -19,13 +19,16 @@ package org.apache.shardingsphere.infra.hint;
 
 import org.junit.jupiter.api.Test;
 
+import java.math.BigInteger;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Optional;
 import java.util.Properties;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 class SQLHintUtilsTest {
@@ -85,4 +88,91 @@ class SQLHintUtilsTest {
         assertTrue(actual.isPresent());
         assertTrue(actual.get().isWriteRouteOnly());
     }
+    
+    @Test
+    void assertSQLHintSkipSQLRewrite() {
+        Optional<HintValueContext> actual = SQLHintUtils.extractHint("/* SHARDINGSPHERE_HINT: SKIP_SQL_REWRITE=true */");
+        assertTrue(actual.isPresent());
+        assertTrue(actual.get().isSkipSQLRewrite());
+    }
+    
+    @Test
+    void assertSQLHintDisableAuditNames() {
+        Optional<HintValueContext> actual = SQLHintUtils.extractHint("/* SHARDINGSPHERE_HINT: DISABLE_AUDIT_NAMES=sharding_audit1 sharding_audit2 */");
+        assertTrue(actual.isPresent());
+        Collection<String> actualDisableAuditNames = SQLHintUtils.getSplitterSQLHintValue(actual.get().getDisableAuditNames());
+        assertThat(actualDisableAuditNames.size(), is(2));
+        assertTrue(actualDisableAuditNames.containsAll(Arrays.asList("sharding_audit1", "sharding_audit2")));
+    }
+    
+    @Test
+    void assertSQLHintShardingDatabaseValue() {
+        Optional<HintValueContext> actual = SQLHintUtils.extractHint("/* SHARDINGSPHERE_HINT: SHARDING_DATABASE_VALUE=10 */");
+        assertTrue(actual.isPresent());
+        assertThat(actual.get().getHintShardingDatabaseValue("t_order"), is(Collections.singletonList(new BigInteger("10"))));
+    }
+    
+    @Test
+    void assertSQLHintShardingDatabaseValueWithTableName() {
+        Optional<HintValueContext> actual = SQLHintUtils.extractHint("/* SHARDINGSPHERE_HINT: t_order.SHARDING_DATABASE_VALUE=10 */");
+        assertTrue(actual.isPresent());
+        assertThat(actual.get().getHintShardingDatabaseValue("t_order"), is(Collections.singletonList(new BigInteger("10"))));
+    }
+    
+    @Test
+    void assertSQLHintShardingDatabaseValueWithStringHintValue() {
+        Optional<HintValueContext> actual = SQLHintUtils.extractHint("/* SHARDINGSPHERE_HINT: t_order.SHARDING_DATABASE_VALUE=a */");
+        assertTrue(actual.isPresent());
+        assertThat(actual.get().getHintShardingDatabaseValue("t_order"), is(Collections.singletonList("a")));
+    }
+    
+    @Test
+    void assertSQLHintShardingTableValue() {
+        Optional<HintValueContext> actual = SQLHintUtils.extractHint("/* SHARDINGSPHERE_HINT: SHARDING_TABLE_VALUE=10 */");
+        assertTrue(actual.isPresent());
+        assertThat(actual.get().getHintShardingTableValue("t_order"), is(Collections.singletonList(new BigInteger("10"))));
+    }
+    
+    @Test
+    void assertSQLHintShardingTableValueWithTableName() {
+        Optional<HintValueContext> actual = SQLHintUtils.extractHint("/* SHARDINGSPHERE_HINT: t_order.SHARDING_TABLE_VALUE=10 */");
+        assertTrue(actual.isPresent());
+        assertThat(actual.get().getHintShardingTableValue("t_order"), is(Collections.singletonList(new BigInteger("10"))));
+    }
+    
+    @Test
+    void assertSQLHintShardingTableValueWithStringHintValue() {
+        Optional<HintValueContext> actual = SQLHintUtils.extractHint("/* SHARDINGSPHERE_HINT: t_order.SHARDING_TABLE_VALUE=a */");
+        assertTrue(actual.isPresent());
+        assertThat(actual.get().getHintShardingTableValue("t_order"), is(Collections.singletonList("a")));
+    }
+    
+    @Test
+    void assertSQLHintShadow() {
+        Optional<HintValueContext> actual = SQLHintUtils.extractHint("/* SHARDINGSPHERE_HINT: SHADOW=true */");
+        assertTrue(actual.isPresent());
+        assertTrue(actual.get().isShadow());
+    }
+    
+    @Test
+    void assertFindHintDataSourceNameExist() {
+        Optional<HintValueContext> actual = SQLHintUtils.extractHint("/* SHARDINGSPHERE_HINT: DATA_SOURCE_NAME=ds_1 */");
+        assertTrue(actual.isPresent());
+        assertTrue(actual.get().findHintDataSourceName().isPresent());
+        assertThat(actual.get().findHintDataSourceName().get(), is("ds_1"));
+    }
+    
+    @Test
+    void assertFindHintDataSourceNameAliasExist() {
+        Optional<HintValueContext> actual = SQLHintUtils.extractHint("/* ShardingSphere hint: dataSourceName=ds_1 */");
+        assertTrue(actual.isPresent());
+        assertTrue(actual.get().findHintDataSourceName().isPresent());
+        assertThat(actual.get().findHintDataSourceName().get(), is("ds_1"));
+    }
+    
+    @Test
+    void assertFindHintDataSourceNameNotExist() {
+        Optional<HintValueContext> actual = SQLHintUtils.extractHint("/* no hint */");
+        assertFalse(actual.isPresent());
+    }
 }