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

commit    7aea51322293a8eaae5e75e5ec5f7eff3eecb863
Author:   Sehrope Sarkuni <sehrope@jackdb.com>
Date:     Mon Jun 07 17:57:58 2021 +0000

    test: Add test for verifying columns of getProcedures()


.../test/jdbc4/DatabaseMetaDataTest.java | 58 +++++++++++++++++++--- 1 file changed, 51 insertions(+), 7 deletions(-) diff --git a/pgjdbc/src/test/java/org/postgresql/test/jdbc4/DatabaseMetaDataTest.java b/pgjdbc/src/test/java/org/postgresql/test/jdbc4/DatabaseMetaDataTest.java index e253c5a8..39869522 100644 --- a/pgjdbc/src/test/java/org/postgresql/test/jdbc4/DatabaseMetaDataTest.java +++ b/pgjdbc/src/test/java/org/postgresql/test/jdbc4/DatabaseMetaDataTest.java @@ -7,6 +7,7 @@ package org.postgresql.test.jdbc4; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; +import static org.hamcrest.CoreMatchers.nullValue; import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -155,11 +156,11 @@ public class DatabaseMetaDataTest { // Search for procedures in schema "hasfunctions" (which should expect a record only for PostgreSQL < 11) try (ResultSet rs = dbmd.getProcedures("", "hasfunctions",null)) { - boolean found = rs.next(); if (TestUtil.haveMinimumServerVersion(conn, ServerVersion.v11)) { - assertFalse("PostgreSQL11+ should not return functions from getProcedures", found); + assertFalse("PostgreSQL11+ should not return functions from getProcedures", rs.next()); } else { - assertTrue("PostgreSQL prior to 11 should return functions from getProcedures", found); + // PostgreSQL prior to 11 should return functions from getProcedures + assertProcedureRS(rs); } } @@ -170,11 +171,11 @@ public class DatabaseMetaDataTest { // Search for procedures by function name "addfunction" within schema "hasfunctions" (which should expect a record for PostgreSQL < 11) try (ResultSet rs = dbmd.getProcedures("", "hasfunctions", "addfunction")) { - boolean found = rs.next(); if (TestUtil.haveMinimumServerVersion(conn, ServerVersion.v11)) { - assertFalse("PostgreSQL11+ should not return functions from getProcedures", found); + assertFalse("PostgreSQL11+ should not return functions from getProcedures", rs.next()); } else { - assertTrue("PostgreSQL prior to 11 should return functions from getProcedures", found); + // PostgreSQL prior to 11 should return functions from getProcedures + assertProcedureRS(rs); } } @@ -192,7 +193,8 @@ public class DatabaseMetaDataTest { DatabaseMetaData dbmd = conn.getMetaData(); try (ResultSet rs = dbmd.getProcedures("", "hasprocedures", null)) { - assertTrue("getProcedures() should be non-empty for the hasprocedures schema", rs.next()); + int count = assertProcedureRS(rs); + assertTrue("getProcedures() should be non-empty for the hasprocedures schema", count == 1); } try (ResultSet rs = dbmd.getProcedures("", "noprocedures", null)) { @@ -351,6 +353,48 @@ public class DatabaseMetaDataTest { return result; } + private int assertProcedureRS(ResultSet rs) throws SQLException { + return assertProcedureRSAndReturnList(rs).size(); + } + + private List<CatalogObject> assertProcedureRSAndReturnList(ResultSet rs) throws SQLException { + // There should be at least one row + assertThat(rs.next(), is(true)); + assertThat(rs.getString("PROCEDURE_CAT"), nullValue()); + assertThat(rs.getString("PROCEDURE_SCHEM"), notNullValue()); + assertThat(rs.getString("PROCEDURE_NAME"), notNullValue()); + assertThat(rs.getShort("PROCEDURE_TYPE") >= 0, is(true)); + assertThat(rs.getString("SPECIFIC_NAME"), notNullValue()); + + // Ensure there is enough column and column value retrieve by index should be same as column name (ordered) + assertThat(rs.getMetaData().getColumnCount(), is(9)); + assertThat(rs.getString(1), is(rs.getString("PROCEDURE_CAT"))); + assertThat(rs.getString(2), is(rs.getString("PROCEDURE_SCHEM"))); + assertThat(rs.getString(3), is(rs.getString("PROCEDURE_NAME"))); + // Per JDBC spec, indexes 4, 5, and 6 are reserved for future use + assertThat(rs.getString(7), is(rs.getString("REMARKS"))); + assertThat(rs.getShort(8), is(rs.getShort("PROCEDURE_TYPE"))); + assertThat(rs.getString(9), is(rs.getString("SPECIFIC_NAME"))); + + // Get all result and assert they are ordered per javadoc spec: + // FUNCTION_CAT, FUNCTION_SCHEM, FUNCTION_NAME and SPECIFIC_NAME + List<CatalogObject> result = new ArrayList<>(); + do { + CatalogObject obj = new CatalogObject( + rs.getString("PROCEDURE_CAT"), + rs.getString("PROCEDURE_SCHEM"), + rs.getString("PROCEDURE_NAME"), + rs.getString("SPECIFIC_NAME")); + result.add(obj); + } while (rs.next()); + + List<CatalogObject> orderedResult = new ArrayList<>(result); + Collections.sort(orderedResult); + assertThat(result, is(orderedResult)); + + return result; + } + private void assertListContains(String message, List<CatalogObject> list, String schema, String name) throws SQLException { boolean found = list.stream().anyMatch(item -> item.schema.equals(schema) && item.name.equals(name)); assertTrue(message + "; schema=" + schema + " name=" + name, found); [parent: e4a3fb543aae]