diff options
Diffstat (limited to 'src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1DatabaseMetaData.java')
| -rw-r--r-- | src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1DatabaseMetaData.java | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1DatabaseMetaData.java b/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1DatabaseMetaData.java index 59958e592d..cdf6e8073e 100644 --- a/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1DatabaseMetaData.java +++ b/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1DatabaseMetaData.java @@ -27,19 +27,28 @@ public abstract class AbstractJdbc1DatabaseMetaData protected static final int iInt2Oid = 21; // OID for int2 protected static final int iInt4Oid = 23; // OID for int4 protected static final int VARHDRSZ = 4; // length for int4 - protected static int NAME_SIZE = 64; // length for name datatype + protected static int NAME_SIZE = 63; // length for name datatype public AbstractJdbc1DatabaseMetaData(AbstractJdbc1Connection conn) { this.connection = conn; + String sql; try { if (connection.haveMinimumServerVersion("7.3")) { - NAME_SIZE = 64; + sql = "SELECT t.typlen FROM pg_catalog.pg_type t, pg_catalog.pg_namespace n WHERE t.typnamespace=n.oid AND t.typname='name' AND n.nspname='pg_catalog'"; + NAME_SIZE = 63; } else { - NAME_SIZE = 32; + sql = "SELECT typlen FROM pg_type WHERE typname='name'"; + NAME_SIZE = 31; } + ResultSet rs = connection.createStatement().executeQuery(sql); + if (rs.next()) { + NAME_SIZE = rs.getInt("typlen") - 1; + } + rs.close(); } catch (SQLException l_se) { - //leave value at default + // depending on the error the NAME_SIZE value will + // be the original or the value set before the query. } } |
