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("ms_group_${['abc','ac']}.t_order_${0..1}"),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>