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)");

Reply via email to