postgresql-jdbc.git / summary / log / commit / refs

commit    9ea59bd87f7920f1c2aba20ffef15acef85def60
Author:   pip25 <pip25@users.noreply.github.com>
Commit:   GitHub <noreply@github.com>
Date:     Sat Oct 21 11:21:17 2023 +0000

    feat: return all catalogs for getCatalogs metadata query (#2949) (#2953)
    
    Use the pg.catalog.pg_database table present in all catalogs to return
    the list of available catalogs, instead of just the current one the
    connection uses. The table is filtered to include only the
    catalogs that can be connected to.
    
    closes pgjdbc#2949
    
    Co-authored-by: Papp István Péter <pip25@sonrisa.hu>


.../org/postgresql/jdbc/PgDatabaseMetaData.java | 15 +++----------- .../test/jdbc2/DatabaseMetaDataTest.java | 23 +++++++++++++++++++--- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/pgjdbc/src/main/java/org/postgresql/jdbc/PgDatabaseMetaData.java b/pgjdbc/src/main/java/org/postgresql/jdbc/PgDatabaseMetaData.java index e5e07384..eb407a01 100644 --- a/pgjdbc/src/main/java/org/postgresql/jdbc/PgDatabaseMetaData.java +++ b/pgjdbc/src/main/java/org/postgresql/jdbc/PgDatabaseMetaData.java @@ -1457,20 +1457,11 @@ public class PgDatabaseMetaData implements DatabaseMetaData { return createMetaDataStatement().executeQuery(sql); } - /** - * PostgreSQL does not support multiple catalogs from a single connection, so to reduce confusion - * we only return the current catalog. {@inheritDoc} - */ @Override public ResultSet getCatalogs() throws SQLException { - Field[] f = new Field[1]; - List<Tuple> v = new ArrayList<Tuple>(); - f[0] = new Field("TABLE_CAT", Oid.VARCHAR); - byte[] @Nullable [] tuple = new byte[1][]; - tuple[0] = connection.encodeString(connection.getCatalog()); - v.add(new Tuple(tuple)); - - return ((BaseStatement) createMetaDataStatement()).createDriverResultSet(f, v); + String sql = "SELECT datname AS TABLE_CAT FROM pg_catalog.pg_database" + + " WHERE datallowconn = true"; + return createMetaDataStatement().executeQuery(sql); } @Override diff --git a/pgjdbc/src/test/java/org/postgresql/test/jdbc2/DatabaseMetaDataTest.java b/pgjdbc/src/test/java/org/postgresql/test/jdbc2/DatabaseMetaDataTest.java index e9d3c581..301958c9 100644 --- a/pgjdbc/src/test/java/org/postgresql/test/jdbc2/DatabaseMetaDataTest.java +++ b/pgjdbc/src/test/java/org/postgresql/test/jdbc2/DatabaseMetaDataTest.java @@ -1065,9 +1065,26 @@ public class DatabaseMetaDataTest { public void testCatalogs() throws SQLException { DatabaseMetaData dbmd = con.getMetaData(); ResultSet rs = dbmd.getCatalogs(); - assertTrue(rs.next()); - assertEquals(con.getCatalog(), rs.getString(1)); - assertTrue(!rs.next()); + + boolean foundDefault = false; + boolean foundTest = false; + int count; + + for (count = 0; rs.next(); count++) { + String catalog = rs.getString("TABLE_CAT"); + if ("test".equals(catalog)) { + foundTest = true; + } + if ("postgres".equals(catalog)) { + foundDefault = true; + } + } + + rs.close(); + + assertTrue(count >= 2); + assertTrue(foundDefault); + assertTrue(foundTest); } @Test [parent: 9bc47ec84192]