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

jianglongtao 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 e5a0f8446c7 Make CREATE SHARDING TABLE RULE support 
NoneShardingStrategy (#24059)
e5a0f8446c7 is described below

commit e5a0f8446c76f3f38bfb9f23eff2531417c183a9
Author: Zichao <[email protected]>
AuthorDate: Tue Feb 14 10:26:26 2023 +0800

    Make CREATE SHARDING TABLE RULE support NoneShardingStrategy (#24059)
---
 .../checker/ShardingTableRuleStatementChecker.java  |  4 ++--
 .../ShardingTableRuleStatementConverter.java        |  4 ++++
 .../checker/ShardingRuleStatementCheckerTest.java   | 16 ++++++++++++++++
 .../ShardingRuleStatementConverterTest.java         | 21 +++++++++++++++++++++
 .../src/main/antlr4/imports/sharding/Keyword.g4     |  4 ++++
 .../main/antlr4/imports/sharding/RDLStatement.g4    |  3 ++-
 .../core/ShardingDistSQLStatementVisitor.java       |  3 +++
 7 files changed, 52 insertions(+), 3 deletions(-)

diff --git 
a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/checker/ShardingTableRuleStatementChecker.java
 
b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/checker/ShardingTableRuleStatementChecker.java
index 36b346dc80b..c086c7b6040 100644
--- 
a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/checker/ShardingTableRuleStatementChecker.java
+++ 
b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/checker/ShardingTableRuleStatementChecker.java
@@ -305,7 +305,7 @@ public final class ShardingTableRuleStatementChecker {
     private static void checkStrategy(final String databaseName, final 
Collection<TableRuleSegment> rules) {
         rules.forEach(each -> {
             Optional<ShardingStrategySegment> databaseStrategySegment = 
Optional.ofNullable(each.getDatabaseStrategySegment());
-            if (databaseStrategySegment.isPresent()) {
+            if (databaseStrategySegment.isPresent() && 
!databaseStrategySegment.get().getType().equalsIgnoreCase("none")) {
                 AlgorithmSegment databaseShardingAlgorithm = 
databaseStrategySegment.get().getShardingAlgorithm();
                 if (null != databaseShardingAlgorithm) {
                     ShardingAlgorithm shardingAlgorithm = 
TypedSPILoader.getService(ShardingAlgorithm.class, 
databaseShardingAlgorithm.getName(), databaseShardingAlgorithm.getProps());
@@ -318,7 +318,7 @@ public final class ShardingTableRuleStatementChecker {
                                 null == databaseShardingAlgorithm ? null : 
databaseShardingAlgorithm.getName()));
             }
             Optional<ShardingStrategySegment> tableStrategySegment = 
Optional.ofNullable(each.getTableStrategySegment());
-            if (tableStrategySegment.isPresent()) {
+            if (tableStrategySegment.isPresent() && 
!tableStrategySegment.get().getType().equalsIgnoreCase("none")) {
                 AlgorithmSegment tableShardingAlgorithm = 
tableStrategySegment.get().getShardingAlgorithm();
                 if (null != tableShardingAlgorithm) {
                     ShardingAlgorithm shardingAlgorithm = 
TypedSPILoader.getService(ShardingAlgorithm.class, 
tableShardingAlgorithm.getName(), tableShardingAlgorithm.getProps());
diff --git 
a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/converter/ShardingTableRuleStatementConverter.java
 
b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/converter/ShardingTableRuleStatementConverter.java
index dd3b43db298..ec9358260b7 100644
--- 
a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/converter/ShardingTableRuleStatementConverter.java
+++ 
b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/converter/ShardingTableRuleStatementConverter.java
@@ -26,6 +26,7 @@ import 
org.apache.shardingsphere.sharding.api.config.rule.ShardingAutoTableRuleC
 import 
org.apache.shardingsphere.sharding.api.config.rule.ShardingTableRuleConfiguration;
 import 
org.apache.shardingsphere.sharding.api.config.strategy.audit.ShardingAuditStrategyConfiguration;
 import 
org.apache.shardingsphere.sharding.api.config.strategy.keygen.KeyGenerateStrategyConfiguration;
+import 
org.apache.shardingsphere.sharding.api.config.strategy.sharding.NoneShardingStrategyConfiguration;
 import 
org.apache.shardingsphere.sharding.api.config.strategy.sharding.ShardingStrategyConfiguration;
 import 
org.apache.shardingsphere.sharding.distsql.handler.enums.ShardingStrategyLevelType;
 import 
org.apache.shardingsphere.sharding.distsql.handler.enums.ShardingStrategyType;
@@ -158,6 +159,9 @@ public final class ShardingTableRuleStatementConverter {
     
     private static ShardingStrategyConfiguration 
createShardingStrategyConfiguration(final String logicTable, final 
ShardingStrategyLevelType strategyLevel, final String type,
                                                                                
      final ShardingStrategySegment segment) {
+        if ("none".equalsIgnoreCase(type)) {
+            return new NoneShardingStrategyConfiguration();
+        }
         String shardingAlgorithmName = 
getTableShardingAlgorithmName(logicTable, strategyLevel, 
segment.getShardingAlgorithm().getName());
         return 
createStrategyConfiguration(ShardingStrategyType.getValueOf(type).name(), 
segment.getShardingColumn(), shardingAlgorithmName);
     }
diff --git 
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/checker/ShardingRuleStatementCheckerTest.java
 
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/checker/ShardingRuleStatementCheckerTest.java
index ef9e5116438..bc1a6d91e6f 100644
--- 
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/checker/ShardingRuleStatementCheckerTest.java
+++ 
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/checker/ShardingRuleStatementCheckerTest.java
@@ -266,6 +266,13 @@ public final class ShardingRuleStatementCheckerTest {
         ShardingTableRuleStatementChecker.checkCreation(database, rules, true, 
shardingRuleConfig);
     }
     
+    @Test
+    public void assertCheckerTableRuleWithNoneStrategyTypeSuccess() {
+        Collection<AbstractTableRuleSegment> rules = new LinkedList<>();
+        rules.add(createCompleteTableRuleWithNoneTypeStrategy());
+        ShardingTableRuleStatementChecker.checkCreation(database, rules, 
false, shardingRuleConfig);
+    }
+    
     private static ShardingRuleConfiguration createShardingRuleConfiguration() 
{
         ShardingRuleConfiguration result = new ShardingRuleConfiguration();
         ShardingTableRuleConfiguration tableRuleConfig = new 
ShardingTableRuleConfiguration("t_order", "ds_${0..1}.t_order${0..1}");
@@ -304,4 +311,13 @@ public final class ShardingRuleStatementCheckerTest {
         result.setDatabaseStrategySegment(new ShardingStrategySegment("hint", 
"product_id", new AlgorithmSegment("CORE.HINT.FIXTURE", props)));
         return result;
     }
+    
+    private TableRuleSegment createCompleteTableRuleWithNoneTypeStrategy() {
+        Properties props = new Properties();
+        KeyGenerateStrategySegment keyGenerator = new 
KeyGenerateStrategySegment("product_id", new 
AlgorithmSegment("DISTSQL.FIXTURE", props));
+        TableRuleSegment result = new TableRuleSegment("t_product_1", 
Collections.singletonList("ds_${0..1}.t_order${0..1}"), keyGenerator, null);
+        result.setTableStrategySegment(new ShardingStrategySegment("none", 
null, null));
+        result.setDatabaseStrategySegment(new ShardingStrategySegment("none", 
null, null));
+        return result;
+    }
 }
diff --git 
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/converter/ShardingRuleStatementConverterTest.java
 
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/converter/ShardingRuleStatementConverterTest.java
index e24102aaf01..04668213e31 100644
--- 
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/converter/ShardingRuleStatementConverterTest.java
+++ 
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/converter/ShardingRuleStatementConverterTest.java
@@ -75,6 +75,27 @@ public final class ShardingRuleStatementConverterTest {
         
assertThat(config.getAuditors().get("sharding_key_required_auditor").getType(), 
is("DML_SHARDING_CONDITIONS"));
     }
     
+    @Test
+    public void assertConvertWithNoneStrategyType() {
+        ShardingRuleConfiguration config = 
ShardingTableRuleStatementConverter.convert(createNoneStrategyTypeTableRuleSegment());
+        assertThat(config.getTables().size(), is(1));
+        ShardingTableRuleConfiguration tableRule = 
config.getTables().iterator().next();
+        assertThat(tableRule.getLogicTable(), is("t_order"));
+        assertThat(tableRule.getActualDataNodes(), is("ds0,ds1"));
+        assertThat(tableRule.getDatabaseShardingStrategy().getType(), is(""));
+        assertThat(tableRule.getKeyGenerateStrategy().getKeyGeneratorName(), 
is("t_order_snowflake"));
+        assertThat(tableRule.getKeyGenerateStrategy().getColumn(), 
is("order_id"));
+    }
+    
+    private Collection<AbstractTableRuleSegment> 
createNoneStrategyTypeTableRuleSegment() {
+        TableRuleSegment tableRuleSegment = new TableRuleSegment("t_order", 
Arrays.asList("ds0", "ds1"),
+                new KeyGenerateStrategySegment("order_id", new 
AlgorithmSegment("snowflake", PropertiesBuilder.build(new Property("", "")))),
+                new AuditStrategySegment(Collections.singleton(new 
ShardingAuditorSegment("sharding_key_required_auditor",
+                        new AlgorithmSegment("DML_SHARDING_CONDITIONS", new 
Properties()))), true));
+        tableRuleSegment.setDatabaseStrategySegment(new 
ShardingStrategySegment("none", null, null));
+        return Collections.singleton(tableRuleSegment);
+    }
+    
     private Collection<AbstractTableRuleSegment> createTableRuleSegment1() {
         AutoTableRuleSegment autoTableRuleSegment1 = new 
AutoTableRuleSegment("t_order", Arrays.asList("ds0", "ds1"));
         autoTableRuleSegment1.setShardingColumn("order_id");
diff --git 
a/features/sharding/distsql/parser/src/main/antlr4/imports/sharding/Keyword.g4 
b/features/sharding/distsql/parser/src/main/antlr4/imports/sharding/Keyword.g4
index 80749198f99..70a9b540c04 100644
--- 
a/features/sharding/distsql/parser/src/main/antlr4/imports/sharding/Keyword.g4
+++ 
b/features/sharding/distsql/parser/src/main/antlr4/imports/sharding/Keyword.g4
@@ -326,3 +326,7 @@ DML_SHARDING_CONDITIONS
 NOT
     : N O T
     ;
+
+NONE
+    : N O N E
+    ;
diff --git 
a/features/sharding/distsql/parser/src/main/antlr4/imports/sharding/RDLStatement.g4
 
b/features/sharding/distsql/parser/src/main/antlr4/imports/sharding/RDLStatement.g4
index c2a54c8c05a..5dfdf6974b6 100644
--- 
a/features/sharding/distsql/parser/src/main/antlr4/imports/sharding/RDLStatement.g4
+++ 
b/features/sharding/distsql/parser/src/main/antlr4/imports/sharding/RDLStatement.g4
@@ -136,7 +136,7 @@ shardingAlgorithm
     ;
 
 shardingStrategy
-    : TYPE EQ_ strategyType COMMA_ shardingColumnDefinition COMMA_ 
shardingAlgorithm
+    : TYPE EQ_ strategyType (COMMA_ shardingColumnDefinition COMMA_ 
shardingAlgorithm)?
     ;
 
 databaseStrategy
@@ -183,6 +183,7 @@ buildInStrategyType
     : STANDARD
     | COMPLEX
     | HINT
+    | NONE
     ;
 
 ifExists
diff --git 
a/features/sharding/distsql/parser/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/core/ShardingDistSQLStatementVisitor.java
 
b/features/sharding/distsql/parser/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/core/ShardingDistSQLStatementVisitor.java
index ae79c7d6259..a59bab21c89 100644
--- 
a/features/sharding/distsql/parser/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/core/ShardingDistSQLStatementVisitor.java
+++ 
b/features/sharding/distsql/parser/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/core/ShardingDistSQLStatementVisitor.java
@@ -324,6 +324,9 @@ public final class ShardingDistSQLStatementVisitor extends 
ShardingDistSQLStatem
         if (null == ctx) {
             return null;
         }
+        if ("none".equalsIgnoreCase(getIdentifierValue(ctx.strategyType()))) {
+            return new 
ShardingStrategySegment(getIdentifierValue(ctx.strategyType()), null, null);
+        }
         AlgorithmSegment algorithmSegment = null != 
ctx.shardingAlgorithm().algorithmDefinition() ? (AlgorithmSegment) 
visitAlgorithmDefinition(ctx.shardingAlgorithm().algorithmDefinition()) : null;
         return new 
ShardingStrategySegment(getIdentifierValue(ctx.strategyType()), 
buildShardingColumn(ctx.shardingColumnDefinition()), algorithmSegment);
     }

Reply via email to