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.
*/