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/10/01 07:47:18 UTC

[shardingsphere] branch master updated: Add sharding SQL hint key. (#21283)

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 ac855fbd256 Add sharding SQL hint key. (#21283)
ac855fbd256 is described below

commit ac855fbd25602a7b4316e80ba4fcf3ad70e04fdb
Author: Zonglei Dong <do...@apache.org>
AuthorDate: Sat Oct 1 15:47:10 2022 +0800

    Add sharding SQL hint key. (#21283)
    
    * Add sharding SQL hint key.
    
    * Fixes checkstyle problem.
---
 .../infra/hint/SQLHintExtractor.java               | 47 ++++++++++++++++++++++
 .../infra/hint/SQLHintPropertiesKey.java           | 12 +++++-
 .../infra/hint/SQLHintExtractorTest.java           | 32 +++++++++++++++
 3 files changed, 90 insertions(+), 1 deletion(-)

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 1c4b9ca5f09..ac960899de8 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
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.infra.hint;
 
+import com.google.common.base.Joiner;
 import lombok.Getter;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.CommentSegment;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
@@ -75,4 +76,50 @@ public final class SQLHintExtractor {
     public Collection<String> findDisableAuditNames() {
         return SQLHintUtils.getSplitterSQLHintValue(sqlHintProperties.getValue(SQLHintPropertiesKey.DISABLE_AUDIT_NAMES_KEY));
     }
+    
+    /**
+     * Get hint sharding database value.
+     *
+     * @return sharding database value
+     */
+    public int getHintShardingDatabaseValue() {
+        return sqlHintProperties.getValue(SQLHintPropertiesKey.SHARDING_DATABASE_VALUE_KEY);
+    }
+    
+    /**
+     * Get hint sharding database value.
+     *
+     * @param tableName table name
+     * @return sharding database value
+     */
+    public int getHintShardingDatabaseValue(final String tableName) {
+        String key = Joiner.on(".").join(tableName.toUpperCase(), SQLHintPropertiesKey.SHARDING_DATABASE_VALUE_KEY.getKey());
+        if (sqlHintProperties.getProps().containsKey(key)) {
+            return Integer.valueOf(sqlHintProperties.getProps().getProperty(key));
+        }
+        return sqlHintProperties.getValue(SQLHintPropertiesKey.SHARDING_DATABASE_VALUE_KEY);
+    }
+    
+    /**
+     * Get hint sharding table value.
+     *
+     * @return sharding table value
+     */
+    public int getHintShardingTableValue() {
+        return sqlHintProperties.getValue(SQLHintPropertiesKey.SHARDING_TABLE_VALUE_KEY);
+    }
+    
+    /**
+     * Get hint sharding table value.
+     *
+     * @param tableName table name
+     * @return sharding table value
+     */
+    public int getHintShardingTableValue(final String tableName) {
+        String key = Joiner.on(".").join(tableName.toUpperCase(), SQLHintPropertiesKey.SHARDING_TABLE_VALUE_KEY.getKey());
+        if (sqlHintProperties.getProps().containsKey(key)) {
+            return Integer.valueOf(sqlHintProperties.getProps().getProperty(key));
+        }
+        return sqlHintProperties.getValue(SQLHintPropertiesKey.SHARDING_TABLE_VALUE_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 6a06a9057e1..2d491ad0ef8 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
@@ -46,7 +46,17 @@ public enum SQLHintPropertiesKey implements TypedPropertyKey {
     /**
      * Hint disable audit names.
      */
-    DISABLE_AUDIT_NAMES_KEY("DISABLE_AUDIT_NAMES", "", String.class);
+    DISABLE_AUDIT_NAMES_KEY("DISABLE_AUDIT_NAMES", "", String.class),
+    
+    /**
+     * Hint sharding database value.
+     */
+    SHARDING_DATABASE_VALUE_KEY("SHARDING_DATABASE_VALUE", "0", int.class),
+    
+    /**
+     * Hint sharding table value.
+     */
+    SHARDING_TABLE_VALUE_KEY("SHARDING_TABLE_VALUE", "0", int.class);
     
     private final String key;
     
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 4bced191dca..9df5436063e 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
@@ -55,4 +55,36 @@ public final class SQLHintExtractorTest {
         assertThat(actual.size(), is(2));
         assertTrue(actual.containsAll(Arrays.asList("sharding_audit1", "sharding_audit2")));
     }
+    
+    @Test
+    public void assertSQLHintShardingDatabaseValue() {
+        AbstractSQLStatement statement = mock(AbstractSQLStatement.class);
+        when(statement.getCommentSegments()).thenReturn(Collections.singletonList(new CommentSegment("/* SHARDINGSPHERE_HINT: SHARDING_DATABASE_VALUE=100 */", 0, 0)));
+        int actual = new SQLHintExtractor(statement).getHintShardingDatabaseValue();
+        assertThat(actual, is(100));
+    }
+    
+    @Test
+    public 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)));
+        int actual = new SQLHintExtractor(statement).getHintShardingDatabaseValue("t_order");
+        assertThat(actual, is(10));
+    }
+    
+    @Test
+    public void assertSQLHintShardingTableValue() {
+        AbstractSQLStatement statement = mock(AbstractSQLStatement.class);
+        when(statement.getCommentSegments()).thenReturn(Collections.singletonList(new CommentSegment("/* SHARDINGSPHERE_HINT: SHARDING_TABLE_VALUE=100 */", 0, 0)));
+        int actual = new SQLHintExtractor(statement).getHintShardingTableValue();
+        assertThat(actual, is(100));
+    }
+    
+    @Test
+    public 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)));
+        int actual = new SQLHintExtractor(statement).getHintShardingTableValue("t_order");
+        assertThat(actual, is(10));
+    }
 }