This is an automated email from the ASF dual-hosted git repository.

zstan 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 041c6cd395 IGNITE-21134 Sql. Support NULL column type in jdbc (#3034)
041c6cd395 is described below

commit 041c6cd395fbb88f4f5c9cb5fda5f1f461ff6ffb
Author: Evgeniy Stanilovskiy <[email protected]>
AuthorDate: Thu Jan 18 09:13:54 2024 +0300

    IGNITE-21134 Sql. Support NULL column type in jdbc (#3034)
---
 .../ignite/internal/jdbc/JdbcConverterUtils.java   |  3 +++
 .../ignite/jdbc/ItJdbcStatementSelfTest.java       | 26 ++++++++++++++++++++++
 .../sql/engine/ItDynamicParameterTest.java         |  1 +
 .../internal/sql/engine/ItFunctionsTest.java       |  9 ++++++++
 4 files changed, 39 insertions(+)

diff --git 
a/modules/client-common/src/main/java/org/apache/ignite/internal/jdbc/JdbcConverterUtils.java
 
b/modules/client-common/src/main/java/org/apache/ignite/internal/jdbc/JdbcConverterUtils.java
index 2098aae0d3..d564e79873 100644
--- 
a/modules/client-common/src/main/java/org/apache/ignite/internal/jdbc/JdbcConverterUtils.java
+++ 
b/modules/client-common/src/main/java/org/apache/ignite/internal/jdbc/JdbcConverterUtils.java
@@ -116,6 +116,9 @@ public class JdbcConverterUtils {
             case PERIOD:
                 return binaryTuple.periodValue(idx);
 
+            case NULL:
+                return null;
+
             default:
                 throw new IllegalArgumentException("Unsupported Column type " 
+ columnType);
         }
diff --git 
a/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcStatementSelfTest.java
 
b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcStatementSelfTest.java
index dcb939a066..e2bceb6197 100644
--- 
a/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcStatementSelfTest.java
+++ 
b/modules/jdbc/src/integrationTest/java/org/apache/ignite/jdbc/ItJdbcStatementSelfTest.java
@@ -29,10 +29,12 @@ import static org.junit.jupiter.api.Assertions.fail;
 import java.sql.Connection;
 import java.sql.DriverManager;
 import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
 import java.sql.SQLException;
 import java.sql.SQLFeatureNotSupportedException;
 import java.sql.Statement;
 import java.util.UUID;
+import org.apache.ignite.sql.ColumnType;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeAll;
@@ -163,6 +165,30 @@ public class ItJdbcStatementSelfTest extends 
ItJdbcAbstractStatementSelfTest {
         assertFalse(stmt.getMoreResults(), "Statement has more results.");
     }
 
+    @Test
+    public void executeQueryWithNullColTypes() throws Exception {
+        ResultSet rs = stmt.executeQuery("SELECT LOWER(NULL), UPPER(NULL), 
SUBSTRING(NULL FROM 1 FOR 2)");
+        rs.next();
+        assertNull(rs.getString(1));
+        assertNull(rs.getString(2));
+        assertNull(rs.getString(3));
+
+        ResultSetMetaData meta = rs.getMetaData();
+        assertEquals(ColumnType.NULL.toString(), meta.getColumnTypeName(1));
+        assertEquals(ColumnType.NULL.toString(), meta.getColumnTypeName(2));
+        assertEquals(ColumnType.NULL.toString(), meta.getColumnTypeName(3));
+
+        stmt.executeUpdate("DELETE FROM TEST");
+        stmt.executeUpdate("insert into TEST (ID, NAME) values (1, null)");
+
+        rs = stmt.executeQuery("SELECT LOWER(NAME) FROM TEST");
+        rs.next();
+        assertNull(rs.getObject(1));
+
+        meta = rs.getMetaData();
+        assertEquals("VARCHAR", meta.getColumnTypeName(1));
+    }
+
     @Test
     public void testExecuteAndFetch() throws Exception {
         try (Statement statement = conn.createStatement()) {
diff --git 
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItDynamicParameterTest.java
 
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItDynamicParameterTest.java
index ffc6803f57..d47c960beb 100644
--- 
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItDynamicParameterTest.java
+++ 
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItDynamicParameterTest.java
@@ -87,6 +87,7 @@ public class ItDynamicParameterTest extends 
BaseSqlIntegrationTest {
     public void testDynamicParameters() {
         assertQuery("SELECT COALESCE(null, 
?)").withParams(13).returns(13).check();
         assertQuery("SELECT 
LOWER(?)").withParams("ASD").returns("asd").check();
+        assertQuery("SELECT LOWER(?)").withParams(null).returns(null).check();
         assertQuery("SELECT POWER(?, ?)").withParams(2, 3).returns(8d).check();
         assertQuery("SELECT SQRT(?)").withParams(4d).returns(2d).check();
         assertQuery("SELECT ?").withParams("asd").returns("asd").check();
diff --git 
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItFunctionsTest.java
 
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItFunctionsTest.java
index e947a3f80a..810a8c52b4 100644
--- 
a/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItFunctionsTest.java
+++ 
b/modules/sql-engine/src/integrationTest/java/org/apache/ignite/internal/sql/engine/ItFunctionsTest.java
@@ -344,6 +344,15 @@ public class ItFunctionsTest extends 
BaseSqlIntegrationTest {
                 "negative substring length");
     }
 
+    /** Tests LOWER, UPPER functions. */
+    @Test
+    public void testLowerUpper() {
+        assertQuery("SELECT LOWER(NULL)").returns(null).check();
+        assertQuery("SELECT LOWER('NULL')").returns("null").check();
+        assertQuery("SELECT UPPER(NULL)").returns(null).check();
+        assertQuery("SELECT UPPER('NULL')").returns("NULL").check();
+    }
+
     /**
      * Tests for {@code SUBSTR(str, start[, length])} function.
      */

Reply via email to