This is an automated email from the ASF dual-hosted git repository.
jooger pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
The following commit(s) were added to refs/heads/main by this push:
new dcf2595c5b IGNITE-21974: Extend test coverage for SQL F221(Explicit
defaults) (#3910)
dcf2595c5b is described below
commit dcf2595c5bc75d2cb66df527c8de0cd9a49867b7
Author: Max Zhuravkov <[email protected]>
AuthorDate: Wed Jun 12 18:42:53 2024 +0400
IGNITE-21974: Extend test coverage for SQL F221(Explicit defaults) (#3910)
---
.../ignite/internal/sql/engine/ItDmlTest.java | 64 +++++++++++++++++++---
1 file changed, 57 insertions(+), 7 deletions(-)
diff --git
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItDmlTest.java
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItDmlTest.java
index a9f3d73d69..d187b2df22 100644
---
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItDmlTest.java
+++
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItDmlTest.java
@@ -32,6 +32,7 @@ import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.ArrayList;
import java.util.List;
+import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.apache.calcite.sql.type.SqlTypeName;
@@ -486,15 +487,14 @@ public class ItDmlTest extends BaseSqlIntegrationTest {
.returns(3)
.check();
- var pkVals = sql("select \"__p_key\" from t").stream().map(row ->
row.get(0)).collect(Collectors.toSet());
+ Set<?> pkVals = sql("select \"__p_key\" from t").stream().map(row ->
row.get(0)).collect(Collectors.toSet());
assertEquals(3, pkVals.size());
}
private static Stream<DefaultValueArg> defaultValueArgs() {
- return Stream.of(
+ Stream<DefaultValueArg> vals = Stream.of(
new DefaultValueArg("BOOLEAN", "TRUE", Boolean.TRUE),
- new DefaultValueArg("BOOLEAN NOT NULL", "TRUE", Boolean.TRUE),
new DefaultValueArg("BIGINT", "10", 10L),
new DefaultValueArg("INTEGER", "10", 10),
@@ -504,7 +504,6 @@ public class ItDmlTest extends BaseSqlIntegrationTest {
new DefaultValueArg("FLOAT", "10.01", 10.01f),
new DefaultValueArg("DECIMAL(4, 2)", "10.01", new
BigDecimal("10.01")),
new DefaultValueArg("VARCHAR", "'10'", "10"),
- new DefaultValueArg("VARCHAR NOT NULL", "'10'", "10"),
new DefaultValueArg("VARCHAR(2)", "'10'", "10"),
// TODO: IGNITE-17373
@@ -523,10 +522,12 @@ public class ItDmlTest extends BaseSqlIntegrationTest {
new DefaultValueArg("BINARY(3)", "x'010203'", new byte[]{1, 2,
3}),
new DefaultValueArg("VARBINARY", "x'010203'", new byte[]{1, 2,
3})
);
+ return vals.flatMap(arg -> Stream.of(arg, new
DefaultValueArg(arg.sqlType + " NOT NULL", arg.sqlVal, arg.expectedVal)));
}
@Test
public void testInsertDefaultValue() {
+ // SQL Standard 2016 feature F221 - Explicit defaults
checkDefaultValue(defaultValueArgs().collect(Collectors.toList()));
checkWrongDefault("VARCHAR(1)", "10");
@@ -547,6 +548,7 @@ public class ItDmlTest extends BaseSqlIntegrationTest {
@Test
public void testInsertDefaultNullValue() {
+ // SQL Standard 2016 feature F221 - Explicit defaults
checkDefaultValue(defaultValueArgs()
.filter(a -> !a.sqlType.endsWith("NOT NULL"))
.map(a -> new DefaultValueArg(a.sqlType, "NULL", null))
@@ -570,7 +572,7 @@ public class ItDmlTest extends BaseSqlIntegrationTest {
sql(createStatement);
sql("INSERT INTO test (id) VALUES (0)");
- var expectedVals = args.stream()
+ List<Object> expectedVals = args.stream()
.map(a -> a.expectedVal)
.collect(Collectors.toList());
@@ -580,7 +582,7 @@ public class ItDmlTest extends BaseSqlIntegrationTest {
columnEnumerationBuilder.append(", col_").append(i);
}
- var columnEnumeration = columnEnumerationBuilder.toString();
+ String columnEnumeration = columnEnumerationBuilder.toString();
checkQueryResult("SELECT " + columnEnumeration + " FROM test",
expectedVals);
@@ -596,11 +598,57 @@ public class ItDmlTest extends BaseSqlIntegrationTest {
@Test
public void testCheckNullValueErrorMessageForColumnWithDefaultValue() {
+ // SQL Standard 2016 feature F221 - Explicit defaults
sql("CREATE TABLE tbl(key int DEFAULT 9 primary key, val varchar)");
var expectedMessage = "Column 'KEY' does not allow NULLs";
- assertThrowsSqlException(Sql.CONSTRAINT_VIOLATION_ERR,
expectedMessage, () -> sql("INSERT INTO tbl (key, val) VALUES (NULL,'AA')"));
+ assertThrowsSqlException(
+ Sql.CONSTRAINT_VIOLATION_ERR,
+ expectedMessage,
+ () -> sql("INSERT INTO tbl (key, val) VALUES (NULL,'AA')"));
+ }
+
+ // UPDATE set x = DEFAULT is not supported in parser
+ @Disabled("https://issues.apache.org/jira/browse/IGNITE-21462")
+ @Test
+ public void testUpdateAllowsDefault() {
+ // SQL Standard 2016 feature F221 - Explicit defaults
+ for (DefaultValueArg arg :
defaultValueArgs().collect(Collectors.toList())) {
+ try {
+ sql(format("CREATE TABLE test (id INT PRIMARY KEY, val %s
DEFAULT %s)", arg.sqlType, arg.sqlVal));
+ sql("INSERT INTO test (id, val) VALUES (1, NULL)");
+
+ sql("UPDATE test SET val = DEFAULT WHERE id = 1");
+ assertQuery("SELECT val FROM test WHERE id =
1").returns(arg.expectedVal).check();
+ } finally {
+ sql("DROP TABLE IF EXISTS test");
+ }
+ }
+ }
+
+ @Test
+ public void testDropDefault() {
+ // SQL Standard 2016 feature F221 - Explicit defaults
+ for (DefaultValueArg arg :
defaultValueArgs().collect(Collectors.toList())) {
+ try {
+ sql(format("CREATE TABLE test (id INT PRIMARY KEY, val {}
DEFAULT {})", arg.sqlType, arg.sqlVal));
+ sql("INSERT INTO test (id) VALUES (1)");
+ assertQuery("SELECT val FROM test WHERE id =
1").returns(arg.expectedVal).check();
+
+ sql("ALTER TABLE test ALTER COLUMN val DROP DEFAULT");
+
+ if (arg.sqlType.endsWith("NOT NULL")) {
+ assertThrowsSqlException(Sql.CONSTRAINT_VIOLATION_ERR,
"Column 'VAL' does not allow NULL",
+ () -> sql("INSERT INTO test (id) VALUES (2)"));
+ } else {
+ sql("INSERT INTO test (id) VALUES (2)");
+ assertQuery("SELECT val FROM test WHERE id =
2").returns(null).check();
+ }
+ } finally {
+ sql("DROP TABLE IF EXISTS test");
+ }
+ }
}
private void checkQueryResult(String sql, List<Object> expectedVals) {
@@ -638,6 +686,7 @@ public class ItDmlTest extends BaseSqlIntegrationTest {
@Test
public void testInsertMultipleDefaults() {
+ // SQL Standard 2016 feature F221 - Explicit defaults
sql("CREATE TABLE integers(i INTEGER PRIMARY KEY, col1 INTEGER DEFAULT
200, col2 INTEGER DEFAULT 300)");
sql("INSERT INTO integers (i) VALUES (0)");
@@ -666,6 +715,7 @@ public class ItDmlTest extends BaseSqlIntegrationTest {
@Test
@WithSystemProperty(key = "IMPLICIT_PK_ENABLED", value = "true")
public void testInsertMultipleDefaultsWithImplicitPk() {
+ // SQL Standard 2016 feature F221 - Explicit defaults
sql("CREATE TABLE integers(i INTEGER, j INTEGER DEFAULT 100)");
sql("INSERT INTO integers VALUES (1, DEFAULT)");