Re: some improve JDBC - Mailing list pgsql-jdbc
From | Víctor Pérez Juárez |
---|---|
Subject | Re: some improve JDBC |
Date | |
Msg-id | 200508031220.16657.victor.perez@e-evolution.com.mx Whole thread Raw |
In response to | Re: some improve JDBC (Oliver Jowett <oliver@opencloud.com>) |
Responses |
Re: some improve JDBC
Re: some improve JDBC |
List | pgsql-jdbc |
Of cosure! my changes are commnet with e-evolution //begin vpj-cd e-evolution if (type_name.equals( "text") || type_name.equals("bytea")) { if (typmod == -1) return 0; else return typmod; } if (type_name.equals( "unknown")) return 0; //end vpj-cd e-evolution // being vpj-cd e-evolution 07/30/2005 { if (typmod < 0) return 0; else return typmod; // VARHDRSZ=sizeof(int32)=4 } // end vpj-cd e-evolution 07/30/2005 --------------------------------------------------------------------------------------------------------------------------------------- the code complete: /* * What is the column's normal maximum width in characters? * * @param column the first column is 1, the second is 2, etc. * @return the maximum width * @exception SQLException if a database access error occurs */ public int getColumnDisplaySize(int column) throws SQLException { Field f = getField(column); String type_name = getPGType(column); int typmod = f.getMod(); // I looked at other JDBC implementations and couldn't find a consistent // interpretation of the "display size" for numeric values, so this is our's // FIXME: currently, only types with a SQL92 or SQL3 pendant are implemented - jens@jens.de // fixed length data types if (type_name.equals( "int2" )) return 6; // -32768 to +32768 (5 digits and a sign) if (type_name.equals( "int4" ) || type_name.equals( "oid" )) return 11; // -2147483648 to +2147483647 if (type_name.equals( "int8" )) return 20; // -9223372036854775808 to +9223372036854775807 if (type_name.equals( "money" )) return 12; // MONEY = DECIMAL(9,2) if (type_name.equals( "float4" )) return 11; // i checked it out ans wasn't able to produce more than 11 digits if (type_name.equals( "float8" )) return 20; // dito, 20 if (type_name.equals( "char" )) return 1; if (type_name.equals( "bool" )) return 1; int secondSize; switch (typmod) { case 0: secondSize = 0; break; case - 1: // six digits plus the decimal point secondSize = 7; break; default: // with an odd scale an even number of digits // are always show so timestamp(1) will print // two fractional digits. secondSize = typmod + (typmod % 2) + 1; break; } if (type_name.equals( "date" )) return 13; // "01/01/4713 BC" - "31/12/32767" // If we knew the timezone we could avoid having to possibly // account for fractional hour offsets (which adds three chars). // // Also the range of timestamp types is not exactly clear. // 4 digits is the common case for a year, but there are // version/compilation dependencies on the exact date ranges, // (notably --enable-integer-datetimes), but for now we'll // just ignore them and assume that a year is four digits. // if (type_name.equals( "time" )) return 8 + secondSize; // 00:00:00 + seconds if (type_name.equals( "timetz" )) return 8 + secondSize + 6; // 00:00.00 + .000000 + -00:00 if (type_name.equals( "timestamp" )) return 19 + secondSize; // 0000-00-00 00:00:00 + .000000; if (type_name.equals( "timestamptz" )) return 19 + secondSize + 6; // 0000-00-00 00:00:00 + .000000 + -00:00; //begin vpj-cd e-evolution if (type_name.equals( "text") || type_name.equals("bytea")) { if (typmod == -1) return 0; else return typmod; } if (type_name.equals( "unknown")) return 0; //end vpj-cd e-evolution // variable length fields typmod -= 4; if (type_name.equals( "bpchar" ) || type_name.equals( "varchar" )) // being vpj-cd e-evolution 07/30/2005 { if (typmod < 0) return 0; else return typmod; // VARHDRSZ=sizeof(int32)=4 } // end vpj-cd e-evolution 07/30/2005 if (type_name.equals( "numeric" )) { //return ( (typmod >> 16) & 0xffff ) // + 1 + ( typmod & 0xffff ); // DECIMAL(p,s) = (p digits). (s digits) if( ((typmod >> 16) & 0xffff ) + 1 + ( typmod & 0xffff ) == -1) return 0; else return ( (typmod >> 16) & 0xffff ) + 1 + ( typmod & 0xffff ); } // if we don't know better return f.getLength(); } * JDBC driver build number 8.1dev-401 JDBC Source * Server version PostgreSQL 8.0.3 in Linux AMD64 Cheers Victor Pérez CEO e-Evolution,SC www.e-evolution.com El Martes, 2 de Agosto de 2005 18:55, Oliver Jowett escribió: > Víctor Pérez Juárez wrote: > > Compiere use the RowSet implementation, I made some changes to the source > > AbstractJdbc2ResultSetMetaData method: > > Can you send a diff? I can't see what you've changed from just this. > > -O > > ---------------------------(end of broadcast)--------------------------- > TIP 3: Have you checked our extensive FAQ? > > http://www.postgresql.org/docs/faq
pgsql-jdbc by date: