Re: Various errors in psqlodbc: SQLGetTypeInfo, SQLTables, bigint, and double vs float

Поиск
Список
Период
Сортировка
От Hiroshi Inoue
Тема Re: Various errors in psqlodbc: SQLGetTypeInfo, SQLTables, bigint, and double vs float
Дата
Msg-id 4CD11F17.5050207@tpf.co.jp
обсуждение исходный текст
Ответ на Various errors in psqlodbc: SQLGetTypeInfo, SQLTables, bigint, and double vs float  (Adrien de Croy <adrien@qbik.com>)
Ответы Re: Various errors in psqlodbc: SQLGetTypeInfo, SQLTables, bigint, and double vs float  (Adrien de Croy <adrien@qbik.com>)
Re: Various errors in psqlodbc: SQLGetTypeInfo, SQLTables, bigint, and double vs float  (Adrien de Croy <adrien@qbik.com>)
Список pgsql-odbc
Hi,

(2010/11/03 12:22), Adrien de Croy wrote:
>
> Hi all,
>
> apologies if this is already in the bug tracker (I had a look but didn't
> find it).
>
> We recently did some work to get our product working with PostgreSQL 9.0
> and the latest ODBC driver. Our code is written to (try to) be
> DBMS-agnostic. So it enumerates reported types, searches for matching
> types etc, and builds CREATE TABLE statements etc from what it finds.
>
> There were a couple of inconsistencies in data returned from the ODBC
> driver.
>
> 1. Data returned from SQLGetTypeInfo uses ODBC2 field names.
>
> The columns reported include
>
> "PRECISION" instead of "COLUMN_SIZE"
> "MONEY" instead of "FIXED_PREC_SCALE"
> "AUTO_INCREMENT" instead of "AUTO_UNIQUE_VALUE"
>
> 2. Data returned from SQLTables uses ODBC2 field names
>
> "TABLE_QUALIFIER" instead of "TABLE_CAT"
> "TABLE_OWNER" instead of "TABLE_SCHEM"
>
> These 2 issues aren't huge problems, since the ordinal column number
> stays the same.
>
> 3. Not all supported types returned by SQLGetTypeInfo
>
> Specifically the types SERIAL and BIGSERIAL are not reported. This means
> we needed to hard-code a hack so if the driver was PostgreSQL and we
> needed an AUTO_UNIQUE_VALUE counter, we used "SERIAL". It works, but if
> SQLGetTypeInfo returned these types, it wouldn't need the hack.
>
> 4. Oddness with bigint fields.
>
> bigint reported as precision of 19, instead of 20. This isn't big enough
> to store an unsigned __int64

Because int8 type in PostgreSQL is signed, the precision is 19.

> 5. Oddness with double precision fields.
>
> We had to use double precision fields to store file size information,
> because bigint couldn't do an __int64 (not sure what actual C type this
> really maps to in reality). However when we get the field data back in a
> query, it is reported as type SQL_FLOAT, even though the DB structure in
> the PostgreSQL manager shows it as double precision. Obviously you don't
> want to truncate double to float, so is this just in the driver (some
> type switch case not supported?)

SQL_FLOAT means double precision type. What means signle precision type
is SQL_REAL.

> Once we worked around all these issues, it seems to be working great.
> I'm a bit concerned about losing precision with double vs float though.
>
> Regards
>
> Adrien


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

Предыдущее
От: Adrien de Croy
Дата:
Сообщение: Various errors in psqlodbc: SQLGetTypeInfo, SQLTables, bigint, and double vs float
Следующее
От: Adrien de Croy
Дата:
Сообщение: Re: Various errors in psqlodbc: SQLGetTypeInfo, SQLTables, bigint, and double vs float