From 5973cba6d383867354462382350185a2841aa65d Mon Sep 17 00:00:00 2001 From: nicktorwald Date: Mon, 8 Apr 2019 14:01:07 +0700 Subject: [PATCH] Add support for nullsAreSorted* methods group Add support for nullsAreSortedLow as a default sorting which is provided by Tarantool DB. Fixes: #120 --- .../tarantool/jdbc/SQLDatabaseMetadata.java | 8 ++--- .../org/tarantool/jdbc/AbstractJdbcIT.java | 5 +++- .../jdbc/JdbcDatabaseMetaDataIT.java | 11 +++++++ .../org/tarantool/jdbc/JdbcResultSetIT.java | 30 +++++++++++++++++++ 4 files changed, 49 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/tarantool/jdbc/SQLDatabaseMetadata.java b/src/main/java/org/tarantool/jdbc/SQLDatabaseMetadata.java index edf13591..9a4738f6 100644 --- a/src/main/java/org/tarantool/jdbc/SQLDatabaseMetadata.java +++ b/src/main/java/org/tarantool/jdbc/SQLDatabaseMetadata.java @@ -80,22 +80,22 @@ public boolean isReadOnly() throws SQLException { @Override public boolean nullsAreSortedHigh() throws SQLException { - return true; + return false; } @Override public boolean nullsAreSortedLow() throws SQLException { - return !nullsAreSortedHigh(); + return true; } @Override public boolean nullsAreSortedAtStart() throws SQLException { - return true; + return false; } @Override public boolean nullsAreSortedAtEnd() throws SQLException { - return !nullsAreSortedAtStart(); + return false; } @Override diff --git a/src/test/java/org/tarantool/jdbc/AbstractJdbcIT.java b/src/test/java/org/tarantool/jdbc/AbstractJdbcIT.java index 55cb42ee..b16cd3cf 100644 --- a/src/test/java/org/tarantool/jdbc/AbstractJdbcIT.java +++ b/src/test/java/org/tarantool/jdbc/AbstractJdbcIT.java @@ -38,13 +38,16 @@ public abstract class AbstractJdbcIT { "CREATE TABLE test(id INT PRIMARY KEY, val VARCHAR(100))", "INSERT INTO test VALUES (1, 'one'), (2, 'two'), (3, 'three')", "CREATE TABLE test_compound(id1 INT, id2 INT, val VARCHAR(100), PRIMARY KEY (id2, id1))", + "CREATE TABLE test_nulls(id INT PRIMARY KEY, val VARCHAR(100))", + "INSERT INTO test_nulls VALUES (1, 'a'), (2, 'b'), (3, 'c'), (4, NULL), (5, NULL), (6, NULL)", getCreateTableSQL("test_types", TntSqlType.values()) }; private static String[] cleanSql = new String[] { "DROP TABLE IF EXISTS test", "DROP TABLE IF EXISTS test_types", - "DROP TABLE IF EXISTS test_compound" + "DROP TABLE IF EXISTS test_compound", + "DROP TABLE IF EXISTS test_nulls" }; protected static TarantoolControl control; diff --git a/src/test/java/org/tarantool/jdbc/JdbcDatabaseMetaDataIT.java b/src/test/java/org/tarantool/jdbc/JdbcDatabaseMetaDataIT.java index 29dd6dea..da2e1438 100644 --- a/src/test/java/org/tarantool/jdbc/JdbcDatabaseMetaDataIT.java +++ b/src/test/java/org/tarantool/jdbc/JdbcDatabaseMetaDataIT.java @@ -50,6 +50,9 @@ public void testGetAllTables() throws SQLException { assertTrue(rs.next()); assertEquals("TEST_COMPOUND", rs.getString("TABLE_NAME")); + assertTrue(rs.next()); + assertEquals("TEST_NULLS", rs.getString("TABLE_NAME")); + assertTrue(rs.next()); assertEquals("TEST_TYPES", rs.getString("TABLE_NAME")); @@ -272,4 +275,12 @@ public void testSupportGeneratedKeys() throws SQLException { assertFalse(meta.supportsGetGeneratedKeys()); } + @Test + public void testNullsAreSortedProperties() throws SQLException { + assertTrue(meta.nullsAreSortedLow()); + assertFalse(meta.nullsAreSortedHigh()); + + assertFalse(meta.nullsAreSortedAtStart()); + assertFalse(meta.nullsAreSortedAtEnd()); + } } diff --git a/src/test/java/org/tarantool/jdbc/JdbcResultSetIT.java b/src/test/java/org/tarantool/jdbc/JdbcResultSetIT.java index 5ceac2d7..1d30cc13 100644 --- a/src/test/java/org/tarantool/jdbc/JdbcResultSetIT.java +++ b/src/test/java/org/tarantool/jdbc/JdbcResultSetIT.java @@ -3,6 +3,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -17,6 +18,7 @@ import java.sql.Statement; public class JdbcResultSetIT extends JdbcTypesIT { + private Statement stmt; private DatabaseMetaData metaData; @@ -148,4 +150,32 @@ public void testIsWrapperFor() throws SQLException { assertFalse(resultSet.isWrapperFor(Integer.class)); } + @Test + public void testNullsSortingAsc() throws SQLException { + ResultSet resultSet = stmt.executeQuery("SELECT * FROM test_nulls ORDER BY val ASC"); + for (int i = 0; i < 3; i++) { + assertTrue(resultSet.next()); + assertNull(resultSet.getString(2)); + } + for (int i = 0; i < 3; i++) { + assertTrue(resultSet.next()); + assertNotNull(resultSet.getString(2)); + } + assertFalse(resultSet.next()); + } + + @Test + public void testNullsSortingDesc() throws SQLException { + ResultSet resultSet = stmt.executeQuery("SELECT * FROM test_nulls ORDER BY val DESC"); + for (int i = 0; i < 3; i++) { + assertTrue(resultSet.next()); + assertNotNull(resultSet.getString(2)); + } + for (int i = 0; i < 3; i++) { + assertTrue(resultSet.next()); + assertNull(resultSet.getString(2)); + } + assertFalse(resultSet.next()); + } + }