Re: 09.03.0400 broken on 32bit

Поиск
Список
Период
Сортировка
От Heikki Linnakangas
Тема Re: 09.03.0400 broken on 32bit
Дата
Msg-id 54652554.1060804@vmware.com
обсуждение исходный текст
Ответ на 09.03.0400 broken on 32bit  (Christoph Berg <christoph.berg@credativ.de>)
Список pgsql-odbc
On 11/12/2014 02:21 PM, Christoph Berg wrote:
> Hi,
>
> 09.03.0400 is broken on all 32bit architectures:
>
> https://buildd.debian.org/status/logs.php?pkg=psqlodbc&ver=1%3A09.03.0400-1
>
> ...
>
> *** /home/cbe/projects/postgresql/psqlodbc/psqlodbc/test/expected/result-conversions.out    2014-10-26
07:08:38.000000000+0100 
> --- /home/cbe/projects/postgresql/psqlodbc/psqlodbc/test/results/result-conversions.out    2014-11-12
13:18:49.990297759+0100 
> ***************
> *** 356,371 ****
>    'textdata' (text) as SQL_C_INTERVAL_MINUTE_TO_SECOND: interval sign: 0 unknown interval type: 0
>    '3234567901' (oid) as SQL_C_CHAR: 3234567901
>    '3234567901' (oid) as SQL_C_WCHAR: 3234567901
> ! '3234567901' (oid) as SQL_C_SSHORT: -26915
> ! '3234567901' (oid) as SQL_C_USHORT: 38621
> ! '3234567901' (oid) as SQL_C_SLONG: -1060399395
>    '3234567901' (oid) as SQL_C_ULONG: 3234567901
>    '3234567901' (oid) as SQL_C_FLOAT: 3234567936.000000
>    '3234567901' (oid) as SQL_C_DOUBLE: 3234567901.000000
> ! '3234567901' (oid) as SQL_C_BIT: 221
> ! '3234567901' (oid) as SQL_C_STINYINT: -35
> ! '3234567901' (oid) as SQL_C_UTINYINT: 221
> ! '3234567901' (oid) as SQL_C_SBIGINT: 3234567901
>    '3234567901' (oid) as SQL_C_UBIGINT: 3234567901
>    '3234567901' (oid) as SQL_C_BINARY: SQLGetData failed
>    07006=Received an unsupported type from Postgres.
> --- 356,371 ----
>    'textdata' (text) as SQL_C_INTERVAL_MINUTE_TO_SECOND: interval sign: 0 unknown interval type: 0
>    '3234567901' (oid) as SQL_C_CHAR: 3234567901
>    '3234567901' (oid) as SQL_C_WCHAR: 3234567901
> ! '3234567901' (oid) as SQL_C_SSHORT: -1
> ! '3234567901' (oid) as SQL_C_USHORT: 65535
> ! '3234567901' (oid) as SQL_C_SLONG: 2147483647
>    '3234567901' (oid) as SQL_C_ULONG: 3234567901
>    '3234567901' (oid) as SQL_C_FLOAT: 3234567936.000000
>    '3234567901' (oid) as SQL_C_DOUBLE: 3234567901.000000
> ! '3234567901' (oid) as SQL_C_BIT: 255
> ! '3234567901' (oid) as SQL_C_STINYINT: -1
> ! '3234567901' (oid) as SQL_C_UTINYINT: 255
> ! '3234567901' (oid) as SQL_C_SBIGINT: -1060399395
>    '3234567901' (oid) as SQL_C_UBIGINT: 3234567901
>    '3234567901' (oid) as SQL_C_BINARY: SQLGetData failed
>    07006=Received an unsupported type from Postgres.

Hmm. The difference is in the conversion of an integer value larger than
2^31, to a C type that's not large enough to hold it. According to the
ODBC spec, that's supposed to raise an error, sqlstate 22015, and the
result is undefined.
(http://msdn.microsoft.com/en-us/library/ms712567%28v=vs.85%29.aspx).

I actually removed those particular test cases after the 09.03.0400
release, when I added tests for large objects. The above OID conversion
tests started to behave differently after the "lo" domain, for large
objects. So the issue should be resolved in git master already, by accident.

The real issue here is that the driver doesn't raise an error when a
numeric value's whole part is truncated.

- Heikki



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

Предыдущее
От: Heikki Linnakangas
Дата:
Сообщение: Re: application_name
Следующее
От: Nils Gösche
Дата:
Сообщение: Re: Bug? {? = CALL insert_page_segment (?, ?)}