Skip to content

Commit

Permalink
fix: add query to support postgresql 8.2 without t.typarray (#699)
Browse files Browse the repository at this point in the history
  • Loading branch information
jorsol authored and vlsi committed Nov 28, 2016
1 parent 4663492 commit cb3995b
Showing 1 changed file with 18 additions and 6 deletions.
24 changes: 18 additions & 6 deletions pgjdbc/src/main/java/org/postgresql/jdbc/TypeInfoCache.java
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import org.postgresql.core.BaseStatement; import org.postgresql.core.BaseStatement;
import org.postgresql.core.Oid; import org.postgresql.core.Oid;
import org.postgresql.core.QueryExecutor; import org.postgresql.core.QueryExecutor;
import org.postgresql.core.ServerVersion;
import org.postgresql.core.TypeInfo; import org.postgresql.core.TypeInfo;
import org.postgresql.util.GT; import org.postgresql.util.GT;
import org.postgresql.util.PGobject; import org.postgresql.util.PGobject;
Expand Down Expand Up @@ -285,12 +286,23 @@ private PreparedStatement getOidStatement(String pgTypeName) throws SQLException
PreparedStatement oidStatementComplex; PreparedStatement oidStatementComplex;
if (isArray) { if (isArray) {
if (_getOidStatementComplexArray == null) { if (_getOidStatementComplexArray == null) {
String sql = "SELECT t.typarray, arr.typname " String sql;
+ " FROM pg_catalog.pg_type t" if (_conn.haveMinimumServerVersion(ServerVersion.v8_3)) {
+ " JOIN pg_catalog.pg_namespace n ON t.typnamespace = n.oid" sql = "SELECT t.typarray, arr.typname "
+ " JOIN pg_catalog.pg_type arr ON arr.oid = t.typarray" + " FROM pg_catalog.pg_type t"
+ " WHERE t.typname = ? AND (n.nspname = ? OR ? IS NULL AND n.nspname = ANY (current_schemas(true)))" + " JOIN pg_catalog.pg_namespace n ON t.typnamespace = n.oid"
+ " ORDER BY t.oid DESC LIMIT 1"; + " JOIN pg_catalog.pg_type arr ON arr.oid = t.typarray"
+ " WHERE t.typname = ? AND (n.nspname = ? OR ? IS NULL AND n.nspname = ANY (current_schemas(true)))"
+ " ORDER BY t.oid DESC LIMIT 1";
} else {
sql = "SELECT t.oid, t.typname "
+ " FROM pg_catalog.pg_type t"
+ " JOIN pg_catalog.pg_namespace n ON t.typnamespace = n.oid"
+ " WHERE t.typelem = (SELECT oid FROM pg_catalog.pg_type WHERE typname = ?)"
+ " AND substring(t.typname, 1, 1) = '_' AND t.typlen = -1"
+ " AND (n.nspname = ? OR ? IS NULL AND n.nspname = ANY (current_schemas(true)))"
+ " ORDER BY t.typelem DESC LIMIT 1";
}
_getOidStatementComplexArray = _conn.prepareStatement(sql); _getOidStatementComplexArray = _conn.prepareStatement(sql);
} }
oidStatementComplex = _getOidStatementComplexArray; oidStatementComplex = _getOidStatementComplexArray;
Expand Down

0 comments on commit cb3995b

Please sign in to comment.