[libpostgresql-jdbc-java] 60/128: search_path support should be working correctly even for complex cases

Emmanuel Bourg ebourg-guest at moszumanska.debian.org
Mon Jan 9 10:18:31 UTC 2017


This is an automated email from the git hooks/post-receive script.

ebourg-guest pushed a commit to annotated tag REL9_3_1100
in repository libpostgresql-jdbc-java.

commit 818b84d28ac33cdc538fbfd4ccb6c6287d2003da
Author: Valentine Gogichashvili <vgogichashvili at vgogichashvili-ubuntu>
Date:   Fri Apr 12 17:05:00 2013 +0200

    search_path support should be working correctly even for complex cases
---
 org/postgresql/jdbc2/TypeInfoCache.java | 30 ++++++++++++++++++++++++++----
 1 file changed, 26 insertions(+), 4 deletions(-)

diff --git a/org/postgresql/jdbc2/TypeInfoCache.java b/org/postgresql/jdbc2/TypeInfoCache.java
index 56591d6..559cbbc 100644
--- a/org/postgresql/jdbc2/TypeInfoCache.java
+++ b/org/postgresql/jdbc2/TypeInfoCache.java
@@ -190,8 +190,19 @@ public class TypeInfoCache implements TypeInfo {
                 // in case of multiple records (in different schemas) choose the one from the current schema,
                 // otherwise take the last version of a type that is at least more deterministic then before
                 // (keeping old behaviour of finding types, that should not be found without correct search path)
-                sql = "SELECT typinput='array_in'::regproc, typtype FROM pg_catalog.pg_type WHERE typname = ? " +
-                      "ORDER BY ( select nspname = current_schema() from pg_namespace as ns where ns.oid = typnamespace ) DESC, oid DESC LIMIT 1";
+                sql = "SELECT typinput='array_in'::regproc, typtype " +
+                      "  FROM pg_catalog.pg_type " +
+                      "  LEFT " +
+                      "  JOIN (select ns.oid as nspoid, ns.nspname, r.r " +
+                      "          from pg_namespace as ns " +
+                      "          join ( select s.r, (current_schemas(false))[s.r] as nspname " +
+                      //                  -- go with older way of unnesting array to be compatible with 8.0
+                      "                   from generate_series(1, array_upper(current_schemas(false), 1)) as s(r) ) as r " +
+                      "         using ( nspname ) " +
+                      "       ) as sp " +
+                      "    ON sp.nspoid = typnamespace " +
+                      " WHERE typname = ? " +
+                      " ORDER BY sp.r, pg_type.oid DESC LIMIT 1;";
             } else if (_conn.haveMinimumServerVersion("7.3")) {
                 sql = "SELECT typinput='array_in'::regproc, typtype FROM pg_catalog.pg_type WHERE typname = ? ORDER BY oid DESC LIMIT 1";
             } else {
@@ -242,8 +253,19 @@ public class TypeInfoCache implements TypeInfo {
             String sql;
             if (_conn.haveMinimumServerVersion("8.0")) {
                 // see comments in @getSQLType()
-                sql = "SELECT oid FROM pg_catalog.pg_type WHERE typname = ? " +
-                      "ORDER BY ( select nspname = current_schema() from pg_namespace as ns where ns.oid = typnamespace ) DESC, oid DESC LIMIT 1";
+                sql = "SELECT pg_type.oid " +
+                      "  FROM pg_catalog.pg_type " +
+                      "  LEFT " +
+                      "  JOIN (select ns.oid as nspoid, ns.nspname, r.r " +
+                      "          from pg_namespace as ns " +
+                      "          join ( select s.r, (current_schemas(false))[s.r] as nspname " +
+                      //                  -- go with older way of unnesting array to be compatible with 8.0
+                      "                   from generate_series(1, array_upper(current_schemas(false), 1)) as s(r) ) as r " +
+                      "         using ( nspname ) " +
+                      "       ) as sp " +
+                      "    ON sp.nspoid = typnamespace " +
+                      " WHERE typname = ? " +
+                      " ORDER BY sp.r, pg_type.oid DESC LIMIT 1;";
             } else if (_conn.haveMinimumServerVersion("7.3")) {
                 sql = "SELECT oid FROM pg_catalog.pg_type WHERE typname = ? ORDER BY oid DESC LIMIT 1";
             } else {

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/libpostgresql-jdbc-java.git



More information about the pkg-java-commits mailing list