diff --git a/plugins/jdbc/src/main/java/app/dbx/jdbc/DbxJdbcPlugin.java b/plugins/jdbc/src/main/java/app/dbx/jdbc/DbxJdbcPlugin.java index c40a555b36..59571d32f2 100644 --- a/plugins/jdbc/src/main/java/app/dbx/jdbc/DbxJdbcPlugin.java +++ b/plugins/jdbc/src/main/java/app/dbx/jdbc/DbxJdbcPlugin.java @@ -3389,6 +3389,7 @@ public final class DbxJdbcPlugin { return rs.getString(1); } } + } catch (SQLException ignored) { } return null; } @@ -3402,6 +3403,7 @@ public final class DbxJdbcPlugin { return rs.getString(1); } } + } catch (SQLException ignored) { } return null; } @@ -3416,8 +3418,18 @@ public final class DbxJdbcPlugin { result.add(name); } } + return result; + } catch (SQLException e) { + try (ResultSet rs = conn.getMetaData().getSchemas()) { + while (rs.next()) { + String schema = rs.getString("TABLE_SCHEM"); + if (schema != null && !schema.isBlank()) { + result.add(schema); + } + } + } + return result; } - return result; } private static JsonNode oracleListTables(Connection conn, String owner) throws SQLException { diff --git a/plugins/jdbc/src/test/java/app/dbx/jdbc/DbxJdbcPluginTest.java b/plugins/jdbc/src/test/java/app/dbx/jdbc/DbxJdbcPluginTest.java index b4fe08f3c4..fcc54b23fb 100644 --- a/plugins/jdbc/src/test/java/app/dbx/jdbc/DbxJdbcPluginTest.java +++ b/plugins/jdbc/src/test/java/app/dbx/jdbc/DbxJdbcPluginTest.java @@ -2730,6 +2730,28 @@ final class DbxJdbcPluginTest { } } + @Test + void oracleListSchemasFallsBackToJdbcSchemasWhenAllUsersIsMissing() throws Exception { + Method method = DbxJdbcPlugin.class.getDeclaredMethod("oracleListSchemas", Connection.class); + method.setAccessible(true); + + try (Connection conn = DriverManager.getConnection("jdbc:h2:mem:dbx_oracle_no_all_users;DB_CLOSE_DELAY=-1", "sa", "")) { + conn.createStatement().execute("CREATE SCHEMA DM6_TEST_SCHEMA"); + + JsonNode result = (JsonNode) method.invoke(null, conn); + assertFalse(result.isNull()); + assertEquals(true, result.isArray()); + boolean found = false; + for (JsonNode node : result) { + if ("DM6_TEST_SCHEMA".equalsIgnoreCase(node.asText())) { + found = true; + break; + } + } + assertEquals(true, found); + } + } + @Test void oracleEffectiveSchemaUsesExactOwnerBeforeUppercaseFallback() throws Exception { Method method = DbxJdbcPlugin.class.getDeclaredMethod("oracleEffectiveSchema", Connection.class, String.class);