Re: some improve JDBC
От | Dave Cramer |
---|---|
Тема | Re: some improve JDBC |
Дата | |
Msg-id | B055CE06-65AA-4AEA-B504-C533DDF21DBF@fastcrypt.com обсуждение исходный текст |
Ответ на | Re: some improve JDBC (Víctor Pérez Juárez<victor.perez@e-evolution.com.mx>) |
Список | pgsql-jdbc |
Victor, What we need is a cvs diff cvs diff -c .... Then we can apply it using patch after we read it and approve it Dave On 3-Aug-05, at 1:20 PM, Víctor Pérez Juárez wrote: > 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 >> > > ---------------------------(end of > broadcast)--------------------------- > TIP 3: Have you checked our extensive FAQ? > > http://www.postgresql.org/docs/faq > >
В списке pgsql-jdbc по дате отправления: