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 2022/09/29 04:30:06 UTC

[shardingsphere] branch master updated: Refactor read write split SQL hint (#21226)

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 56d21e6a7be Refactor read write split SQL hint (#21226)
56d21e6a7be is described below

commit 56d21e6a7be71e8526f0da0a4a29dea7d304e376
Author: Zonglei Dong <do...@apache.org>
AuthorDate: Thu Sep 29 12:29:54 2022 +0800

    Refactor read write split SQL hint (#21226)
    
    * Refactor SQL hint, rename SQL hint key name.
    
    * Fixes SQL hint test case.
    
    * Fixes SQL hint test case.
    
    * Fixes SQL hint test case.
---
 .../shardingsphere/infra/hint/SQLHintExtractor.java      |  2 +-
 .../shardingsphere/infra/hint/SQLHintPropertiesKey.java  |  8 ++++----
 .../apache/shardingsphere/infra/hint/SQLHintUtils.java   |  4 ++--
 .../shardingsphere/infra/hint/SQLHintExtractorTest.java  |  6 +++---
 .../shardingsphere/infra/hint/SQLHintUtilsTest.java      | 16 ++++++++--------
 .../algorithm/traffic/hint/SQLHintTrafficAlgorithm.java  |  2 +-
 .../traffic/hint/SQLHintTrafficAlgorithmTest.java        |  4 ++--
 .../shardingsphere/traffic/rule/TrafficRuleTest.java     |  2 +-
 .../encrypt/case/query-with-cipher/dml/update/update.xml |  8 ++++----
 9 files changed, 26 insertions(+), 26 deletions(-)

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 47f475e1e72..1c4b9ca5f09 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
@@ -73,6 +73,6 @@ public final class SQLHintExtractor {
      * @return disable audit names
      */
     public Collection<String> findDisableAuditNames() {
-        return SQLHintUtils.getSplitterSQLHintValue(sqlHintProperties.getValue(SQLHintPropertiesKey.DISABLE_AUDIT_NAMES));
+        return SQLHintUtils.getSplitterSQLHintValue(sqlHintProperties.getValue(SQLHintPropertiesKey.DISABLE_AUDIT_NAMES_KEY));
     }
 }
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 119f5492d29..6a06a9057e1 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
@@ -31,22 +31,22 @@ public enum SQLHintPropertiesKey implements TypedPropertyKey {
     /**
      * Whether hint route write data source or not.
      */
-    WRITE_ROUTE_ONLY_KEY("writeRouteOnly", String.valueOf(Boolean.FALSE), boolean.class),
+    WRITE_ROUTE_ONLY_KEY("WRITE_ROUTE_ONLY", String.valueOf(Boolean.FALSE), boolean.class),
     
     /**
      * Whether to use traffic or not.
      */
-    USE_TRAFFIC("useTraffic", String.valueOf(Boolean.FALSE), boolean.class),
+    USE_TRAFFIC_KEY("USE_TRAFFIC", String.valueOf(Boolean.FALSE), boolean.class),
     
     /**
      * Whether hint skip encrypt rewrite or not.
      */
-    SKIP_ENCRYPT_REWRITE_KEY("skipEncryptRewrite", String.valueOf(Boolean.FALSE), boolean.class),
+    SKIP_ENCRYPT_REWRITE_KEY("SKIP_ENCRYPT_REWRITE", String.valueOf(Boolean.FALSE), boolean.class),
     
     /**
      * Hint disable audit names.
      */
-    DISABLE_AUDIT_NAMES("disableAuditNames", "", String.class);
+    DISABLE_AUDIT_NAMES_KEY("DISABLE_AUDIT_NAMES", "", 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 7f338ac5b2d..593d01bc30a 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
@@ -35,7 +35,7 @@ public final class SQLHintUtils {
     
     private static final String SQL_COMMENT_SUFFIX = "*/";
     
-    private static final String SQL_HINT_TOKEN = "shardingsphere hint:";
+    private static final String SQL_HINT_TOKEN = "shardingsphere_hint:";
     
     private static final String SQL_HINT_SPLIT = ",";
     
@@ -63,7 +63,7 @@ public final class SQLHintUtils {
         for (String each : sqlHints) {
             List<String> hintValues = Splitter.on(SQL_HINT_VALUE_SPLIT).trimResults().splitToList(each);
             if (SQL_HINT_VALUE_SIZE == hintValues.size()) {
-                result.put(hintValues.get(0), hintValues.get(1));
+                result.put(hintValues.get(0).toUpperCase(), hintValues.get(1));
             }
         }
         return result;
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/hint/SQLHintExtractorTest.java b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/hint/SQLHintExtractorTest.java
index 599f4079def..4bced191dca 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/hint/SQLHintExtractorTest.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/hint/SQLHintExtractorTest.java
@@ -36,21 +36,21 @@ public final class SQLHintExtractorTest {
     @Test
     public void assertSQLHintWriteRouteOnly() {
         AbstractSQLStatement statement = mock(AbstractSQLStatement.class);
-        when(statement.getCommentSegments()).thenReturn(Collections.singletonList(new CommentSegment("/* ShardingSphere hint: writeRouteOnly=true */", 0, 0)));
+        when(statement.getCommentSegments()).thenReturn(Collections.singletonList(new CommentSegment("/* SHARDINGSPHERE_HINT: WRITE_ROUTE_ONLY=true */", 0, 0)));
         assertTrue(new SQLHintExtractor(statement).isHintWriteRouteOnly());
     }
     
     @Test
     public void assertSQLHintSkipEncryptRewrite() {
         AbstractSQLStatement statement = mock(AbstractSQLStatement.class);
-        when(statement.getCommentSegments()).thenReturn(Collections.singletonList(new CommentSegment("/* ShardingSphere hint: skipEncryptRewrite=true */", 0, 0)));
+        when(statement.getCommentSegments()).thenReturn(Collections.singletonList(new CommentSegment("/* SHARDINGSPHERE_HINT: SKIP_ENCRYPT_REWRITE=true */", 0, 0)));
         assertTrue(new SQLHintExtractor(statement).isHintSkipEncryptRewrite());
     }
     
     @Test
     public void assertSQLHintDisableAuditNames() {
         AbstractSQLStatement statement = mock(AbstractSQLStatement.class);
-        when(statement.getCommentSegments()).thenReturn(Collections.singletonList(new CommentSegment("/* ShardingSphere hint: disableAuditNames=sharding_audit1 sharding_audit2 */", 0, 0)));
+        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")));
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/hint/SQLHintUtilsTest.java b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/hint/SQLHintUtilsTest.java
index 6e4c3e678fe..a58d093ce33 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/hint/SQLHintUtilsTest.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/hint/SQLHintUtilsTest.java
@@ -36,25 +36,25 @@ public final class SQLHintUtilsTest {
     
     @Test
     public void assertGetSQLHintPropsWithSingleProp() {
-        Properties actual = SQLHintUtils.getSQLHintProps("/* ShardingSphere hint: tableName=t_order */");
+        Properties actual = SQLHintUtils.getSQLHintProps("/* SHARDINGSPHERE_HINT: TABLE_NAME=t_order */");
         assertThat(actual.size(), is(1));
-        assertThat(actual.get("tableName"), is("t_order"));
+        assertThat(actual.get("TABLE_NAME"), is("t_order"));
     }
     
     @Test
     public void assertGetSQLHintPropsWithMultiProps() {
-        Properties actual = SQLHintUtils.getSQLHintProps("/* ShardingSphere hint: tableName=t_order, columnName=order_id */");
+        Properties actual = SQLHintUtils.getSQLHintProps("/* SHARDINGSPHERE_HINT: TABLE_NAME=t_order, COLUMN_NAME=order_id */");
         assertThat(actual.size(), is(2));
-        assertThat(actual.get("tableName"), is("t_order"));
-        assertThat(actual.get("columnName"), is("order_id"));
+        assertThat(actual.get("TABLE_NAME"), is("t_order"));
+        assertThat(actual.get("COLUMN_NAME"), is("order_id"));
     }
     
     @Test
     public void assertGetSQLHintPropsWithWrongFormat() {
-        Properties actual = SQLHintUtils.getSQLHintProps("/* ShardingSphere hint: tableName=t_order, , databaseName:sharding_db, columnName=order_id */");
+        Properties actual = SQLHintUtils.getSQLHintProps("/* SHARDINGSPHERE_HINT: TABLE_NAME=t_order, , DATABASE_NAME:sharding_db, COLUMN_NAME=order_id */");
         assertThat(actual.size(), is(2));
-        assertThat(actual.get("tableName"), is("t_order"));
-        assertThat(actual.get("columnName"), is("order_id"));
+        assertThat(actual.get("TABLE_NAME"), is("t_order"));
+        assertThat(actual.get("COLUMN_NAME"), is("order_id"));
     }
     
     @Test
diff --git a/shardingsphere-kernel/shardingsphere-traffic/shardingsphere-traffic-core/src/main/java/org/apache/shardingsphere/traffic/algorithm/traffic/hint/SQLHintTrafficAlgorithm.java b/shardingsphere-kernel/shardingsphere-traffic/shardingsphere-traffic-core/src/main/java/org/apache/shardingsphere/traffic/algorithm/traffic/hint/SQLHintTrafficAlgorithm.java
index 240e685aba0..d5d974dfbfd 100644
--- a/shardingsphere-kernel/shardingsphere-traffic/shardingsphere-traffic-core/src/main/java/org/apache/shardingsphere/traffic/algorithm/traffic/hint/SQLHintTrafficAlgorithm.java
+++ b/shardingsphere-kernel/shardingsphere-traffic/shardingsphere-traffic-core/src/main/java/org/apache/shardingsphere/traffic/algorithm/traffic/hint/SQLHintTrafficAlgorithm.java
@@ -39,7 +39,7 @@ public final class SQLHintTrafficAlgorithm implements HintTrafficAlgorithm {
     
     @Override
     public boolean match(final HintTrafficValue hintTrafficValue) {
-        return hintTrafficValue.getSqlHintProps().getValue(SQLHintPropertiesKey.USE_TRAFFIC);
+        return hintTrafficValue.getSqlHintProps().getValue(SQLHintPropertiesKey.USE_TRAFFIC_KEY);
     }
     
     @Override
diff --git a/shardingsphere-kernel/shardingsphere-traffic/shardingsphere-traffic-core/src/test/java/org/apache/shardingsphere/traffic/algorithm/traffic/hint/SQLHintTrafficAlgorithmTest.java b/shardingsphere-kernel/shardingsphere-traffic/shardingsphere-traffic-core/src/test/java/org/apache/shardingsphere/traffic/algorithm/traffic/hint/SQLHintTrafficAlgorithmTest.java
index 8ef68316e00..d0db02da123 100644
--- a/shardingsphere-kernel/shardingsphere-traffic/shardingsphere-traffic-core/src/test/java/org/apache/shardingsphere/traffic/algorithm/traffic/hint/SQLHintTrafficAlgorithmTest.java
+++ b/shardingsphere-kernel/shardingsphere-traffic/shardingsphere-traffic-core/src/test/java/org/apache/shardingsphere/traffic/algorithm/traffic/hint/SQLHintTrafficAlgorithmTest.java
@@ -31,14 +31,14 @@ public final class SQLHintTrafficAlgorithmTest {
     @Test
     public void assertMatchWhenSQLHintAllMatch() {
         Properties props = new Properties();
-        props.put("useTraffic", Boolean.TRUE.toString());
+        props.put("USE_TRAFFIC", Boolean.TRUE.toString());
         assertTrue(new SQLHintTrafficAlgorithm().match(new HintTrafficValue(new SQLHintProperties(props))));
     }
     
     @Test
     public void assertMatchWhenSQLHintOneMatch() {
         Properties props = new Properties();
-        props.put("useTraffic", Boolean.FALSE.toString());
+        props.put("USE_TRAFFIC", Boolean.FALSE.toString());
         assertFalse(new SQLHintTrafficAlgorithm().match(new HintTrafficValue(new SQLHintProperties(props))));
     }
 }
diff --git a/shardingsphere-kernel/shardingsphere-traffic/shardingsphere-traffic-core/src/test/java/org/apache/shardingsphere/traffic/rule/TrafficRuleTest.java b/shardingsphere-kernel/shardingsphere-traffic/shardingsphere-traffic-core/src/test/java/org/apache/shardingsphere/traffic/rule/TrafficRuleTest.java
index 31ebd7ed98b..6052aac1d2c 100644
--- a/shardingsphere-kernel/shardingsphere-traffic/shardingsphere-traffic-core/src/test/java/org/apache/shardingsphere/traffic/rule/TrafficRuleTest.java
+++ b/shardingsphere-kernel/shardingsphere-traffic/shardingsphere-traffic-core/src/test/java/org/apache/shardingsphere/traffic/rule/TrafficRuleTest.java
@@ -84,7 +84,7 @@ public final class TrafficRuleTest {
     private QueryContext createQueryContext(final boolean includeComments) {
         QueryContext result = mock(QueryContext.class);
         MySQLSelectStatement sqlStatement = mock(MySQLSelectStatement.class);
-        when(sqlStatement.getCommentSegments()).thenReturn(includeComments ? Collections.singleton(new CommentSegment("/* ShardingSphere hint: useTraffic=true */", 0, 0)) : Collections.emptyList());
+        when(sqlStatement.getCommentSegments()).thenReturn(includeComments ? Collections.singleton(new CommentSegment("/* SHARDINGSPHERE_HINT: USE_TRAFFIC=true */", 0, 0)) : Collections.emptyList());
         when(sqlStatement.getProjections()).thenReturn(new ProjectionsSegment(0, 0));
         SQLStatementContext statementContext = new SelectStatementContext(
                 Collections.singletonMap("sharding_db", mock(ShardingSphereDatabase.class)), Collections.emptyList(), sqlStatement, "sharding_db");
diff --git a/shardingsphere-test/shardingsphere-rewrite-test/src/test/resources/scenario/encrypt/case/query-with-cipher/dml/update/update.xml b/shardingsphere-test/shardingsphere-rewrite-test/src/test/resources/scenario/encrypt/case/query-with-cipher/dml/update/update.xml
index fe99df8c154..150015a7937 100644
--- a/shardingsphere-test/shardingsphere-rewrite-test/src/test/resources/scenario/encrypt/case/query-with-cipher/dml/update/update.xml
+++ b/shardingsphere-test/shardingsphere-rewrite-test/src/test/resources/scenario/encrypt/case/query-with-cipher/dml/update/update.xml
@@ -50,13 +50,13 @@
     </rewrite-assertion>
     
     <rewrite-assertion id="update_blank_to_clear_plain_with_skip_encrypt_rewrite_true" db-types="MySQL">
-        <input sql="/*shardingsphere hint: skipEncryptRewrite=true*/UPDATE t_account_bak SET certificate_number = '', status = 'OK'" />
-        <output sql="/*shardingsphere hint: skipEncryptRewrite=true*/UPDATE t_account_bak SET certificate_number = '', status = 'OK'" />
+        <input sql="/*SHARDINGSPHERE_HINT: SKIP_ENCRYPT_REWRITE=true*/UPDATE t_account_bak SET certificate_number = '', status = 'OK'" />
+        <output sql="/*SHARDINGSPHERE_HINT: SKIP_ENCRYPT_REWRITE=true*/UPDATE t_account_bak SET certificate_number = '', status = 'OK'" />
     </rewrite-assertion>
     
     <rewrite-assertion id="update_blank_to_clear_plain_with_skip_encrypt_rewrite_false" db-types="MySQL">
-        <input sql="/*shardingsphere hint: skipEncryptRewrite=false*/UPDATE t_account_bak SET certificate_number = '', status = 'OK'" />
-        <output sql="/*shardingsphere hint: skipEncryptRewrite=false*/UPDATE t_account_bak SET cipher_certificate_number = 'encrypt_', assisted_query_certificate_number = 'assisted_query_', plain_certificate_number = '', status = 'OK'" />
+        <input sql="/*SHARDINGSPHERE_HINT: SKIP_ENCRYPT_REWRITE=false*/UPDATE t_account_bak SET certificate_number = '', status = 'OK'" />
+        <output sql="/*SHARDINGSPHERE_HINT: SKIP_ENCRYPT_REWRITE=false*/UPDATE t_account_bak SET cipher_certificate_number = 'encrypt_', assisted_query_certificate_number = 'assisted_query_', plain_certificate_number = '', status = 'OK'" />
     </rewrite-assertion>
     
     <rewrite-assertion id="update_blank_to_clear_plain_with_normal_skip_encrypt_rewrite_hint" db-types="MySQL">