Re: Issues with Array Interface

Поиск
Список
Период
Сортировка
От Barry Lind
Тема Re: Issues with Array Interface
Дата
Msg-id 3CFBACBD.8080400@xythos.com
обсуждение исходный текст
Ответ на Re: Issues with Array Interface  (Noel Rappin <nrappin@sockeye.com>)
Список pgsql-jdbc
I have commited this fix.  Thanks for the bug report and the fix.

--Barry

Noel Rappin wrote:
> I think this is it.  Let me know if there are any problems.
>
> Noel
>
> Dave Cramer wrote:
>
>> Noel,
>>
>> This is great, can you do a send a context diff into the list. You can
>> produce this using cvs, or diff.
>>
>> for diff it is diff -c file1 file2 >patchfile
>> for cvs it is cvs diff -c file >patchfile
>>
>> then send the patchfile
>>
>> Dave
>> On Fri, 2002-05-31 at 11:07, Noel Rappin wrote:
>>
>>
>>> After compiling and testing, this does appear to fix the problem.
>>> What needs to be done to make the patch?
>>>
>>> Noel
>>>
>>> Noel Rappin wrote:
>>>
>>>
>>>
>>>> I think I may have found the timestamp bug -- this code is from
>>>> org.postgresql.jdbc2.Array.java:
>>>>
>>>> This is lines 160- 170 in the getArray() function:
>>>>
>>>> case Types.TIME:
>>>>   retVal = new java.sql.Time[ count ];
>>>>   for ( ; count > 0; count-- )
>>>>       ((java.sql.Time[])retVal)[i++] = ResultSet.toTime(
>>>> arrayContents[(int)index++] );
>>>>   break;
>>>> case Types.TIMESTAMP:
>>>>   retVal = new Timestamp[ count ];
>>>>   StringBuffer sbuf = null;
>>>>   for ( ; count > 0; count-- )
>>>>       ((java.sql.Timestamp[])retVal)[i++] = ResultSet.toTimestamp(
>>>> arrayContents[(int)index], rs );
>>>>   break;
>>>>
>>>> Shouldn't the arrayContents[(int)index] in the TIMESTAMP clause also
>>>> be arrayContents[(int)index++]?
>>>>
>>>> getResultSet() is dependent on getArray(), so that would show the
>>>> same behavior.
>>>>
>>>> Will try to test this...
>>>>
>>>> Noel
>>>>
>>>> Noel Rappin wrote:
>>>>
>>>>
>>>>
>>>>> Okay, let's try this...
>>>>>
>>>>> The table def is roughly this...  It's archiving an entire days
>>>>> worth of
>>>>> data into one row.  There are some other columns that are
>>>>> unimportant to
>>>>> the current problem.
>>>>>
>>>>> day    timestamp without time
>>>>> time     timestamp with time zone []
>>>>> value     real[]
>>>>>
>>>>> I've tried a couple of things with the code, here's what I have
>>>>> now.  As
>>>>> this works, the data result set generates correct values as it walks
>>>>> throgh the set, but the times result set always gives the same value.
>>>>>
>>>>>   public void addOneHistoryRow(ResultSet rs) throws SQLException {
>>>>>       Array timeArray = rs.getArray("time");
>>>>>       ResultSet times = timeArray.getResultSet();
>>>>>       Array dataArray = rs.getArray("value");
>>>>>       ResultSet data = dataArray.getResultSet();
>>>>>       while (times.next()) {
>>>>>           data.next();
>>>>>           Number value = (Number) data.getObject(2);
>>>>>           String timeString = times.getString(2);
>>>>>           try {
>>>>>               Timestamp time = new Timestamp(
>>>>>                       inputFormat.parse(timeString).getTime());
>>>>>               this.addOneDataPoint(time, value);
>>>>>           } catch (ParseException e) {
>>>>>               System.out.println(e);
>>>>>           }
>>>>>       }
>>>>>       }
>>>>>
>>>>> There's actually another issue here, which is that I had to parse the
>>>>> Timestamp by hand -- I was getting an error on plain getObject()
>>>>> for the
>>>>> time column, but that's also minor.
>>>>>
>>>>> I've tried it a few different ways -- I tried having times be
>>>>> generated
>>>>> with
>>>>> Timestamp[] times = (Timestamp[]) timeArray.getArray();
>>>>>
>>>>> Which had the same issue -- every enery in the array had the same
>>>>> value.
>>>>>
>>>>> Thanks,
>>>>>
>>>>> Noel
>>>>>
>>>>>
>>>>> Dave Cramer wrote:
>>>>>
>>>>>
>>>>>
>>>>>> Noel,
>>>>>>
>>>>>> It would be helpful if you could provide sample code, and table
>>>>>> definitions (just enough to reproduce the problem) .
>>>>>>
>>>>>> Dave
>>>>>> On Thu, 2002-05-30 at 11:10, Noel Rappin wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>> I'm having some problems with the Array interface in 7.2, and I'm
>>>>>>> wondering if somebody can point me to a workaround.
>>>>>>>
>>>>>>> Issue 1:
>>>>>>>
>>>>>>> The array in the database is of type real[].  The code:
>>>>>>>
>>>>>>> Array dataArray = rs.getArray("value");
>>>>>>> Float[] data = (Float[]) dataArray.getArray();
>>>>>>>
>>>>>>> gives me a class cast exception.  This seems to be true no matter
>>>>>>>
>>>>>>
>>>>> what I
>>>>>
>>>>>
>>>>>>> try to cast the array to (even Object[]),  When I work around by
>>>>>>> using
>>>>>>> dataArray.getResultSet(), it correctly casts the individual
>>>>>>>
>>>>>>
>>>>> elements of
>>>>>
>>>>>
>>>>>>> the result to Float.  I have an analagous problem when the array
>>>>>>> is of
>>>>>>> type smallint.  Since I can work around this with the result set,
>>>>>>> it's
>>>>>>> less of a problem, but it is strange.
>>>>>>>
>>>>>>> Issue 2:
>>>>>>>
>>>>>>> The array in the database is of type timestamp with time zone [].
>>>>>>>
>>>>>>> Array timeArray = rs.getArray("time");
>>>>>>> Timestamp[] times = (Timestamp[]) timeArray.getArray();
>>>>>>>
>>>>>>> runs without a class cast exception, however every element in the
>>>>>>>
>>>>>>
>>>>> array
>>>>>
>>>>>
>>>>>>> is set to the same value -- the value that would be at times[0].
>>>>>>> This
>>>>>>> problem persists even if I use getResultSet() -- even when I next()
>>>>>>> through the array, the data value does not change.   I can't seem to
>>>>>>> access the later values in the array at all.
>>>>>>>
>>>>>>> Has anybody else seen this problem?  Any suggestions for
>>>>>>> workarounds?
>>>>>>> The data can be accessed correctly through psql, so I believe the
>>>>>>> problem must be in the driver.
>>>>>>>
>>>>>>> Thanks,
>>>>>>>
>>>>>>> Noel Rappin
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> ---------------------------(end of
>>>>> broadcast)---------------------------
>>>>> TIP 4: Don't 'kill -9' the postmaster
>>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> ---------------------------(end of
>>>> broadcast)---------------------------
>>>> TIP 6: Have you searched our list archives?
>>>>
>>>> http://archives.postgresql.org
>>>>
>>>
>>>
>>>
>>>
>>> ---------------------------(end of broadcast)---------------------------
>>> TIP 5: Have you checked our extensive FAQ?
>>>
>>> http://www.postgresql.org/users-lounge/docs/faq.html
>>>
>>>
>>>
>>
>>
>>
>>
>>
>> ---------------------------(end of broadcast)---------------------------
>> TIP 4: Don't 'kill -9' the postmaster
>>
>>
>
>
> ------------------------------------------------------------------------
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 3: if posting/reading through Usenet, please send an appropriate
> subscribe-nomail command to majordomo@postgresql.org so that your
> message can get through to the mailing list cleanly



В списке pgsql-jdbc по дате отправления:

Предыдущее
От: Ian Wehrman
Дата:
Сообщение: Re: getImportedKeys returns only one key
Следующее
От: Bruce Momjian
Дата:
Сообщение: Re: [PATCHES] JDBC CStmt (inline this time)