From: | Barry Lind <blind(at)xythos(dot)com> |
---|---|
To: | Florian Wunderlich <fwunderlich(at)devbrain(dot)de> |
Cc: | pgsql-jdbc(at)postgresql(dot)org |
Subject: | Re: AbstractJdbc1DatabaseMetaData.getColumns doesn't set DECIMAL_DIGITS |
Date: | 2002-10-23 16:08:01 |
Message-ID: | 3DB6C961.1070603@xythos.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-jdbc |
Florian,
I think this should be fixed by a patch that Kris Jurka submitted
yesterday. I haven't had a chance to apply the patch yet, but I have
included it here if you want to try it out before it gets applied to CVS.
thanks,
--Barry
Index:
src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1DatabaseMetaData.java
===================================================================
RCS file:
/projects/cvsroot/pgsql-server/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1DatabaseMetaData.java,v
retrieving revision 1.8
diff -c -r1.8 AbstractJdbc1DatabaseMetaData.java
***
src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1DatabaseMetaData.java
2002/10/08 01:47:55 1.8
---
src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1DatabaseMetaData.java
2002/10/22 21:00:52
***************
*** 1854,1860 ****
// decide if we are returning a single column result.
if (!returnTypeType.equals("c")) {
! byte[][] tuple = new byte[13][0];
tuple[0] = null;
tuple[1] = schema;
tuple[2] = procedureName;
--- 1854,1860 ----
// decide if we are returning a single column result.
if (!returnTypeType.equals("c")) {
! byte[][] tuple = new byte[13][];
tuple[0] = null;
tuple[1] = schema;
tuple[2] = procedureName;
***************
*** 1874,1880 ****
// Add a row for each argument.
for (int i=0; i<argTypes.size(); i++) {
int argOid = ((Integer)argTypes.elementAt(i)).intValue();
! byte[][] tuple = new byte[13][0];
tuple[0] = null;
tuple[1] = schema;
tuple[2] = procedureName;
--- 1874,1880 ----
// Add a row for each argument.
for (int i=0; i<argTypes.size(); i++) {
int argOid = ((Integer)argTypes.elementAt(i)).intValue();
! byte[][] tuple = new byte[13][];
tuple[0] = null;
tuple[1] = schema;
tuple[2] = procedureName;
***************
*** 1897,1903 ****
ResultSet columnrs =
connection.createStatement().executeQuery(columnsql);
while (columnrs.next()) {
int columnTypeOid = columnrs.getInt("atttypid");
! byte[][] tuple = new byte[13][0];
tuple[0] = null;
tuple[1] = schema;
tuple[2] = procedureName;
--- 1897,1903 ----
ResultSet columnrs =
connection.createStatement().executeQuery(columnsql);
while (columnrs.next()) {
int columnTypeOid = columnrs.getInt("atttypid");
! byte[][] tuple = new byte[13][];
tuple[0] = null;
tuple[1] = schema;
tuple[2] = procedureName;
***************
*** 2199,2205 ****
f[0] = new Field(connection, new String("TABLE_TYPE"), iVarcharOid,
getMaxNameLength());
for (i=0; i < types.length; i++)
{
! byte[][] tuple = new byte[1][0];
tuple[0] = types[i].getBytes();
v.addElement(tuple);
}
--- 2199,2205 ----
f[0] = new Field(connection, new String("TABLE_TYPE"), iVarcharOid,
getMaxNameLength());
for (i=0; i < types.length; i++)
{
! byte[][] tuple = new byte[1][];
tuple[0] = types[i].getBytes();
v.addElement(tuple);
}
***************
*** 2318,2324 ****
ResultSet rs = connection.createStatement().executeQuery(sql);
while (rs.next())
{
! byte[][] tuple = new byte[18][0];
int typeOid = rs.getInt("atttypid");
tuple[0] = null; // Catalog name, not supported
--- 2318,2324 ----
ResultSet rs = connection.createStatement().executeQuery(sql);
while (rs.next())
{
! byte[][] tuple = new byte[18][];
int typeOid = rs.getInt("atttypid");
tuple[0] = null; // Catalog name, not supported
***************
*** 2329,2334 ****
--- 2329,2339 ----
String pgType = connection.getPGType(typeOid);
tuple[5] = pgType.getBytes(); // Type name
+ // by default no decimal_digits
+ // if the type is numeric or decimal we will
+ // overwrite later.
+ tuple[8] = "0".getBytes();
+
if (pgType.equals("bpchar") || pgType.equals("varchar"))
{
int atttypmod = rs.getInt("atttypmod");
***************
*** 2465,2471 ****
for (int j=0; j<grantees.size(); j++) {
String grantee = (String)grantees.elementAt(j);
String grantable = owner.equals(grantee) ? "YES" : "NO";
! byte[][] tuple = new byte[8][0];
tuple[0] = null;
tuple[1] = schemaName;
tuple[2] = tableName;
--- 2470,2476 ----
for (int j=0; j<grantees.size(); j++) {
String grantee = (String)grantees.elementAt(j);
String grantable = owner.equals(grantee) ? "YES" : "NO";
! byte[][] tuple = new byte[8][];
tuple[0] = null;
tuple[1] = schemaName;
tuple[2] = tableName;
***************
*** 2567,2573 ****
for (int j=0; j<grantees.size(); j++) {
String grantee = (String)grantees.elementAt(j);
String grantable = owner.equals(grantee) ? "YES" : "NO";
! byte[][] tuple = new byte[7][0];
tuple[0] = null;
tuple[1] = schema;
tuple[2] = table;
--- 2572,2578 ----
for (int j=0; j<grantees.size(); j++) {
String grantee = (String)grantees.elementAt(j);
String grantable = owner.equals(grantee) ? "YES" : "NO";
! byte[][] tuple = new byte[7][];
tuple[0] = null;
tuple[1] = schema;
tuple[2] = table;
***************
*** 2819,2825 ****
f[6] = new Field(connection, "DECIMAL_DIGITS", iInt2Oid, 2);
f[7] = new Field(connection, "PSEUDO_COLUMN", iInt2Oid, 2);
! byte tuple[][] = new byte[8][0];
/* Postgresql does not have any column types that are
* automatically updated like some databases' timestamp type.
--- 2824,2830 ----
f[6] = new Field(connection, "DECIMAL_DIGITS", iInt2Oid, 2);
f[7] = new Field(connection, "PSEUDO_COLUMN", iInt2Oid, 2);
! byte tuple[][] = new byte[8][];
/* Postgresql does not have any column types that are
* automatically updated like some databases' timestamp type.
Florian Wunderlich wrote:
> In the CVS, getColumns in AbstractJdbc1DatabaseMetaData.java:2257 does
> not set DECIMAL_DIGITS for types other than "numeric" and "decimal".
>
> A subsequent ResultSet.getInt for this column then fails with a
> java.lang.StringIndexOutOfBoundsException.
>
> The JDBC API documentation seems to indicate that this field should
> always be an int. In any case, ResultSet.getInt should not fail.
>
> ---------------------------(end of broadcast)---------------------------
> TIP 5: Have you checked our extensive FAQ?
>
> http://www.postgresql.org/users-lounge/docs/faq.html
>
From | Date | Subject | |
---|---|---|---|
Next Message | Bryan Field-Elliot | 2002-10-23 19:13:12 | RowSet question |
Previous Message | Barry Lind | 2002-10-23 16:04:19 | Re: questions |