Re: some improve JDBC

From: Dave Cramer <pg(at)fastcrypt(dot)com>
To: Víctor Pérez Juárez <victor(dot)perez(at)e-evolution(dot)com(dot)mx>
Cc: pgsql-jdbc(at)postgresql(dot)org, Oliver Jowett <oliver(at)opencloud(dot)com>
Subject: Re: some improve JDBC
Date: 2005-08-03 17:44:14
Message-ID: B055CE06-65AA-4AEA-B504-C533DDF21DBF@fastcrypt.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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(at)jens(dot)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
>
>

In response to

Browse pgsql-jdbc by date

  From Date Subject
Next Message Oliver Jowett 2005-08-04 00:05:22 Re: pgsql-jdbc and Java
Previous Message Víctor Pérez Juárez 2005-08-03 17:20:16 Re: some improve JDBC