From 1543ab1d0149b05f965e82cd45a4a9f1278f7bed Mon Sep 17 00:00:00 2001 From: Kris Jurka Date: Sat, 2 Apr 2011 11:43:31 +0000 Subject: [PATCH] Fix getSchemas for 7.3 servers. 7.3 cannot extract an array element from an array that is returned by a function. Instead coerce it to text and pull it out with a regex. --- org/postgresql/jdbc2/AbstractJdbc2DatabaseMetaData.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/org/postgresql/jdbc2/AbstractJdbc2DatabaseMetaData.java b/org/postgresql/jdbc2/AbstractJdbc2DatabaseMetaData.java index 8c92482dcb..2ef59d606a 100644 --- a/org/postgresql/jdbc2/AbstractJdbc2DatabaseMetaData.java +++ b/org/postgresql/jdbc2/AbstractJdbc2DatabaseMetaData.java @@ -3,7 +3,7 @@ * Copyright (c) 2004-2008, PostgreSQL Global Development Group * * IDENTIFICATION -* $PostgreSQL: pgjdbc/org/postgresql/jdbc2/AbstractJdbc2DatabaseMetaData.java,v 1.44.2.5 2010/10/16 00:39:27 jurka Exp $ +* $PostgreSQL: pgjdbc/org/postgresql/jdbc2/AbstractJdbc2DatabaseMetaData.java,v 1.44.2.6 2010/12/22 16:54:18 jurka Exp $ * *------------------------------------------------------------------------- */ @@ -2149,7 +2149,11 @@ public java.sql.ResultSet getSchemas() throws SQLException // because they can't access any objects in them. if (connection.haveMinimumServerVersion("7.3")) { - sql = "SELECT nspname AS TABLE_SCHEM FROM pg_catalog.pg_namespace WHERE nspname <> 'pg_toast' AND (nspname !~ '^pg_temp_' OR nspname = (pg_catalog.current_schemas(true))[1]) AND (nspname !~ '^pg_toast_temp_' OR nspname = replace((pg_catalog.current_schemas(true))[1], 'pg_temp_', 'pg_toast_temp_')) ORDER BY TABLE_SCHEM"; + String tempSchema = "substring(textin(array_out(pg_catalog.current_schemas(true))) from '{(pg_temp_[0-9]+),')"; + if (connection.haveMinimumServerVersion("7.4")) { + tempSchema = "(pg_catalog.current_schemas(true))[1]"; + } + sql = "SELECT nspname AS TABLE_SCHEM FROM pg_catalog.pg_namespace WHERE nspname <> 'pg_toast' AND (nspname !~ '^pg_temp_' OR nspname = " + tempSchema + ") AND (nspname !~ '^pg_toast_temp_' OR nspname = replace(" + tempSchema + ", 'pg_temp_', 'pg_toast_temp_')) ORDER BY TABLE_SCHEM"; } else {