From 7bfff7aa9dbab549036fecd2d057d33bc4ef8144 Mon Sep 17 00:00:00 2001 From: Dave Cramer Date: Tue, 20 Sep 2022 12:46:04 -0400 Subject: [PATCH] fix: make sure we select array_in from pg_catalog to avoid duplicate array_in functions fixes #Issue 2548 (#2552) * fix: make sure we select array_in from pg_catalog to avoid duplicate array_in functions fixes #Issue 2548 * dont run tests for versions less than 10 --- .../org/postgresql/jdbc/TypeInfoCache.java | 2 +- .../test/jdbc4/DatabaseMetaDataTest.java | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/pgjdbc/src/main/java/org/postgresql/jdbc/TypeInfoCache.java b/pgjdbc/src/main/java/org/postgresql/jdbc/TypeInfoCache.java index 23652327f0..d216ddaf07 100644 --- a/pgjdbc/src/main/java/org/postgresql/jdbc/TypeInfoCache.java +++ b/pgjdbc/src/main/java/org/postgresql/jdbc/TypeInfoCache.java @@ -223,7 +223,7 @@ private String getSQLTypeQuery(boolean typoidParam) { // (keeping old behaviour of finding types, that should not be found without correct search // path) StringBuilder sql = new StringBuilder(); - sql.append("SELECT typinput='array_in'::regproc as is_array, typtype, typname, pg_type.oid "); + sql.append("SELECT typinput='pg_catalog.array_in'::regproc as is_array, typtype, typname, pg_type.oid "); sql.append(" FROM pg_catalog.pg_type "); sql.append(" LEFT JOIN (select ns.oid as nspoid, ns.nspname, r.r "); sql.append(" from pg_namespace as ns "); 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 dc027b7136..c890668f13 100644 --- a/pgjdbc/src/test/java/org/postgresql/test/jdbc4/DatabaseMetaDataTest.java +++ b/pgjdbc/src/test/java/org/postgresql/test/jdbc4/DatabaseMetaDataTest.java @@ -473,4 +473,25 @@ public void testSortedDataTypes() throws SQLException { lastType = type; } } + + @Test + public void testGetSqlTypes() throws SQLException { + if (TestUtil.haveMinimumServerVersion(conn, ServerVersion.v10)) { + try (Connection privileged = TestUtil.openPrivilegedDB()) { + try (Statement stmt = privileged.createStatement()) { + // create a function called array_in + stmt.execute("CREATE OR REPLACE FUNCTION public.array_in(anyarray, oid, integer)\n" + + " RETURNS anyarray\n" + + " LANGUAGE internal\n" + + " STABLE PARALLEL SAFE STRICT\n" + + "AS $function$array_in$function$"); + } + DatabaseMetaData dbmd = privileged.getMetaData(); + ResultSet rs = dbmd.getTypeInfo(); + try (Statement stmt = privileged.createStatement()) { + stmt.execute("drop function public.array_in(anyarray, oid, integer)"); + } + } + } + } }