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 93a98fc0e32 Add `ifNotExists` in DistSQL `create rule` parser test 
(#23575)
93a98fc0e32 is described below

commit 93a98fc0e3271d757660357edc5d0f6d080b81f2
Author: Zichao <[email protected]>
AuthorDate: Mon Jan 16 20:24:44 2023 +1300

    Add `ifNotExists` in DistSQL `create rule` parser test (#23575)
---
 .../create/RegisterStorageUnitStatementAssert.java |   1 +
 .../CreateBroadcastTableRuleStatementAssert.java   |   1 +
 ...CreateDatabaseDiscoveryRuleStatementAssert.java |   1 +
 ...reateDefaultShadowAlgorithmStatementAssert.java |   3 +
 ...eateDefaultShardingStrategyStatementAssert.java |   1 +
 .../impl/CreateEncryptRuleStatementAssert.java     |   1 +
 .../create/impl/CreateMaskRuleStatementAssert.java |   1 +
 ...reateReadwriteSplittingRuleStatementAssert.java |   1 +
 .../impl/CreateShadowRuleStatementAssert.java      |   3 +
 ...eShardingTableReferenceRuleStatementAssert.java |   1 +
 .../CreateShardingTableRuleStatementAssert.java    |   4 +
 .../RegisterStorageUnitStatementTestCase.java      |   4 +
 ...seDiscoveryDefinitionRuleStatementTestCase.java |   4 +
 .../CreateEncryptRuleStatementTestCase.java        |   4 +
 .../rule/mask/CreateMaskRuleStatementTestCase.java |   4 +
 ...ateReadwriteSplittingRuleStatementTestCase.java |   4 +
 ...ateDefaultShadowAlgorithmStatementTestCase.java |   4 +
 .../shadow/CreateShadowRuleStatementTestCase.java  |   4 +
 .../CreateBroadcastTableRuleStatementTestCase.java |   4 +
 ...teDefaultShardingStrategyStatementTestCase.java |   4 +
 ...eateShardingAutoTableRuleStatementTestCase.java |   4 +
 ...hardingTableReferenceRuleStatementTestCase.java |   4 +
 .../CreateShardingTableRuleStatementTestCase.java  |   4 +
 .../parser/src/main/resources/case/rdl/create.xml  | 155 +++++++++++++++++++++
 .../main/resources/sql/supported/rdl/create.xml    |  16 ++-
 25 files changed, 236 insertions(+), 1 deletion(-)

diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rdl/create/RegisterStorageUnitStatementAssert.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rdl/create/RegisterStorageUnitStatementAssert.java
index bd43854e396..68619fbb018 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rdl/create/RegisterStorageUnitStatementAssert.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rdl/create/RegisterStorageUnitStatementAssert.java
@@ -52,6 +52,7 @@ public final class RegisterStorageUnitStatementAssert {
             assertNull(assertContext.getText("Actual statement should not 
exist."), actual);
         } else {
             assertNotNull(assertContext.getText("Actual statement should 
exist."), actual);
+            assertThat(assertContext.getText("if not exists segment assertion 
error: "), actual.isIfNotExists(), is(expected.isIfNotExists()));
             assertDataSources(assertContext, actual.getStorageUnits(), 
expected.getDataSources());
         }
     }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rdl/create/impl/CreateBroadcastTableRuleStatementAssert.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rdl/create/impl/CreateBroadcastTableRuleStatementAssert.java
index 1de0fc95725..33c9246ad97 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rdl/create/impl/CreateBroadcastTableRuleStatementAssert.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rdl/create/impl/CreateBroadcastTableRuleStatementAssert.java
@@ -46,6 +46,7 @@ public final class CreateBroadcastTableRuleStatementAssert {
             assertNull(assertContext.getText("Actual statement should not 
exist."), actual);
         } else {
             assertNotNull(assertContext.getText("Actual statement should 
exist."), actual);
+            assertThat(assertContext.getText("if not exists segment assertion 
error: "), actual.isIfNotExists(), is(expected.isIfNotExists()));
             assertThat(assertContext.getText("create broadcast table rule 
assertion error: "), actual.getTables(), is(expected.getTables()));
         }
     }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rdl/create/impl/CreateDatabaseDiscoveryRuleStatementAssert.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rdl/create/impl/CreateDatabaseDiscoveryRuleStatementAssert.java
index 69171ae6964..5318e78ed00 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rdl/create/impl/CreateDatabaseDiscoveryRuleStatementAssert.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rdl/create/impl/CreateDatabaseDiscoveryRuleStatementAssert.java
@@ -55,6 +55,7 @@ public final class CreateDatabaseDiscoveryRuleStatementAssert 
{
         } else {
             Collection<DatabaseDiscoveryDefinitionSegment> 
actualDBDiscoveryRule = actual.getRules().stream().map(each -> 
(DatabaseDiscoveryDefinitionSegment) each).collect(Collectors.toList());
             assertNotNull(assertContext.getText("Actual statement should 
exist."), actual);
+            assertThat(assertContext.getText("if not exists segment assertion 
error: "), actual.isIfNotExists(), is(expected.isIfNotExists()));
             assertDatabaseDiscoveryRules(assertContext, actualDBDiscoveryRule, 
expected.getRules());
         }
     }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rdl/create/impl/CreateDefaultShadowAlgorithmStatementAssert.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rdl/create/impl/CreateDefaultShadowAlgorithmStatementAssert.java
index acacf01692f..2b0161fb6a8 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rdl/create/impl/CreateDefaultShadowAlgorithmStatementAssert.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rdl/create/impl/CreateDefaultShadowAlgorithmStatementAssert.java
@@ -26,6 +26,8 @@ import 
org.apache.shardingsphere.test.it.sql.parser.internal.asserts.segment.dis
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.distsql.rdl.ExpectedShadowAlgorithm;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.rdl.rule.shadow.CreateDefaultShadowAlgorithmStatementTestCase;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 
@@ -47,6 +49,7 @@ public final class 
CreateDefaultShadowAlgorithmStatementAssert {
             assertNull(assertContext.getText("Actual statement should not 
exist."), actual);
         } else {
             assertNotNull(assertContext.getText("Actual statement should 
exist."), actual);
+            assertThat(assertContext.getText("if not exists segment assertion 
error: "), actual.isIfNotExists(), is(expected.isIfNotExists()));
             expected.getAlgorithms().forEach(each -> 
assertIsAlgorithmsSegment(assertContext, actual.getShadowAlgorithmSegment(), 
each));
         }
     }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rdl/create/impl/CreateDefaultShardingStrategyStatementAssert.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rdl/create/impl/CreateDefaultShardingStrategyStatementAssert.java
index 8d4cb08f6c3..1aee8d42714 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rdl/create/impl/CreateDefaultShardingStrategyStatementAssert.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rdl/create/impl/CreateDefaultShardingStrategyStatementAssert.java
@@ -46,6 +46,7 @@ public final class 
CreateDefaultShardingStrategyStatementAssert {
             assertNull(assertContext.getText("Actual statement should not 
exist."), actual);
         } else {
             assertNotNull(assertContext.getText("Actual statement should 
exist."), actual);
+            assertThat(assertContext.getText("if not exists segment assertion 
error: "), actual.isIfNotExists(), is(expected.isIfNotExists()));
             assertThat(assertContext.getText(String.format("`%s`'s datasource 
segment assertion error: ", actual.getClass().getSimpleName())),
                     actual.getDefaultType(), 
is(expected.getStrategy().getDefaultType()));
             assertThat(assertContext.getText(String.format("`%s`'s datasource 
segment assertion error: ", actual.getClass().getSimpleName())),
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rdl/create/impl/CreateEncryptRuleStatementAssert.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rdl/create/impl/CreateEncryptRuleStatementAssert.java
index d5e939055a9..e1af5fb45d1 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rdl/create/impl/CreateEncryptRuleStatementAssert.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rdl/create/impl/CreateEncryptRuleStatementAssert.java
@@ -52,6 +52,7 @@ public final class CreateEncryptRuleStatementAssert {
             assertNull(assertContext.getText("Actual statement should not 
exist."), actual);
         } else {
             assertNotNull(assertContext.getText("Actual statement should 
exist."), actual);
+            assertThat(assertContext.getText("if not exists segment assertion 
error: "), actual.isIfNotExists(), is(expected.isIfNotExists()));
             assertEncryptRules(assertContext, actual.getRules(), 
expected.getRules());
         }
     }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rdl/create/impl/CreateMaskRuleStatementAssert.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rdl/create/impl/CreateMaskRuleStatementAssert.java
index f6c549e9697..9859d5197a5 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rdl/create/impl/CreateMaskRuleStatementAssert.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rdl/create/impl/CreateMaskRuleStatementAssert.java
@@ -52,6 +52,7 @@ public final class CreateMaskRuleStatementAssert {
             assertNull(assertContext.getText("Actual statement should not 
exist."), actual);
         } else {
             assertNotNull(assertContext.getText("Actual statement should 
exist."), actual);
+            assertThat(assertContext.getText("if not exists segment assertion 
error: "), actual.isIfNotExists(), is(expected.isIfNotExists()));
             assertMaskRules(assertContext, actual.getRules(), 
expected.getRules());
         }
     }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rdl/create/impl/CreateReadwriteSplittingRuleStatementAssert.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rdl/create/impl/CreateReadwriteSplittingRuleStatementAssert.java
index 77b84ac8b02..420b3818a86 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rdl/create/impl/CreateReadwriteSplittingRuleStatementAssert.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rdl/create/impl/CreateReadwriteSplittingRuleStatementAssert.java
@@ -52,6 +52,7 @@ public final class 
CreateReadwriteSplittingRuleStatementAssert {
             assertNull(assertContext.getText("Actual statement should not 
exist."), actual);
         } else {
             assertNotNull(assertContext.getText("Actual statement should 
exist."), actual);
+            assertThat(assertContext.getText("if not exists segment assertion 
error: "), actual.isIfNotExists(), is(expected.isIfNotExists()));
             assertReadwriteSplittingRule(assertContext, actual.getRules(), 
expected.getRules());
         }
     }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rdl/create/impl/CreateShadowRuleStatementAssert.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rdl/create/impl/CreateShadowRuleStatementAssert.java
index dd1c675a68c..0f0de33d63c 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rdl/create/impl/CreateShadowRuleStatementAssert.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rdl/create/impl/CreateShadowRuleStatementAssert.java
@@ -29,6 +29,8 @@ import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.s
 import java.util.Collection;
 import java.util.List;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 
@@ -50,6 +52,7 @@ public final class CreateShadowRuleStatementAssert {
             assertNull(assertContext.getText("Actual statement should not 
exist."), actual);
         } else {
             assertNotNull(assertContext.getText("Actual statement should 
exist."), actual);
+            assertThat(assertContext.getText("if not exists segment assertion 
error: "), actual.isIfNotExists(), is(expected.isIfNotExists()));
             assertShadowRule(assertContext, actual.getRules(), 
expected.getRules());
         }
     }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rdl/create/impl/CreateShardingTableReferenceRuleStatementAssert.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rdl/create/impl/CreateShardingTableReferenceRuleStatementAssert.java
index 15130c4b7b5..f715e4c729f 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rdl/create/impl/CreateShardingTableReferenceRuleStatementAssert.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rdl/create/impl/CreateShardingTableReferenceRuleStatementAssert.java
@@ -52,6 +52,7 @@ public final class 
CreateShardingTableReferenceRuleStatementAssert {
             assertNull(assertContext.getText("Actual statement should not 
exist."), actual);
         } else {
             assertNotNull(assertContext.getText("Actual statement should 
exist."), actual);
+            assertThat(assertContext.getText("if not exists segment assertion 
error: "), actual.isIfNotExists(), is(expected.isIfNotExists()));
             assertShardingBindingTableRules(assertContext, actual.getRules(), 
expected.getRules());
         }
     }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rdl/create/impl/CreateShardingTableRuleStatementAssert.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rdl/create/impl/CreateShardingTableRuleStatementAssert.java
index b31ea1e87f3..b947476f1e8 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rdl/create/impl/CreateShardingTableRuleStatementAssert.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/statement/rdl/create/impl/CreateShardingTableRuleStatementAssert.java
@@ -35,6 +35,8 @@ import java.util.Collection;
 import java.util.List;
 import java.util.stream.Collectors;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 
@@ -58,10 +60,12 @@ public final class CreateShardingTableRuleStatementAssert {
             assertNotNull(assertContext.getText("Actual statement should 
exist."), actual);
             if (expected instanceof 
CreateShardingAutoTableRuleStatementTestCase) {
                 CreateShardingAutoTableRuleStatementTestCase 
autoTableRuleStatementTestCase = (CreateShardingAutoTableRuleStatementTestCase) 
expected;
+                assertThat(assertContext.getText("if not exists segment 
assertion error: "), actual.isIfNotExists(), 
is(autoTableRuleStatementTestCase.isIfNotExists()));
                 Collection<AutoTableRuleSegment> actualAutoTableRules = 
actual.getRules().stream().map(each -> (AutoTableRuleSegment) 
each).collect(Collectors.toList());
                 assertShardingAutoTableRules(assertContext, 
actualAutoTableRules, autoTableRuleStatementTestCase.getRules());
             } else {
                 CreateShardingTableRuleStatementTestCase 
tableRuleStatementTestCase = (CreateShardingTableRuleStatementTestCase) 
expected;
+                assertThat(assertContext.getText("if not exists segment 
assertion error: "), actual.isIfNotExists(), 
is(tableRuleStatementTestCase.isIfNotExists()));
                 Collection<TableRuleSegment> actualTableRules = 
actual.getRules().stream().map(each -> (TableRuleSegment) 
each).collect(Collectors.toList());
                 assertShardingTableRules(assertContext, actualTableRules, 
tableRuleStatementTestCase.getRules());
             }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/resource/RegisterStorageUnitStatementTestCase.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/resource/RegisterStorageUnitStatementTestCase.java
index 59229b4f22f..f326016eb2c 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/resource/RegisterStorageUnitStatementTestCase.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/resource/RegisterStorageUnitStatementTestCase.java
@@ -21,6 +21,7 @@ import lombok.Getter;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.distsql.ExpectedDataSource;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.SQLParserTestCase;
 
+import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlElement;
 import java.util.LinkedList;
 import java.util.List;
@@ -33,4 +34,7 @@ public final class RegisterStorageUnitStatementTestCase 
extends SQLParserTestCas
     
     @XmlElement(name = "data-source")
     private final List<ExpectedDataSource> dataSources = new LinkedList<>();
+    
+    @XmlAttribute(name = "if-not-exists")
+    private boolean ifNotExists;
 }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/rule/dbdiscovery/CreateDatabaseDiscoveryDefinitionRuleStatementTestCase.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/rule/dbdiscovery/CreateDatabaseDiscoveryDefinitionRuleStatementTestCase.java
index 624b59534e6..436f6086dd6 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/rule/dbdiscovery/CreateDatabaseDiscoveryDefinitionRuleStatementTestCase.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/rule/dbdiscovery/CreateDatabaseDiscoveryDefinitionRuleStatementTestCase.java
@@ -21,6 +21,7 @@ import lombok.Getter;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.distsql.rdl.ExpectedDatabaseDiscoveryDefinitionRule;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.SQLParserTestCase;
 
+import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlElement;
 import java.util.LinkedList;
 import java.util.List;
@@ -33,4 +34,7 @@ public final class 
CreateDatabaseDiscoveryDefinitionRuleStatementTestCase extend
     
     @XmlElement(name = "rule")
     private final List<ExpectedDatabaseDiscoveryDefinitionRule> rules = new 
LinkedList<>();
+    
+    @XmlAttribute(name = "if-not-exists")
+    private boolean ifNotExists;
 }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/rule/encrypt/CreateEncryptRuleStatementTestCase.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/rule/encrypt/CreateEncryptRuleStatementTestCase.java
index e4a8907f52f..28ce162722b 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/rule/encrypt/CreateEncryptRuleStatementTestCase.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/rule/encrypt/CreateEncryptRuleStatementTestCase.java
@@ -21,6 +21,7 @@ import lombok.Getter;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.distsql.rdl.ExpectedEncryptRule;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.SQLParserTestCase;
 
+import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlElement;
 import java.util.LinkedList;
 import java.util.List;
@@ -33,4 +34,7 @@ public final class CreateEncryptRuleStatementTestCase extends 
SQLParserTestCase
     
     @XmlElement(name = "rule")
     private final List<ExpectedEncryptRule> rules = new LinkedList<>();
+    
+    @XmlAttribute(name = "if-not-exists")
+    private boolean ifNotExists;
 }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/rule/mask/CreateMaskRuleStatementTestCase.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/rule/mask/CreateMaskRuleStatementTestCase.java
index 95e5f125c3f..0ce8af54bec 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/rule/mask/CreateMaskRuleStatementTestCase.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/rule/mask/CreateMaskRuleStatementTestCase.java
@@ -21,6 +21,7 @@ import lombok.Getter;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.SQLParserTestCase;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.distsql.rdl.ExpectedMaskRule;
 
+import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlElement;
 import java.util.LinkedList;
 import java.util.List;
@@ -33,4 +34,7 @@ public final class CreateMaskRuleStatementTestCase extends 
SQLParserTestCase {
     
     @XmlElement(name = "rule")
     private final List<ExpectedMaskRule> rules = new LinkedList<>();
+    
+    @XmlAttribute(name = "if-not-exists")
+    private boolean ifNotExists;
 }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/rule/readwritesplitting/CreateReadwriteSplittingRuleStatementTestCase.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/rule/readwritesplitting/CreateReadwriteSplittingRuleStatementTestCase.java
index 759eee8d3d5..70ea18ea03a 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/rule/readwritesplitting/CreateReadwriteSplittingRuleStatementTestCase.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/rule/readwritesplitting/CreateReadwriteSplittingRuleStatementTestCase.java
@@ -21,6 +21,7 @@ import lombok.Getter;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.distsql.rdl.ExceptedReadwriteSplittingRule;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.SQLParserTestCase;
 
+import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlElement;
 import java.util.LinkedList;
 import java.util.List;
@@ -33,4 +34,7 @@ public final class 
CreateReadwriteSplittingRuleStatementTestCase extends SQLPars
     
     @XmlElement(name = "rule")
     private final List<ExceptedReadwriteSplittingRule> rules = new 
LinkedList<>();
+    
+    @XmlAttribute(name = "if-not-exists")
+    private boolean ifNotExists;
 }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/rule/shadow/CreateDefaultShadowAlgorithmStatementTestCase.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/rule/shadow/CreateDefaultShadowAlgorithmStatementTestCase.java
index 588d2ab644a..6435bd94b2a 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/rule/shadow/CreateDefaultShadowAlgorithmStatementTestCase.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/rule/shadow/CreateDefaultShadowAlgorithmStatementTestCase.java
@@ -21,6 +21,7 @@ import lombok.Getter;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.distsql.rdl.ExpectedShadowAlgorithm;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.SQLParserTestCase;
 
+import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlElement;
 import java.util.Collection;
 import java.util.LinkedList;
@@ -33,4 +34,7 @@ public final class 
CreateDefaultShadowAlgorithmStatementTestCase extends SQLPars
     
     @XmlElement(name = "shadow-algorithm")
     private final Collection<ExpectedShadowAlgorithm> algorithms = new 
LinkedList<>();
+    
+    @XmlAttribute(name = "if-not-exists")
+    private boolean ifNotExists;
 }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/rule/shadow/CreateShadowRuleStatementTestCase.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/rule/shadow/CreateShadowRuleStatementTestCase.java
index aeb24299455..8a098e6c43f 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/rule/shadow/CreateShadowRuleStatementTestCase.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/rule/shadow/CreateShadowRuleStatementTestCase.java
@@ -21,6 +21,7 @@ import lombok.Getter;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.distsql.rdl.ExpectedShadowRule;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.SQLParserTestCase;
 
+import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlElement;
 import java.util.LinkedList;
 import java.util.List;
@@ -33,4 +34,7 @@ public final class CreateShadowRuleStatementTestCase extends 
SQLParserTestCase {
     
     @XmlElement(name = "rule")
     private final List<ExpectedShadowRule> rules = new LinkedList<>();
+    
+    @XmlAttribute(name = "if-not-exists")
+    private boolean ifNotExists;
 }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/rule/sharding/CreateBroadcastTableRuleStatementTestCase.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/rule/sharding/CreateBroadcastTableRuleStatementTestCase.java
index 8cfa90914f3..0217793da31 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/rule/sharding/CreateBroadcastTableRuleStatementTestCase.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/rule/sharding/CreateBroadcastTableRuleStatementTestCase.java
@@ -20,6 +20,7 @@ package 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.
 import lombok.Getter;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.SQLParserTestCase;
 
+import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlElement;
 import java.util.LinkedList;
 import java.util.List;
@@ -32,4 +33,7 @@ public final class CreateBroadcastTableRuleStatementTestCase 
extends SQLParserTe
     
     @XmlElement(name = "table")
     private final List<String> tables = new LinkedList<>();
+    
+    @XmlAttribute(name = "if-not-exists")
+    private boolean ifNotExists;
 }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/rule/sharding/CreateDefaultShardingStrategyStatementTestCase.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/rule/sharding/CreateDefaultShardingStrategyStatementTestCase.java
index 6ebbd2c1be3..997954043cf 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/rule/sharding/CreateDefaultShardingStrategyStatementTestCase.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/rule/sharding/CreateDefaultShardingStrategyStatementTestCase.java
@@ -22,6 +22,7 @@ import lombok.Setter;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.distsql.rdl.ExpectedDefaultShardingStrategy;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.SQLParserTestCase;
 
+import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlElement;
 
 /**
@@ -33,4 +34,7 @@ public final class 
CreateDefaultShardingStrategyStatementTestCase extends SQLPar
     
     @XmlElement
     private ExpectedDefaultShardingStrategy strategy;
+    
+    @XmlAttribute(name = "if-not-exists")
+    private boolean ifNotExists;
 }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/rule/sharding/CreateShardingAutoTableRuleStatementTestCase.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/rule/sharding/CreateShardingAutoTableRuleStatementTestCase.java
index 6c3de3547f3..62241b97032 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/rule/sharding/CreateShardingAutoTableRuleStatementTestCase.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/rule/sharding/CreateShardingAutoTableRuleStatementTestCase.java
@@ -21,6 +21,7 @@ import lombok.Getter;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.distsql.ExpectedAutoTableRule;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.SQLParserTestCase;
 
+import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlElement;
 import java.util.LinkedList;
 import java.util.List;
@@ -33,4 +34,7 @@ public final class 
CreateShardingAutoTableRuleStatementTestCase extends SQLParse
     
     @XmlElement(name = "rule")
     private final List<ExpectedAutoTableRule> rules = new LinkedList<>();
+    
+    @XmlAttribute(name = "if-not-exists")
+    private boolean ifNotExists;
 }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/rule/sharding/CreateShardingTableReferenceRuleStatementTestCase.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/rule/sharding/CreateShardingTableReferenceRuleStatementTestCase.java
index 82ede7375a5..529dd70eac1 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/rule/sharding/CreateShardingTableReferenceRuleStatementTestCase.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/rule/sharding/CreateShardingTableReferenceRuleStatementTestCase.java
@@ -21,6 +21,7 @@ import lombok.Getter;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.distsql.rdl.ExpectedShardingTableReferenceRule;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.SQLParserTestCase;
 
+import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlElement;
 import java.util.LinkedList;
 import java.util.List;
@@ -33,4 +34,7 @@ public final class 
CreateShardingTableReferenceRuleStatementTestCase extends SQL
     
     @XmlElement(name = "rule")
     private final List<ExpectedShardingTableReferenceRule> rules = new 
LinkedList<>();
+    
+    @XmlAttribute(name = "if-not-exists")
+    private boolean ifNotExists;
 }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/rule/sharding/CreateShardingTableRuleStatementTestCase.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/rule/sharding/CreateShardingTableRuleStatementTestCase.java
index 2918bd0fa4e..e8a6c470242 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/rule/sharding/CreateShardingTableRuleStatementTestCase.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/rdl/rule/sharding/CreateShardingTableRuleStatementTestCase.java
@@ -21,6 +21,7 @@ import lombok.Getter;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.distsql.ExpectedTableRule;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.SQLParserTestCase;
 
+import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlElement;
 import java.util.LinkedList;
 import java.util.List;
@@ -33,4 +34,7 @@ public final class CreateShardingTableRuleStatementTestCase 
extends SQLParserTes
     
     @XmlElement(name = "rule")
     private final List<ExpectedTableRule> rules = new LinkedList<>();
+    
+    @XmlAttribute(name = "if-not-exists")
+    private boolean ifNotExists;
 }
diff --git a/test/it/parser/src/main/resources/case/rdl/create.xml 
b/test/it/parser/src/main/resources/case/rdl/create.xml
index 48e03dd96f0..d3f07488b0d 100644
--- a/test/it/parser/src/main/resources/case/rdl/create.xml
+++ b/test/it/parser/src/main/resources/case/rdl/create.xml
@@ -25,6 +25,10 @@
         <data-source name="ds_0" hostname="127.0.0.1" port="3306" db="test0" 
user="ROOT" password="123456" />
     </register-storage-unit>
     
+    <register-storage-unit 
sql-case-id="register-storage-unit-simple-single-with-password-if-not-exists" 
if-not-exists="true">
+        <data-source name="ds_0" hostname="127.0.0.1" port="3306" db="test0" 
user="ROOT" password="123456" />
+    </register-storage-unit>
+    
     <register-storage-unit sql-case-id="register-storage-unit-simple-multiple">
         <data-source name="ds_0" hostname="127.0.0.1" port="3306" db="test0" 
user="ROOT" password="123456" />
         <data-source name="ds_1" hostname="127.0.0.1" port="3306" db="test1" 
user="ROOT" password="123456" />
@@ -78,6 +82,17 @@
             <key-generate-strategy algorithm-name="snowflake" />
         </rule>
     </create-sharding-auto-table-rule>
+    
+    <create-sharding-auto-table-rule 
sql-case-id="create-sharding-auto-table-rule-if-not-exists" 
if-not-exists="true">
+        <rule name="t_order" table-strategy-column="order_id" 
key-generate-strategy-column="another_id">
+            <data-source>ms_group_0</data-source>
+            <data-source>ms_group_1</data-source>
+            <table-strategy algorithm-name="hash_mod">
+                <property key="sharding-count" value="4" />
+            </table-strategy>
+            <key-generate-strategy algorithm-name="snowflake" />
+        </rule>
+    </create-sharding-auto-table-rule>
 
     <create-sharding-auto-table-rule 
sql-case-id="create-sharding-auto-table-rule-with-quota">
         <rule name="t_order" table-strategy-column="order_id" 
key-generate-strategy-column="another_id">
@@ -250,10 +265,40 @@
         </rule>
     </create-sharding-table-rule>
     
+    <create-sharding-table-rule 
sql-case-id="create-sharding-table-rule-with-auditor-if-not-exists" 
if-not-exists="true">
+        <rule name="t_order" key-generate-strategy-column="another_id">
+            <data-node>ms_group_${0..1}.t_order_${0..1}</data-node>
+            <table-strategy type="standard" sharding-column="user_id">
+                <algorithm-segment algorithm-name="INLINE">
+                    <property key="algorithm-expression" 
value="t_order_${user_id % 2}" />
+                </algorithm-segment>
+            </table-strategy>
+            <database-strategy type="standard" sharding-column="order_id" >
+                <algorithm-segment algorithm-name="INLINE">
+                    <property key="algorithm-expression" 
value="ms_group_${order_id % 2}" />
+                </algorithm-segment>
+            </database-strategy>
+            <key-generate-strategy algorithm-name="snowflake" />
+            <audit-strategy allow-hint-disable="true">
+                <auditor auditor-name = "t_order_dml_sharding_conditions_0">
+                    <algorithm algorithm-name="DML_SHARDING_CONDITIONS" />
+                </auditor>
+                <auditor auditor-name = "t_order_dml_sharding_conditions_1">
+                    <algorithm algorithm-name="DML_SHARDING_CONDITIONS" />
+                </auditor>
+            </audit-strategy>
+        </rule>
+    </create-sharding-table-rule>
+    
     <create-sharding-table-reference-rule 
sql-case-id="create-sharding-table-reference-rule">
         <rule name="reference_0" table-groups="t_order,t_order_item" />
         <rule name="reference_1" table-groups="t_1,t_2" />
     </create-sharding-table-reference-rule>
+    
+    <create-sharding-table-reference-rule 
sql-case-id="create-sharding-table-reference-rule-if-not-exists" 
if-not-exists="true">
+        <rule name="reference_0" table-groups="t_order,t_order_item" />
+        <rule name="reference_1" table-groups="t_1,t_2" />
+    </create-sharding-table-reference-rule>
 
     <create-sharding-table-reference-rule 
sql-case-id="create-sharding-table-reference-rule-with-quota">
         <rule name="reference_0" table-groups="t_order,t_order_item" />
@@ -264,6 +309,11 @@
         <table>t_1</table>
         <table>t_2</table>
     </create-broadcast-table-rule>
+    
+    <create-broadcast-table-rule 
sql-case-id="create-broadcast-table-rule-if-not-exists" if-not-exists="true">
+        <table>t_1</table>
+        <table>t_2</table>
+    </create-broadcast-table-rule>
 
     <create-broadcast-table-rule 
sql-case-id="create-broadcast-table-rule-with-quota">
         <table>t_1</table>
@@ -276,6 +326,13 @@
             <read-data-source>replica_ds_1</read-data-source>
         </rule>
     </create-readwrite-splitting-rule>
+    
+    <create-readwrite-splitting-rule 
sql-case-id="create-static-readwrite-splitting-rule-if-not-exists" 
if-not-exists="true">
+        <rule name="ms_group_0" write-data-source="primary_ds" 
load-balancer="random">
+            <read-data-source>replica_ds_0</read-data-source>
+            <read-data-source>replica_ds_1</read-data-source>
+        </rule>
+    </create-readwrite-splitting-rule>
 
     <create-readwrite-splitting-rule 
sql-case-id="create-readwrite-splitting-rule-with-quota">
         <rule name="ms_group_0" write-data-source="primary_ds" 
load-balancer="random">
@@ -290,6 +347,12 @@
         </rule>
     </create-readwrite-splitting-rule>
     
+    <create-readwrite-splitting-rule 
sql-case-id="create-dynamic-readwrite-splitting-rule-if-not-exists" 
if-not-exists="true">
+        <rule name="ms_group_1" auto-aware-resource="group_0" 
load-balancer="random">
+            <property key="read_weight" value="2:1" />
+        </rule>
+    </create-readwrite-splitting-rule>
+    
     <create-database-discovery-definition-rule 
sql-case-id="create-database-discovery-definition-rule">
         <rule name="ha_group_0" type="mgr">
             <data-source>ds_0</data-source>
@@ -308,6 +371,25 @@
             <property key="keepAliveCron" value="0/6 * * * * ?" />
         </rule>
     </create-database-discovery-definition-rule>
+    
+    <create-database-discovery-definition-rule 
sql-case-id="create-database-discovery-definition-rule-if-not-exists" 
if-not-exists="true">
+        <rule name="ha_group_0" type="mgr">
+            <data-source>ds_0</data-source>
+            <data-source>ds_1</data-source>
+            <discovery-type algorithm-name="mgr">
+                <property key="groupName" value="92504d5b-6dec" />
+            </discovery-type>
+            <property key="keepAliveCron" value="0/5 * * * * ?" />
+        </rule>
+        <rule name="ha_group_1" type="mgr2">
+            <data-source>ds_2</data-source>
+            <data-source>ds_3</data-source>
+            <discovery-type algorithm-name="mgr2">
+                <property key="groupName" value="92504d5b-6dec-2" />
+            </discovery-type>
+            <property key="keepAliveCron" value="0/6 * * * * ?" />
+        </rule>
+    </create-database-discovery-definition-rule>
 
     <create-database-discovery-definition-rule 
sql-case-id="create-database-discovery-rule-with-quota">
         <rule name="ha_group_0" type="mgr">
@@ -340,6 +422,19 @@
             </column>
         </rule>
     </create-encrypt-rule>
+    
+    <create-encrypt-rule sql-case-id="create-encrypt-rule-if-not-exists" 
if-not-exists="true">
+        <rule name="t_encrypt">
+            <column name="user_id" plain-column="user_plain" 
cipher-column="user_cipher">
+                <encryptor algorithm-name="AES">
+                    <property key="aes-key-value" value="123456abc" />
+                </encryptor>
+            </column>
+            <column name="order_id" cipher-column="order_cipher">
+                <encryptor algorithm-name="MD5" />
+            </column>
+        </rule>
+    </create-encrypt-rule>
 
     <create-encrypt-rule sql-case-id="create-encrypt-rule-with-quota">
         <rule name="encrypt">
@@ -412,6 +507,26 @@
         </rule>
     </create-shadow-rule>
     
+    <create-shadow-rule sql-case-id="create-shadow-rule-if-not-exists" 
if-not-exists="true">
+        <rule name="shadow_rule" source="demo_ds" shadow="demo_ds_shadow">
+            <table-rule table-name="t_order">
+                <shadow-algorithm 
algorithm-id="shadow_rule_t_order_regex_match_0">
+                    <algorithm algorithm-name="REGEX_MATCH">
+                        <property key="operation" value="insert" />
+                        <property key="column" value="user_id" />
+                        <property key="regex" value="[1]" />
+                    </algorithm>
+                </shadow-algorithm>
+                <shadow-algorithm 
algorithm-id="shadow_rule_t_order_simple_hint_1">
+                    <algorithm algorithm-name="SIMPLE_HINT">
+                        <property key="shadow" value="true" />
+                        <property key="foo" value="bar" />
+                    </algorithm>
+                </shadow-algorithm>
+            </table-rule>
+        </rule>
+    </create-shadow-rule>
+    
     <create-shadow-rule sql-case-id="create-shadow-rule-with-quota">
         <rule name="shadow_rule" source="demo_ds" shadow="demo_ds_shadow">
             <table-rule table-name="t_order">
@@ -440,6 +555,14 @@
         </strategy>
     </create-default-sharding-strategy>
     
+    <create-default-sharding-strategy 
sql-case-id="create-default-sharding-table-strategy-if-not-exists-with-lower-case"
 if-not-exists="true">
+        <strategy default-type="table" strategy-type="standard" 
sharding-column="order_id">
+            <algorithm-segment algorithm-name="INLINE">
+                <property key="algorithm-expression" value="t_order_${order_id 
% 2}" />
+            </algorithm-segment>
+        </strategy>
+    </create-default-sharding-strategy>
+    
     <create-default-sharding-strategy 
sql-case-id="create-default-sharding-database-strategy">
         <strategy default-type="DATABASE" strategy-type="STANDARD" 
sharding-column="ORDER_ID">
             <algorithm-segment algorithm-name="INLINE">
@@ -448,6 +571,14 @@
         </strategy>
     </create-default-sharding-strategy>
     
+    <create-default-sharding-strategy 
sql-case-id="create-default-sharding-database-strategy-if-not-exists" 
if-not-exists="true">
+        <strategy default-type="DATABASE" strategy-type="STANDARD" 
sharding-column="ORDER_ID">
+            <algorithm-segment algorithm-name="INLINE">
+                <property key="algorithm-expression" value="ms_group_${user_id 
% 2}" />
+            </algorithm-segment>
+        </strategy>
+    </create-default-sharding-strategy>
+    
     <create-default-sharding-strategy 
sql-case-id="create-default-sharding-strategy-complex">
         <strategy default-type="TABLE" strategy-type="complex" 
sharding-column="order_id,user_id">
             <algorithm-segment algorithm-name="INLINE">
@@ -465,6 +596,15 @@
         </shadow-algorithm>
     </create-default-shadow-algorithm>
     
+    <create-default-shadow-algorithm 
sql-case-id="create-default-shadow-algorithm-if-not-exists" 
if-not-exists="true">
+        <shadow-algorithm algorithm-id="default">
+            <algorithm algorithm-name="HINT">
+                <property key="shadow" value="true" />
+                <property key="foo" value="bar" />
+            </algorithm>
+        </shadow-algorithm>
+    </create-default-shadow-algorithm>
+    
     <set-default-single-table-storage-unit 
sql-case-id="set-default-single-table-storage-unit" default-storage-unit="ds_0" 
/>
     <set-default-single-table-storage-unit-random 
sql-case-id="set-default-single-table-storage-unit-random" />
 
@@ -543,4 +683,19 @@
             </column>
         </rule>
     </create-mask-rule>
+    
+    <create-mask-rule sql-case-id="create-mask-rule-if-not-exists" 
if-not-exists="true">
+        <rule name="t_mask">
+            <column name="phone_number">
+                <algorithm algorithm-name="MASK_FROM_X_TO_Y">
+                    <property key="from-x" value="1" />
+                    <property key="to-y" value="2" />
+                    <property key="replace-char" value="*" />
+                </algorithm>
+            </column>
+            <column name="address">
+                <algorithm algorithm-name="MD5"/>
+            </column>
+        </rule>
+    </create-mask-rule>
 </sql-parser-test-cases>
diff --git a/test/it/parser/src/main/resources/sql/supported/rdl/create.xml 
b/test/it/parser/src/main/resources/sql/supported/rdl/create.xml
index 6584b43f928..d0ba75cb715 100644
--- a/test/it/parser/src/main/resources/sql/supported/rdl/create.xml
+++ b/test/it/parser/src/main/resources/sql/supported/rdl/create.xml
@@ -19,6 +19,7 @@
 <sql-cases>
     <sql-case id="register-storage-unit-simple-single-without-password" 
value="REGISTER STORAGE UNIT 
ds_0(HOST='127.0.0.1',PORT=3306,DB='test0',USER='ROOT');" 
db-types="ShardingSphere" />
     <sql-case id="register-storage-unit-simple-single-with-password" 
value="REGISTER STORAGE UNIT 
ds_0(HOST='127.0.0.1',PORT=3306,DB='test0',USER='ROOT',PASSWORD='123456');" 
db-types="ShardingSphere" />
+    <sql-case 
id="register-storage-unit-simple-single-with-password-if-not-exists" 
value="REGISTER STORAGE UNIT IF NOT EXISTS 
ds_0(HOST='127.0.0.1',PORT=3306,DB='test0',USER='ROOT',PASSWORD='123456');" 
db-types="ShardingSphere" />
     <sql-case id="register-storage-unit-simple-multiple" value="REGISTER 
STORAGE UNIT 
ds_0(HOST='127.0.0.1',PORT=3306,DB='test0',USER='ROOT',PASSWORD='123456'), 
ds_1(HOST='127.0.0.1',PORT=3306,DB='test1',USER='ROOT',PASSWORD='123456');" 
db-types="ShardingSphere" />
     <sql-case id="register-storage-unit-url-single-without-password" 
value="REGISTER STORAGE UNIT 
ds_0(URL='jdbc:mysql://127.0.0.1:3306/test0',USER='ROOT');" 
db-types="ShardingSphere" />
     <sql-case id="register-storage-unit-url-single-with-password" 
value="REGISTER STORAGE UNIT 
ds_0(URL='jdbc:mysql://127.0.0.1:3306/test0',USER='ROOT',PASSWORD='123456');" 
db-types="ShardingSphere" />
@@ -27,27 +28,39 @@
     <sql-case id="register-storage-unit-url-single-with-empty-properties" 
value="REGISTER STORAGE UNIT 
ds_0(URL='jdbc:mysql://127.0.0.1:3306/test0',USER='ROOT',PROPERTIES())" 
db-types="ShardingSphere" />
     <sql-case id="register-storage-unit-url-single-with-properties" 
value="REGISTER STORAGE UNIT 
ds_0(URL='jdbc:mysql://127.0.0.1:3306/test0',USER='ROOT',PASSWORD='123456',PROPERTIES('maxPoolSize'='30'))"
 db-types="ShardingSphere" />
     <sql-case id="create-sharding-auto-table-rule" value="CREATE SHARDING 
TABLE RULE t_order (STORAGE_UNITS(ms_group_0,ms_group_1), 
SHARDING_COLUMN=order_id,TYPE(NAME='hash_mod',PROPERTIES('sharding-count'='4')),
 KEY_GENERATE_STRATEGY(COLUMN=another_id,TYPE(NAME='snowflake')))" 
db-types="ShardingSphere" />
+    <sql-case id="create-sharding-auto-table-rule-if-not-exists" value="CREATE 
SHARDING TABLE RULE IF NOT EXISTS t_order 
(STORAGE_UNITS(ms_group_0,ms_group_1), 
SHARDING_COLUMN=order_id,TYPE(NAME='hash_mod',PROPERTIES('sharding-count'='4')),
 KEY_GENERATE_STRATEGY(COLUMN=another_id,TYPE(NAME='snowflake')))" 
db-types="ShardingSphere" />
     <sql-case id="create-sharding-auto-table-rule-with-inline-expression" 
value="CREATE SHARDING TABLE RULE t_order (STORAGE_UNITS('ms_group_${0..1}'), 
SHARDING_COLUMN=order_id,TYPE(NAME='hash_mod',PROPERTIES('sharding-count'=4)), 
KEY_GENERATE_STRATEGY(COLUMN=another_id,TYPE(NAME='snowflake')))" 
db-types="ShardingSphere" />
     <sql-case id="create-sharding-auto-table-rule-with-auditor" value="CREATE 
SHARDING TABLE RULE t_order (STORAGE_UNITS('ms_group_${0..1}'), 
SHARDING_COLUMN=order_id,TYPE(NAME='hash_mod',PROPERTIES('sharding-count'=4)), 
KEY_GENERATE_STRATEGY(COLUMN=another_id,TYPE(NAME='snowflake')), 
AUDIT_STRATEGY(TYPE(NAME='DML_SHARDING_CONDITIONS'),TYPE(NAME='DML_SHARDING_CONDITIONS'),ALLOW_HINT_DISABLE=true))"
 db-types="ShardingSphere" />
     <sql-case id="create-sharding-table-reference-rule" value="CREATE SHARDING 
TABLE REFERENCE RULE reference_0 (t_order,t_order_item), reference_1 (t_1,t_2)" 
db-types="ShardingSphere" />
+    <sql-case id="create-sharding-table-reference-rule-if-not-exists" 
value="CREATE SHARDING TABLE REFERENCE RULE IF NOT EXISTS reference_0 
(t_order,t_order_item), reference_1 (t_1,t_2)" db-types="ShardingSphere" />
     <sql-case id="create-sharding-table-reference-rule-with-quota" 
value="CREATE SHARDING TABLE REFERENCE RULE reference_0 
(`t_order`,`t_order_item`), reference_1 (t_1,t_2)" db-types="ShardingSphere" />
     <sql-case id="create-broadcast-table-rule" value="CREATE BROADCAST TABLE 
RULE t_1,t_2" db-types="ShardingSphere" />
+    <sql-case id="create-broadcast-table-rule-if-not-exists" value="CREATE 
BROADCAST TABLE RULE IF NOT EXISTS t_1,t_2" db-types="ShardingSphere" />
     <sql-case id="create-static-readwrite-splitting-rule" value="CREATE 
READWRITE_SPLITTING RULE ms_group_0 (WRITE_STORAGE_UNIT=primary_ds, 
READ_STORAGE_UNITS(replica_ds_0,replica_ds_1), TYPE(NAME='random')))" 
db-types="ShardingSphere" />
+    <sql-case id="create-static-readwrite-splitting-rule-if-not-exists" 
value="CREATE READWRITE_SPLITTING RULE IF NOT EXISTS ms_group_0 
(WRITE_STORAGE_UNIT=primary_ds, READ_STORAGE_UNITS(replica_ds_0,replica_ds_1), 
TYPE(NAME='random')))" db-types="ShardingSphere" />
     <sql-case id="create-dynamic-readwrite-splitting-rule" value="CREATE 
READWRITE_SPLITTING RULE ms_group_1(AUTO_AWARE_RESOURCE=group_0, 
TYPE(NAME='random',PROPERTIES('read_weight'='2:1')))" db-types="ShardingSphere" 
/>
+    <sql-case id="create-dynamic-readwrite-splitting-rule-if-not-exists" 
value="CREATE READWRITE_SPLITTING RULE IF NOT EXISTS 
ms_group_1(AUTO_AWARE_RESOURCE=group_0, 
TYPE(NAME='random',PROPERTIES('read_weight'='2:1')))" db-types="ShardingSphere" 
/>
     <sql-case id="create-database-discovery-definition-rule" value="CREATE 
DB_DISCOVERY RULE ha_group_0 (STORAGE_UNITS(ds_0,ds_1), 
TYPE(NAME='mgr',PROPERTIES('groupName'='92504d5b-6dec')),HEARTBEAT(PROPERTIES('keepAliveCron'='0/5
 * * * * ?'))), ha_group_1 (STORAGE_UNITS(ds_2,ds_3), 
TYPE(NAME='mgr2',PROPERTIES('groupName'='92504d5b-6dec-2')),HEARTBEAT(PROPERTIES('keepAliveCron'='0/6
 * * * * ?')))" db-types="ShardingSphere" />
+    <sql-case id="create-database-discovery-definition-rule-if-not-exists" 
value="CREATE DB_DISCOVERY RULE IF NOT EXISTS ha_group_0 
(STORAGE_UNITS(ds_0,ds_1), 
TYPE(NAME='mgr',PROPERTIES('groupName'='92504d5b-6dec')),HEARTBEAT(PROPERTIES('keepAliveCron'='0/5
 * * * * ?'))), ha_group_1 (STORAGE_UNITS(ds_2,ds_3), 
TYPE(NAME='mgr2',PROPERTIES('groupName'='92504d5b-6dec-2')),HEARTBEAT(PROPERTIES('keepAliveCron'='0/6
 * * * * ?')))" db-types="ShardingSphere" />
     <sql-case id="create-encrypt-rule" value="CREATE ENCRYPT RULE t_encrypt 
(RESOURCE=ds_1, 
COLUMNS((NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,ENCRYPT_ALGORITHM(TYPE(NAME='AES',PROPERTIES('aes-key-value'='123456abc')))),
 (NAME=order_id, CIPHER =order_cipher,ENCRYPT_ALGORITHM(TYPE(NAME='MD5')))))" 
db-types="ShardingSphere" />
+    <sql-case id="create-encrypt-rule-if-not-exists" value="CREATE ENCRYPT 
RULE IF NOT EXISTS t_encrypt (RESOURCE=ds_1, 
COLUMNS((NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,ENCRYPT_ALGORITHM(TYPE(NAME='AES',PROPERTIES('aes-key-value'='123456abc')))),
 (NAME=order_id, CIPHER =order_cipher,ENCRYPT_ALGORITHM(TYPE(NAME='MD5')))))" 
db-types="ShardingSphere" />
     <sql-case id="create-encrypt-rule-with-assisted-query-column" 
value="CREATE ENCRYPT RULE t_encrypt (RESOURCE=ds_1, 
COLUMNS((NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,ASSISTED_QUERY_COLUMN=assisted_column,
 ENCRYPT_ALGORITHM(TYPE(NAME='AES',PROPERTIES('aes-key-value'='123456abc'))), 
ASSISTED_QUERY_ALGORITHM(TYPE(NAME='MD5'))), (NAME=order_id, CIPHER 
=order_cipher,ENCRYPT_ALGORITHM(TYPE(NAME='MD5')))))" db-types="ShardingSphere" 
/>
     <sql-case id="create-encrypt-rule-with-like-query-column" value="CREATE 
ENCRYPT RULE t_encrypt (RESOURCE=ds_1, 
COLUMNS((NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,LIKE_QUERY_COLUMN=like_column,
 ENCRYPT_ALGORITHM(TYPE(NAME='AES',PROPERTIES('aes-key-value'='123456abc'))), 
LIKE_QUERY_ALGORITHM(TYPE(NAME='CHAR_DIGEST_LIKE'))), (NAME=order_id, CIPHER 
=order_cipher,ENCRYPT_ALGORITHM(TYPE(NAME='MD5')))))" db-types="ShardingSphere" 
/>
     <sql-case id="create-shadow-rule" value="CREATE SHADOW RULE 
shadow_rule(SOURCE=demo_ds,SHADOW=demo_ds_shadow,t_order(TYPE(NAME='REGEX_MATCH',PROPERTIES('operation'='insert','column'='user_id','regex'='[1]')),TYPE(NAME='SIMPLE_HINT',PROPERTIES('shadow'='true','foo'='bar'))))"
 db-types="ShardingSphere" />
+    <sql-case id="create-shadow-rule-if-not-exists" value="CREATE SHADOW RULE 
IF NOT EXISTS 
shadow_rule(SOURCE=demo_ds,SHADOW=demo_ds_shadow,t_order(TYPE(NAME='REGEX_MATCH',PROPERTIES('operation'='insert','column'='user_id','regex'='[1]')),TYPE(NAME='SIMPLE_HINT',PROPERTIES('shadow'='true','foo'='bar'))))"
 db-types="ShardingSphere" />
     <sql-case id="create-default-sharding-table-strategy-with-lower-case" 
value="create default sharding table strategy(type='standard', 
sharding_column=order_id, 
SHARDING_ALGORITHM(TYPE(NAME='INLINE',PROPERTIES('algorithm-expression'='t_order_${order_id
 % 2}'))))" db-types="ShardingSphere" />
+    <sql-case 
id="create-default-sharding-table-strategy-if-not-exists-with-lower-case" 
value="create default sharding table strategy if not exists(type='standard', 
sharding_column=order_id, 
SHARDING_ALGORITHM(TYPE(NAME='INLINE',PROPERTIES('algorithm-expression'='t_order_${order_id
 % 2}'))))" db-types="ShardingSphere" />
     <sql-case id="create-default-sharding-database-strategy" value="CREATE 
DEFAULT SHARDING DATABASE STRATEGY(TYPE='STANDARD', SHARDING_COLUMN=ORDER_ID, 
SHARDING_ALGORITHM(TYPE(NAME='INLINE',PROPERTIES('algorithm-expression'='ms_group_${order_id
 % 2}'))))" db-types="ShardingSphere" />
+    <sql-case id="create-default-sharding-database-strategy-if-not-exists" 
value="CREATE DEFAULT SHARDING DATABASE STRATEGY IF NOT EXISTS 
(TYPE='STANDARD', SHARDING_COLUMN=ORDER_ID, 
SHARDING_ALGORITHM(TYPE(NAME='INLINE',PROPERTIES('algorithm-expression'='ms_group_${order_id
 % 2}'))))" db-types="ShardingSphere" />
     <sql-case id="create-default-sharding-strategy-complex" value="CREATE 
DEFAULT SHARDING TABLE STRATEGY(TYPE='complex', 
SHARDING_COLUMNS=order_id,user_id, 
SHARDING_ALGORITHM(TYPE(NAME='INLINE',PROPERTIES('algorithm-expression'='t_order_${user_id
 % 2}_${order_id % 2}'))))" db-types="ShardingSphere" />
     <sql-case id="create-sharding-table-rule" value="CREATE SHARDING TABLE 
RULE t_order 
(DATANODES('ms_group_${0..1}.t_order_${0..1}'),DATABASE_STRATEGY(TYPE='standard',sharding_column
 = 
order_id,sharding_algorithm(type(name='INLINE',PROPERTIES('algorithm-expression'='ms_group_${order_id
 % 2}')))),TABLE_STRATEGY(TYPE='standard',sharding_column = 
user_id,sharding_algorithm(type(name='INLINE',PROPERTIES('algorithm-expression'='t_order_${user_id
 % 2}')))),KEY_GENERATE_STRATEGY(COLUMN=anothe [...]
     <sql-case id="create-sharding-table-rule-with-enum-inline-expression" 
value="CREATE SHARDING TABLE RULE t_order 
(DATANODES(&quot;ms_group_${['abc','ac']}.t_order_${0..1}&quot;),DATABASE_STRATEGY(TYPE='standard',sharding_column
 = 
order_name,sharding_algorithm(type(name='INLINE',PROPERTIES('algorithm-expression'='ms_group_{order_name}')))),TABLE_STRATEGY(TYPE='standard',sharding_column
 = 
user_id,sharding_algorithm(type(name='INLINE',PROPERTIES('algorithm-expression'='t_order_${user_id
  [...]
     <sql-case id="create-sharding-table-rule-complex" value="CREATE SHARDING 
TABLE RULE t_order 
(DATANODES('ms_group_${0..1}_${0..1}.t_order_${0..1}'),DATABASE_STRATEGY(TYPE='complex',sharding_columns
 = 
order_id,user_id,sharding_algorithm(type(name='INLINE',PROPERTIES('algorithm-expression'='ms_group_${order_id
 % 2}_${user_id % 2}')))),TABLE_STRATEGY(TYPE='standard',sharding_column = 
user_id,sharding_algorithm(type(name='INLINE',PROPERTIES('algorithm-expression'='t_order_${user_id
 % 2}') [...]
     <sql-case id="create-sharding-table-rule-with-auto-create-algorithm" 
value="CREATE SHARDING TABLE RULE t_order 
(DATANODES('ms_group_${0..1}.t_order_${0..1}'),DATABASE_STRATEGY(TYPE='standard',sharding_column
 = 
order_id,sharding_algorithm(TYPE(NAME='INLINE',PROPERTIES('algorithm-expression'='ms_group_${order_id
 % 2}')))),TABLE_STRATEGY(TYPE='standard',sharding_column = 
user_id,sharding_algorithm(type(name='INLINE',PROPERTIES('algorithm-expression'='t_order_${user_id
 % 2}')))),KEY_GENE [...]
     <sql-case id="create-sharding-table-rule-with-auditor" value="CREATE 
SHARDING TABLE RULE t_order 
(DATANODES('ms_group_${0..1}.t_order_${0..1}'),DATABASE_STRATEGY(TYPE='standard',sharding_column
 = 
order_id,sharding_algorithm(TYPE(NAME='INLINE',PROPERTIES('algorithm-expression'='ms_group_${order_id
 % 2}')))),TABLE_STRATEGY(TYPE='standard',sharding_column = 
user_id,sharding_algorithm(type(name='INLINE',PROPERTIES('algorithm-expression'='t_order_${user_id
 % 2}')))),KEY_GENERATE_STRATEGY( [...]
+    <sql-case id="create-sharding-table-rule-with-auditor-if-not-exists" 
value="CREATE SHARDING TABLE RULE IF NOT EXISTS t_order 
(DATANODES('ms_group_${0..1}.t_order_${0..1}'),DATABASE_STRATEGY(TYPE='standard',sharding_column
 = 
order_id,sharding_algorithm(TYPE(NAME='INLINE',PROPERTIES('algorithm-expression'='ms_group_${order_id
 % 2}')))),TABLE_STRATEGY(TYPE='standard',sharding_column = 
user_id,sharding_algorithm(type(name='INLINE',PROPERTIES('algorithm-expression'='t_order_${user_id
 % 2} [...]
     <sql-case id="create-default-shadow-algorithm" value="CREATE DEFAULT 
SHADOW ALGORITHM TYPE(NAME='HINT', PROPERTIES('shadow'='true', 'foo'='bar'))" 
db-types="ShardingSphere" />
+    <sql-case id="create-default-shadow-algorithm-if-not-exists" value="CREATE 
DEFAULT SHADOW ALGORITHM IF NOT EXISTS TYPE(NAME='HINT', 
PROPERTIES('shadow'='true', 'foo'='bar'))" db-types="ShardingSphere" />
     <sql-case id="set-default-single-table-storage-unit" value="SET DEFAULT 
SINGLE TABLE STORAGE UNIT = ds_0" db-types="ShardingSphere" />
     <sql-case id="set-default-single-table-storage-unit-random" value="SET 
DEFAULT SINGLE TABLE STORAGE UNIT = RANDOM" db-types="ShardingSphere" />
     <sql-case id="register-storage-unit-with-quota" value="REGISTER STORAGE 
UNIT `ds_0`(HOST='127.0.0.1',PORT=3306,DB='test0',USER='ROOT');" 
db-types="ShardingSphere" />
@@ -59,5 +72,6 @@
     <sql-case id="create-encrypt-rule-with-query-with-cipher-column" 
value="CREATE ENCRYPT RULE `encrypt` (RESOURCE=ds_1, 
COLUMNS((NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,ENCRYPT_ALGORITHM(TYPE(NAME='AES',PROPERTIES('aes-key-value'='123456abc'))))),QUERY_WITH_CIPHER_COLUMN=false)"
 db-types="ShardingSphere" />
     <sql-case id="create-shadow-rule-with-quota" value="CREATE SHADOW RULE 
`shadow_rule`(SOURCE=demo_ds,SHADOW=demo_ds_shadow,t_order(TYPE(NAME='REGEX_MATCH',PROPERTIES('operation'='insert','column'='user_id','regex'='[1]')),TYPE(NAME='SIMPLE_HINT',PROPERTIES('shadow'='true','foo'='bar'))))"
 db-types="ShardingSphere" />
     <sql-case id="single-register-migration-source-storage-unit" 
value="REGISTER MIGRATION SOURCE STORAGE UNIT ds_0 
(URL='jdbc:mysql://127.0.0.1:3306/test0',USER='ROOT',PASSWORD='123456');" 
db-types="ShardingSphere" />
-    <sql-case id="create-mask-rule" value="CREATE MASK RULE if not exists 
t_mask (COLUMNS((NAME=phone_number,TYPE(NAME='MASK_FROM_X_TO_Y', 
PROPERTIES('from-x'=1, 'to-y'=2, 'replace-char'='*'))), 
(NAME=address,TYPE(NAME=MD5))));" db-types="ShardingSphere" />
+    <sql-case id="create-mask-rule" value="CREATE MASK RULE t_mask 
(COLUMNS((NAME=phone_number,TYPE(NAME='MASK_FROM_X_TO_Y', 
PROPERTIES('from-x'=1, 'to-y'=2, 'replace-char'='*'))), 
(NAME=address,TYPE(NAME=MD5))));" db-types="ShardingSphere" />
+    <sql-case id="create-mask-rule-if-not-exists" value="CREATE MASK RULE IF 
NOT EXISTS t_mask (COLUMNS((NAME=phone_number,TYPE(NAME='MASK_FROM_X_TO_Y', 
PROPERTIES('from-x'=1, 'to-y'=2, 'replace-char'='*'))), 
(NAME=address,TYPE(NAME=MD5))));" db-types="ShardingSphere" />
 </sql-cases>

Reply via email to