Re: 09.03.0400 broken on 32bit - Mailing list pgsql-odbc

From Heikki Linnakangas
Subject Re: 09.03.0400 broken on 32bit
Date
Msg-id 54652554.1060804@vmware.com
Whole thread Raw
In response to 09.03.0400 broken on 32bit  (Christoph Berg <christoph.berg@credativ.de>)
List 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 by date:

Previous
From: Heikki Linnakangas
Date:
Subject: Re: application_name
Next
From: Nils Gösche
Date:
Subject: Re: Bug? {? = CALL insert_page_segment (?, ?)}