This is an automated email from the git hooks/post-receive script. ebourg-guest pushed a commit to tag REL8_3_607 in repository libpostgresql-jdbc-java.
commit 1437a536d091b78605b9fe20b0abdc7b3d7be959 Author: Kris Jurka <[email protected]> Date: Tue Aug 10 19:59:53 2010 +0000 Make ResultSetMetaData.getColumnType match the results of DatabaseMetaData.getColumns.DATA_TYPE for domain and composite types. Per report from Thomas Kellerer. --- org/postgresql/jdbc2/TypeInfoCache.java | 34 ++++++++++++++-------- .../test/jdbc2/ResultSetMetaDataTest.java | 12 +++++++- 2 files changed, 33 insertions(+), 13 deletions(-) diff --git a/org/postgresql/jdbc2/TypeInfoCache.java b/org/postgresql/jdbc2/TypeInfoCache.java index 20dc08a..cdf99c2 100644 --- a/org/postgresql/jdbc2/TypeInfoCache.java +++ b/org/postgresql/jdbc2/TypeInfoCache.java @@ -3,7 +3,7 @@ * Copyright (c) 2005-2008, PostgreSQL Global Development Group * * IDENTIFICATION - * $PostgreSQL: pgjdbc/org/postgresql/jdbc2/TypeInfoCache.java,v 1.11 2007/12/02 06:48:43 jurka Exp $ + * $PostgreSQL: pgjdbc/org/postgresql/jdbc2/TypeInfoCache.java,v 1.12 2008/01/08 06:56:29 jurka Exp $ * *------------------------------------------------------------------------- */ @@ -51,7 +51,7 @@ public class TypeInfoCache { private PreparedStatement _getOidStatement; private PreparedStatement _getNameStatement; private PreparedStatement _getArrayElementOidStatement; - private PreparedStatement _isArrayStatement; + private PreparedStatement _getTypeInfoStatement; // basic pg types info: // 0 - type name @@ -152,32 +152,42 @@ public class TypeInfoCache { if (i != null) return i.intValue(); - if (_isArrayStatement == null) { + if (_getTypeInfoStatement == null) { // There's no great way of telling what's an array type. // People can name their own types starting with _. // Other types use typelem that aren't actually arrays, like box. // - String sql = "SELECT 1 FROM "; + String sql = "SELECT typinput='array_in'::regproc, typtype FROM "; if (_conn.haveMinimumServerVersion("7.3")) { sql += "pg_catalog."; } - sql += "pg_type WHERE typname = ? AND typinput='array_in'::regproc"; + sql += "pg_type WHERE typname = ?"; - _isArrayStatement = _conn.prepareStatement(sql); + _getTypeInfoStatement = _conn.prepareStatement(sql); } - _isArrayStatement.setString(1, pgTypeName); + _getTypeInfoStatement.setString(1, pgTypeName); // Go through BaseStatement to avoid transaction start. - if (!((BaseStatement)_isArrayStatement).executeWithFlags(QueryExecutor.QUERY_SUPPRESS_BEGIN)) + if (!((BaseStatement)_getTypeInfoStatement).executeWithFlags(QueryExecutor.QUERY_SUPPRESS_BEGIN)) throw new PSQLException(GT.tr("No results were returned by the query."), PSQLState.NO_DATA); - ResultSet rs = _isArrayStatement.getResultSet(); + ResultSet rs = _getTypeInfoStatement.getResultSet(); - Integer type; + Integer type = null; if (rs.next()) { - type = new Integer(Types.ARRAY); - } else { + boolean isArray = rs.getBoolean(1); + String typtype = rs.getString(2); + if (isArray) { + type = new Integer(Types.ARRAY); + } else if ("c".equals(typtype)) { + type = new Integer(Types.STRUCT); + } else if ("d".equals(typtype)) { + type = new Integer(Types.DISTINCT); + } + } + + if (type == null) { type = new Integer(Types.OTHER); } rs.close(); diff --git a/org/postgresql/test/jdbc2/ResultSetMetaDataTest.java b/org/postgresql/test/jdbc2/ResultSetMetaDataTest.java index e6d9843..c1da852 100644 --- a/org/postgresql/test/jdbc2/ResultSetMetaDataTest.java +++ b/org/postgresql/test/jdbc2/ResultSetMetaDataTest.java @@ -3,7 +3,7 @@ * Copyright (c) 2004-2008, PostgreSQL Global Development Group * * IDENTIFICATION -* $PostgreSQL: pgjdbc/org/postgresql/test/jdbc2/ResultSetMetaDataTest.java,v 1.15 2006/05/15 09:35:57 jurka Exp $ +* $PostgreSQL: pgjdbc/org/postgresql/test/jdbc2/ResultSetMetaDataTest.java,v 1.16 2008/01/08 06:56:31 jurka Exp $ * *------------------------------------------------------------------------- */ @@ -35,10 +35,12 @@ public class ResultSetMetaDataTest extends TestCase TestUtil.createTable(conn, "serialtest", "a serial, b bigserial, c int"); TestUtil.createTable(conn, "alltypes", "bool boolean, i2 int2, i4 int4, i8 int8, num numeric(10,2), re real, fl float, ch char(3), vc varchar(3), tx text, d date, t time without time zone, tz time with time zone, ts timestamp without time zone, tsz timestamp with time zone, bt bytea"); TestUtil.createTable(conn, "sizetest", "fixedchar char(5), fixedvarchar varchar(5), unfixedvarchar varchar, txt text, bytearr bytea, num64 numeric(6,4), num60 numeric(6,0), num numeric, ip inet"); + TestUtil.createTable(conn, "compositetest", "col rsmd1"); } protected void tearDown() throws Exception { + TestUtil.dropTable(conn, "compositetest"); TestUtil.dropTable(conn, "rsmd1"); TestUtil.dropTable(conn, "timetest"); TestUtil.dropTable(conn, "serialtest"); @@ -213,4 +215,12 @@ public class ResultSetMetaDataTest extends TestCase } } + public void testComposite() throws Exception { + Statement stmt = conn.createStatement(); + ResultSet rs = stmt.executeQuery("SELECT col FROM compositetest"); + ResultSetMetaData rsmd = rs.getMetaData(); + assertEquals(Types.STRUCT, rsmd.getColumnType(1)); + assertEquals("rsmd1", rsmd.getColumnTypeName(1)); + } + } -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/libpostgresql-jdbc-java.git _______________________________________________ pkg-java-commits mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-java-commits

