From 7ad0f28f8d6d74031cb8a51d9fe5c3c2ecd6c218 Mon Sep 17 00:00:00 2001 From: Cathleen Yan <58714163+cathleeny@users.noreply.github.com> Date: Tue, 8 Sep 2026 22:11:34 +0000 Subject: [PATCH] fix(metadata): order getTypeInfo rows by DATA_TYPE Signed-off-by: Cathleen Yan <58714163+cathleeny@users.noreply.github.com> --- NEXT_CHANGELOG.md | 2 + .../impl/common/MetadataResultSetBuilder.java | 40 +++++++++---------- .../common/MetadataResultSetBuilderTest.java | 18 +++++++++ 3 files changed, 40 insertions(+), 20 deletions(-) diff --git a/NEXT_CHANGELOG.md b/NEXT_CHANGELOG.md index 462204c9c1..86eb369519 100644 --- a/NEXT_CHANGELOG.md +++ b/NEXT_CHANGELOG.md @@ -11,6 +11,8 @@ - Updated bundled Jackson, lz4-java, Netty, and Apache HttpComponents Client and Core dependencies to patched versions to address security findings. ### Fixed +- Fixed `DatabaseMetaData.getTypeInfo()` returning the `INTERVAL` row out of `DATA_TYPE` order. + - Fixed later logging-enabled connections being unable to produce logs when an earlier connection used `LogLevel=OFF`. The first enabled connection now establishes the shared JUL handler, while a later `OFF` connection does not disable it. diff --git a/src/main/java/com/databricks/jdbc/dbclient/impl/common/MetadataResultSetBuilder.java b/src/main/java/com/databricks/jdbc/dbclient/impl/common/MetadataResultSetBuilder.java index a37941b79f..175567d9fe 100644 --- a/src/main/java/com/databricks/jdbc/dbclient/impl/common/MetadataResultSetBuilder.java +++ b/src/main/java/com/databricks/jdbc/dbclient/impl/common/MetadataResultSetBuilder.java @@ -344,6 +344,26 @@ public class MetadataResultSetBuilder { null, null }, + { + "INTERVAL", + Types.VARCHAR, + 40, + "'", + "'", + "Qualifier", + typeNullable, + false, + typeSearchable, + null, + false, + null, + "INTERVAL", + 0, + 6, + Types.VARCHAR, + null, + null + }, { "BOOLEAN", Types.BOOLEAN, @@ -423,26 +443,6 @@ public class MetadataResultSetBuilder { Types.TIMESTAMP, 3, null - }, - { - "INTERVAL", - Types.VARCHAR, - 40, - "'", - "'", - "Qualifier", - typeNullable, - false, - typeSearchable, - null, - false, - null, - "INTERVAL", - 0, - 6, - Types.VARCHAR, - null, - null } }; diff --git a/src/test/java/com/databricks/jdbc/dbclient/impl/common/MetadataResultSetBuilderTest.java b/src/test/java/com/databricks/jdbc/dbclient/impl/common/MetadataResultSetBuilderTest.java index bd42fef538..57dff29497 100644 --- a/src/test/java/com/databricks/jdbc/dbclient/impl/common/MetadataResultSetBuilderTest.java +++ b/src/test/java/com/databricks/jdbc/dbclient/impl/common/MetadataResultSetBuilderTest.java @@ -44,6 +44,24 @@ void tearDown() { DatabricksThreadContextHolder.clearAllContext(); } + @Test + void testTypeInfoRowsAreOrderedByDataType() throws SQLException { + List actualDataTypes = new ArrayList<>(); + try (DatabricksResultSet resultSet = metadataResultSetBuilder.getTypeInfoResult()) { + while (resultSet.next()) { + actualDataTypes.add(resultSet.getInt("DATA_TYPE")); + } + } + + assertFalse(actualDataTypes.isEmpty(), "TYPE_INFO should contain at least one row"); + List sortedDataTypes = new ArrayList<>(actualDataTypes); + sortedDataTypes.sort(Integer::compareTo); + assertEquals( + sortedDataTypes, + actualDataTypes, + "TYPE_INFO rows should be ordered by DATA_TYPE as required by DatabaseMetaData"); + } + @Test void testThriftNativeFormattingMatchesRawThriftBuilder() throws SQLException { assertNativeFormattingMatchesThrift(