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 a2aafeb  `DROP DEFAULT SINGLE TABLE RULE` syntax adds `IF EXISTS` 
keyword. (#15797)
a2aafeb is described below

commit a2aafeb9ec4660d1122dfdd0f1a01d3d380d2d45
Author: lanchengx <[email protected]>
AuthorDate: Fri Mar 4 19:08:18 2022 +0800

    `DROP DEFAULT SINGLE TABLE RULE` syntax adds `IF EXISTS` keyword. (#15797)
    
    * `DROP DEFAULT SINGLE TABLE RULE` syntax adds `IF EXISTS` keyword.
    
    * `DROP DEFAULT SINGLE TABLE RULE` syntax adds `IF EXISTS` keyword.
---
 .../parser/core/common/CommonDistSQLStatementVisitor.java  |  4 ++--
 .../rdl/drop/DropDefaultSingleTableRuleStatement.java      |  8 ++++++--
 .../rule/DropDefaultSingleTableRuleStatementUpdater.java   | 14 +++++++++++---
 .../rdl/rule/DropDefaultSingleTableRuleUpdaterTest.java    |  8 ++++++++
 .../rdl/drop/impl/DropDefaultSingleTableRuleAssert.java    |  5 ++++-
 .../drop/DropDefaultSingleTableRuleStatementTestCase.java  |  6 ++++++
 .../src/main/resources/case/rdl/drop.xml                   |  2 ++
 .../src/main/resources/sql/supported/rdl/drop.xml          |  1 +
 8 files changed, 40 insertions(+), 8 deletions(-)

diff --git 
a/shardingsphere-distsql/shardingsphere-distsql-parser/src/main/java/org/apache/shardingsphere/distsql/parser/core/common/CommonDistSQLStatementVisitor.java
 
b/shardingsphere-distsql/shardingsphere-distsql-parser/src/main/java/org/apache/shardingsphere/distsql/parser/core/common/CommonDistSQLStatementVisitor.java
index c559e0b..4b7c895 100644
--- 
a/shardingsphere-distsql/shardingsphere-distsql-parser/src/main/java/org/apache/shardingsphere/distsql/parser/core/common/CommonDistSQLStatementVisitor.java
+++ 
b/shardingsphere-distsql/shardingsphere-distsql-parser/src/main/java/org/apache/shardingsphere/distsql/parser/core/common/CommonDistSQLStatementVisitor.java
@@ -251,7 +251,7 @@ public final class CommonDistSQLStatementVisitor extends 
CommonDistSQLStatementB
     
     @Override
     public ASTNode visitDropDefaultSingleTableRule(final 
DropDefaultSingleTableRuleContext ctx) {
-        return new DropDefaultSingleTableRuleStatement();
+        return new DropDefaultSingleTableRuleStatement(null != 
ctx.existClause());
     }
     
     private Properties getProperties(final PropertiesDefinitionContext ctx) {
@@ -269,7 +269,7 @@ public final class CommonDistSQLStatementVisitor extends 
CommonDistSQLStatementB
     @Override
     public ASTNode visitDropResource(final DropResourceContext ctx) {
         boolean ignoreSingleTables = null != ctx.ignoreSingleTables();
-        return new DropResourceStatement(ctx.existClause() != null, 
+        return new DropResourceStatement(ctx.existClause() != null,
                 ctx.IDENTIFIER().stream().map(ParseTree::getText).map(each -> 
new IdentifierValue(each).getValue()).collect(Collectors.toList()), 
ignoreSingleTables);
     }
     
diff --git 
a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/drop/DropDefaultSingleTableRuleStatement.java
 
b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/drop/DropDefaultSingleTableRuleStatement.java
index 9fb493b..452cbc4 100644
--- 
a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/drop/DropDefaultSingleTableRuleStatement.java
+++ 
b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/drop/DropDefaultSingleTableRuleStatement.java
@@ -18,12 +18,16 @@
 package org.apache.shardingsphere.distsql.parser.statement.rdl.drop;
 
 import lombok.Getter;
-import lombok.RequiredArgsConstructor;
+import lombok.NoArgsConstructor;
 
 /**
  * Drop default single table rule statement.
  */
-@RequiredArgsConstructor
 @Getter
+@NoArgsConstructor
 public final class DropDefaultSingleTableRuleStatement extends 
DropRuleStatement {
+    
+    public DropDefaultSingleTableRuleStatement(final boolean 
containsExistClause) {
+        setContainsExistClause(containsExistClause);
+    }
 }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/rule/DropDefaultSingleTableRuleStatementUpdater.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/rule/DropDefaultSingleTableRuleStatementUpdater.java
index fd0a140..c307380 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/rule/DropDefaultSingleTableRuleStatementUpdater.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/rule/DropDefaultSingleTableRuleStatementUpdater.java
@@ -33,11 +33,14 @@ public final class 
DropDefaultSingleTableRuleStatementUpdater implements RuleDef
     public void checkSQLStatement(final ShardingSphereMetaData 
shardingSphereMetaData, final DropDefaultSingleTableRuleStatement sqlStatement,
                                   final SingleTableRuleConfiguration 
currentRuleConfig) throws DistSQLException {
         String schemaName = shardingSphereMetaData.getName();
-        checkCurrentRuleConfiguration(schemaName, currentRuleConfig);
+        checkCurrentRuleConfiguration(schemaName, sqlStatement, 
currentRuleConfig);
     }
     
-    private void checkCurrentRuleConfiguration(final String schemaName, final 
SingleTableRuleConfiguration currentRuleConfig) throws DistSQLException {
-        DistSQLException.predictionThrow(null != currentRuleConfig && 
currentRuleConfig.getDefaultDataSource().isPresent(), new 
RequiredRuleMissedException("single table", schemaName));
+    private void checkCurrentRuleConfiguration(final String schemaName, final 
DropDefaultSingleTableRuleStatement sqlStatement,
+                                               final 
SingleTableRuleConfiguration currentRuleConfig) throws DistSQLException {
+        if (!sqlStatement.isContainsExistClause()) {
+            DistSQLException.predictionThrow(null != currentRuleConfig && 
currentRuleConfig.getDefaultDataSource().isPresent(), new 
RequiredRuleMissedException("single table", schemaName));
+        }
     }
     
     @Override
@@ -47,6 +50,11 @@ public final class 
DropDefaultSingleTableRuleStatementUpdater implements RuleDef
     }
     
     @Override
+    public boolean hasAnyOneToBeDropped(final 
DropDefaultSingleTableRuleStatement sqlStatement, final 
SingleTableRuleConfiguration currentRuleConfig) {
+        return null != currentRuleConfig && 
currentRuleConfig.getDefaultDataSource().isPresent();
+    }
+    
+    @Override
     public Class<SingleTableRuleConfiguration> getRuleConfigurationClass() {
         return SingleTableRuleConfiguration.class;
     }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/rule/DropDefaultSingleTableRuleUpdaterTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/rule/DropDefaultSingleTableRuleUpdaterTest.java
index db2bcd1..7284d0a 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/rule/DropDefaultSingleTableRuleUpdaterTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/rule/DropDefaultSingleTableRuleUpdaterTest.java
@@ -63,6 +63,14 @@ public final class DropDefaultSingleTableRuleUpdaterTest {
     }
     
     @Test
+    public void assertCheckWithIfExists() throws Exception {
+        DropDefaultSingleTableRuleStatement statement = new 
DropDefaultSingleTableRuleStatement(true);
+        SingleTableRuleConfiguration currentConfiguration = new 
SingleTableRuleConfiguration();
+        updater.checkSQLStatement(shardingSphereMetaData, statement, 
currentConfiguration);
+        updater.checkSQLStatement(shardingSphereMetaData, statement, null);
+    }
+    
+    @Test
     public void assertUpdate() {
         DropDefaultSingleTableRuleStatement statement = new 
DropDefaultSingleTableRuleStatement();
         SingleTableRuleConfiguration currentConfiguration = new 
SingleTableRuleConfiguration();
diff --git 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/drop/impl/DropDefaultSingleTableRuleAssert.java
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/drop/impl/DropDefaultSingleTableRuleAssert.java
index 004194d..bf472f1 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/drop/impl/DropDefaultSingleTableRuleAssert.java
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/distsql/rdl/drop/impl/DropDefaultSingleTableRuleAssert.java
@@ -23,8 +23,10 @@ import 
org.apache.shardingsphere.distsql.parser.statement.rdl.drop.DropDefaultSi
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.SQLCaseAssertContext;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.distsql.rdl.drop.DropDefaultSingleTableRuleStatementTestCase;
 
+import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThat;
 
 /**
  * Drop default single table rule statement assert.
@@ -39,12 +41,13 @@ public final class DropDefaultSingleTableRuleAssert {
      * @param actual actual drop default single table rule statement
      * @param expected expected drop default single table rule statement test 
case
      */
-    public static void assertIs(final SQLCaseAssertContext assertContext, 
final DropDefaultSingleTableRuleStatement actual, 
+    public static void assertIs(final SQLCaseAssertContext assertContext, 
final DropDefaultSingleTableRuleStatement actual,
                                 final 
DropDefaultSingleTableRuleStatementTestCase expected) {
         if (null == expected) {
             assertNull(assertContext.getText("Actual statement should not 
exist."), actual);
         } else {
             assertNotNull(assertContext.getText("Actual statement should 
exist."), actual);
+            assertThat(assertContext.getText("Actual statement should 
exist."), actual.isContainsExistClause(), is(expected.isContainsExistClause()));
         }
     }
 }
diff --git 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/drop/DropDefaultSingleTableRuleStatementTestCase.java
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/drop/DropDefaultSingleTableRuleStatementTestCase.java
index 2c61241..4875c8a 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/drop/DropDefaultSingleTableRuleStatementTestCase.java
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/distsql/rdl/drop/DropDefaultSingleTableRuleStatementTestCase.java
@@ -21,10 +21,16 @@ import lombok.Getter;
 import lombok.Setter;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.SQLParserTestCase;
 
+import javax.xml.bind.annotation.XmlAttribute;
+
 /**
  * Drop default single table rule statement test case.
  */
 @Getter
 @Setter
 public final class DropDefaultSingleTableRuleStatementTestCase extends 
SQLParserTestCase {
+   
+    @XmlAttribute(name = "contains-exist-clause")
+    private boolean containsExistClause;
+    
 }
diff --git 
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/rdl/drop.xml
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/rdl/drop.xml
index c4794a9..5467b0c 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/rdl/drop.xml
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/rdl/drop.xml
@@ -105,6 +105,8 @@
     </drop-shadow-algorithm>
 
     <drop-default-single-table sql-case-id="drop-default-single-table" />
+    
+    <drop-default-single-table 
sql-case-id="drop-default-single-table-if-exists" contains-exist-clause="true"/>
 
     <drop-sharding-key-generator sql-case-id="drop-sharding-key-generator" >
         <key-generator>uuid_key_generator</key-generator>
diff --git 
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/rdl/drop.xml
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/rdl/drop.xml
index a201ac8..72fdd81 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/rdl/drop.xml
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/rdl/drop.xml
@@ -37,6 +37,7 @@
     <distsql-case id="drop-shadow-algorithm" value="DROP SHADOW algorithm 
shadow_algorithm_1,shadow_algorithm_2" />
     <distsql-case id="drop-shadow-algorithm-if-exists" value="DROP SHADOW 
ALGORITHM IF EXISTS shadow_algorithm_1,shadow_algorithm_2" />
     <distsql-case id="drop-default-single-table" value="DROP DEFAULT SINGLE 
TABLE RULE" />
+    <distsql-case id="drop-default-single-table-if-exists" value="DROP DEFAULT 
SINGLE TABLE RULE IF EXISTS" />
     <distsql-case id="drop-sharding-key-generator" value="DROP SHARDING KEY 
GENERATOR uuid_key_generator" />
     <distsql-case id="drop-default-sharding-strategy" value="DROP DEFAULT 
SHARDING TABLE STRATEGY" />
     <distsql-case id="drop-sharding-scaling-rule" value="DROP SHARDING SCALING 
RULE default_scaling" />

Reply via email to