[R-SIG-Mac] ODBC driver with postgresql
Tim Coote
tim+r-project.org at coote.org
Tue Dec 15 21:36:43 CET 2009
Well my fix is clearly inadequate as I'm getting malloc errors when I
re-read the information :-(
On 15 Dec 2009, at 17:49, Tim Coote wrote:
> I now have a simplistic fix for this error. I have no idea how to
> create test or submit a patch. Indeed, i've got zero familiarity
> with the testing model.
>
> Here's the skinny. The RODBC.c driver code does not handle
> SQL_FLOATs (ie DATA_TYPE 6 in my original posting) returned by the
> odbc driver, so they fall through to the default encoding mechanism,
> which is character based (I think). As far as I can see, all that's
> needed is to include SQL_FLOAT to all of the SQL_DOUBLE cases in
> three switch statements. (one in cachenbind, two in RODBCFetchRows.)
>
> I'd guess that the reason that I've found this bug on the mac is
> that my linux box (Fedora Core 10) uses an older version of RODBC
> (rpm: R-RODBC-1.2-2.fc10.i386) and the bug's crept in between the
> two versions. However, I've not diff'd the sources. It could just be
> that no one else uses RODBC + PostgreSQL.
>
> What's the process for submitting a suitable patch? or is the above
> description enough to be picked up by the package maintainers?
>
> Tim
> On 2 Dec 2009, at 22:49, Tim Coote wrote:
>
>> For some reason I've got a problem with double precision numbers in
>> postgres coming across into R as integers (they're just truncated).
>>
>> I'm using:
>> R 2.10.0 GUI 1.30 Leopard build 32-bit (5511)
>> R-RODBC version 1.3
>> I've tried both the packaged postgresql odbc driver for the mac and
>> rebuilt from source with the same results (psqlodbc-08.04.0100),
>> against postgres 8.4 on my mac and against 8.3 on Fedora Linux.
>>
>> the odbc driver works as expected with python + pyodbc, and with R
>> 2.10, RODBC (R-RODBC-1.2-2.fc10.i386, R-2.10.0-2.fc10.i386).
>>
>> Here's some noddy results (I create a table called x with with one
>> double precision column) - I'm ignoring the warning, which seems to
>> be a distro error for fc10:
>>
>> From R on Linux:
>> > library (RODBC)
>> Warning message:
>> package 'RODBC' was built under R version 2.8.1 and help may not
>> work correctly
>> > c=odbcConnect ("PostgreSQL", uid="yy", pwd="xxx")
>> > sqlQuery (c, "select * from x")
>> x
>> 1 1.234
>> 2 43.989
>> > sqlColumns(c, "x")
>> TABLE_QUALIFIER TABLE_OWNER TABLE_NAME COLUMN_NAME DATA_TYPE
>> TYPE_NAME
>> 1 cases public x x 6
>> float8
>> PRECISION LENGTH SCALE RADIX NULLABLE REMARKS COLUMN_DEF
>> SQL_DATA_TYPE
>> 1 15 8 0 10 1
>> <NA> 6
>> SQL_DATETIME_SUB CHAR_OCTET_LENGTH ORDINAL_POSITION IS_NULLABLE
>> DISPLAY_SIZE
>> 1 NA NA 1
>> <NA> 22
>> FIELD_TYPE AUTO_INCREMENT PHYSICAL NUMBER TABLE OID
>> 1 701 0 1 16517
>>
>>
>> However, on the mac:
>> > c=odbcConnect ("Hg", uid="yy", pwd="xxx")
>> > sqlQuery(c, "select * from x")
>> x
>> 1 1
>> 2 43
>> > sqlColumns (c, "x")
>> TABLE_QUALIFIER TABLE_OWNER TABLE_NAME COLUMN_NAME DATA_TYPE
>> TYPE_NAME PRECISION LENGTH SCALE RADIX NULLABLE REMARKS
>> 1 cases public x x 6
>> float8 15 8 0 10 1
>> COLUMN_DEF SQL_DATA_TYPE SQL_DATETIME_SUB CHAR_OCTET_LENGTH
>> ORDINAL_POSITION IS_NULLABLE DISPLAY_SIZE FIELD_TYPE
>> 1 <NA> 6 NA
>> NA 1 <NA> 22 701
>> AUTO_INCREMENT PHYSICAL NUMBER TABLE OID BASE TYPEID
>> 1 0 1 16517 0
>>
>> Uid and pwd obfuscated. As far as I can see, the driver on the mac
>> is correctly identifying the type of the column 'x' as a float8,
>> but then truncating before the decimal point. I have seen
>> somewhere that Oracle drivers used to suffer from this issue, when
>> they truncated type 6 variables.
>>
>> python looks ok on the mac:
>> >>> import pyodbc
>> >>> c=pyodbc.connect (dsn="Hg")
>> >>> cu=c.cursor().execute ("select * from x")
>> >>> print cu.fetchall()
>> [(1.234, ), (43.988999999999997, )]
>>
>> I cannot find a pyodbc equivalent to sqlColumns. As far as I can
>> see, R and python on my mac are using a common stack, and R seems
>> to work ok with the fedora odbc drivers. Is it likely that I've
>> still got bugs in my odbc set up or is there an issue with R +
>> ODBC? I'm not sure where else to look for what's going wrong.
>>
>> Tim
>>
>> _______________________________________________
>> R-SIG-Mac mailing list
>> R-SIG-Mac at stat.math.ethz.ch
>> https://stat.ethz.ch/mailman/listinfo/r-sig-mac
>
> Tim Coote
> tim at coote.org
> +44 (0)7866 479 760
>
>
>
>
Tim Coote
tim at coote.org
+44 (0)7866 479 760
More information about the R-SIG-Mac
mailing list