From: | Dave Cramer <davec(at)fastcrypt(dot)com> |
---|---|
To: | Dave Cramer <pg(at)fastcrypt(dot)com> |
Cc: | Oliver Jowett <oliver(at)opencloud(dot)com>, List <pgsql-jdbc(at)postgresql(dot)org> |
Subject: | Re: jdbc cts final diff for review |
Date: | 2005-06-29 14:57:48 |
Message-ID: | 27012342-159F-4F96-837C-82BB7F666DB2@fastcrypt.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-jdbc |
Oliver
regarding the real/double muck below
They have a "real table" which ostensibly holds REAL values, however
one test does the following
takes the max value from the int_table which is a large integer, then
stores it into the 'REAL' table and then reads it back as an integer
this was failing due to precision issues until I change the
underlying type of the REAL table to FLOAT8 (which is what Oracle,
and Mysql do )
then they have another test
which registers an out parameter as a REAL and reads from the
'REAL_TABLE' which is now uses the underlying type double
if someone else can find a way to get this to pass, I'm all ears.
Dave
On 29-Jun-05, at 10:28 AM, Dave Cramer wrote:
>
> On 29-Jun-05, at 9:17 AM, Oliver Jowett wrote:
>
>> Dave Cramer wrote:
>>
>>> Attached is the patch for review. QueryExecutor is unchanged now.
>>> The only iffy bit is where I check for the in parameter being
>>> bound to void type. It could be done in checkAllParametersSet
>>> I'd like to commit this shortly.
>>>
>>
>> Ok, comments from just reading the patch.. I like the approach
>> much better than the previous one, but the details need some cleanup.
>>
>> Rather than putting knowledge of parameter direction into
>> ParameterList, how about just allowing access to the type OID, and
>> the caller checks for Oid.VOID? Then the ParameterList interface
>> changes less and the change to use a Parameter class is
>> unnecessary as the list doesn't need to store a direction value.
>>
>> If you must store a direction value in the list, then another
>> array might be better than wrapping everything up in an object
>> (generates less garbage overall). Also, there are a few places
>> that return magic values for the direction that should be using
>> the symbolic constants you've defined elsewhere.
> I thought of this, however even arrays have to be garbage
> collected.. Is there really much difference internally between new
> Parameter and new int?
>
> I'm ambivalent though it's not a big change either way.
>>
>> The change to checkAllParametersSet to not check OUT parameters
>> seems unnecessary -- won't OUT parameters be set to the (non-null)
>> NULL_OBJECT anyway?
>>
>>
>>> ! // this is here for the sole purpose of
>>> passing the cts
>>> ! if ( columnType == Types.DOUBLE &&
>>> functionReturnType[i] == Types.REAL )
>>> ! {
>>> ! // return it as a float
>>> ! if ( callResult[i] != null)
>>> ! callResult[i] = new Float(((Double)
>>> callResult[i]).floatValue());
>>> ! }
>
> I'll go through my notes, but I can tell you it was a catch 22
> problem mostly likely an artifact of Oracle not having a REAL type.
>> We can't do that! If it's failing that's probably because we're
>> not doing the necessary implicit typecasts required by the spec..
>>
>> Please explain what's going on here:
>
> from an SQL point of view FLOAT, and double are FLOAT8 types, REAL
> is the only one that is FLOAT4
>>
>>
>>> + case Types.FLOAT: // TODO: FLOAT and
>>> REAL were FLOAT8 for the cts
>>>
>>
>>
>>> public void setFloat(int parameterIndex, float x) throws
>>> SQLException
>>> {
>>> checkClosed();
>>> ! bindLiteral(parameterIndex, Float.toString(x),
>>> Oid.FLOAT8);
>>> }
>>>
>>>
>>
>> (the bind changed from Oid.FLOAT4 to Oid.FLOAT8..)
>>
>> You seem to have reverted your earlier changes and put back the
>> types/* classes -- why?
> huh ? they should be in there in HEAD, I did remove the creation of
> an object, and went to static methods
>>
>> adjustParamIndex() should be removed entirely if it's now always a
>> no-op.
> yeah
>>
>> Why is type translation for JDBC2 types only done in the JDBC3
>> code (in registerOutParameter)? -- shouldn't that be in the JDBC2
>> code?
>>
> Good point
>> There are a bunch of gratuitous changes to the test code that
>> probably shouldn't be committed, e.g. in BatchExecuteTest:
>>
> agreed, they are for my own testing
>>
>>> + try
>>> + {
>>> + Class.forName("org.postgresql.Driver");
>>> + }
>>> + catch( Exception ex){}
>>>
>>
>> similarly in many other test classes.
>>
>> ....
>>
>> It might be an idea to break this up into "support new-style OUT
>> parameters" and "other fixes necessary to pass the CTS" as
>> currently it's quite unclear which is which..
> Well, they are all related OUT parameters are required to support
> the CTS
>>
>> -O
>>
>>
>
From | Date | Subject | |
---|---|---|---|
Next Message | Baki, Geetha D. | 2005-06-29 18:19:46 | Re: java.sql.SQLException: JZ0R1: Result set is IDLE as you are not currently access |
Previous Message | Oliver Jowett | 2005-06-29 14:54:42 | Re: using postgresql-8.0-311.jdbc2.jar |