martinjevans's blog

Building DBD::ODBC against unixODBC on 64 bit platforms

A word of warning. The build process for DBD::ODBC against unixODBC on 64 bit platforms may not produce a workable solution perhaps even segfaulting. The short reason is that few Linux distributions/packages of unixODBC are up to date and few distribute unixODBC's odbc_config which DBD::ODBC needs to ascertain the compiler defines required to build a DBI driver which matches unixODBC. The long answer which which includes a workaround follows.

Some background:

New 1.30_1 development release of DBD::ODBC

I've just uploaded DBD::ODBC 1.30_1 to CPAN.

If you use Windows or a Unicode build of DBD::ODBC on non-Windows platforms you should really test this release as it contains a change in behaviour for Unicode. This release also contains a small but perhaps significant change to the silent rolling back of a transactions when disconnect was called when AutoCommit was disabled. The complete changes since 1.29 are below. Again, many thanks to all the people RTing issues and providing feedback/testing.

More things that don't work with MS Native Client driver

I'm mostly blogging this as a reminder that I've received even more code using Perl and DBD::ODBC via the MS native client driver (not the MS SQL Server ODBC driver which works) which fails in strange ways. This code came to me via Rafael Kitover (@Caelum) and was a cut down demonstration of something dbic does/did? The first example is:

Facebook authentication with Perl - problem and resolution

Recently I've been required to look at writing a Facebook application. I don't use Facebook and have little interest in it myself. I looked around for a quick start with Perl and Facebook and came across Facebook Authentication with Perl and Facebook::Graph which looked interesting to follow and work through.

Putting aside the problems I had getting something set up on our system that allowed Facebook to post back to us I was left with the error:

Version 2 electricty meter power logging

I've had a little time to work on my electricity meter logger (See New data shield) over the bank holiday and have made some improvements to both the script and the power usage. The new schematic is:

New electricty meter schematic

New 1.29 full release of DBD::ODBC

Changes in DBD::ODBC 1.29 March 8, 2011

An official release of the 1.28 development releases.

[NOTE]

  • The 1.28 development releases made a change which causes a generic error to be reported when an ODBC call fails but an error message is not retrieved from the ODBC Driver. It appears this has caught out a few ODBC drivers - notably freeTDS and Firebird. You now may see errors that were missed before e.g., DBIx::Class's tests for Firebird now errors test 21 "outer txn rolled back" (and others) because SQLRowCount returns an error after "ROLLBACK TO SAVEPOINT savepoint_0"; before this error was missed.

Imminent release of DBD::ODBC 1.29

I'm about to release DBD::ODBC 1.29 after 4 development releases. Unfortunately, (as is often the case) I've found a bug just after the last development release related to batching of SQL statements and odbc_more_results. I'm fairly confident in it but if you use DBD::ODBC I'd love you to test it before I release it as it may be a while before I can release a new version.

You can find it here

Support for DBD::ODBC in DBIx::ProcedureCall

I came across someone asking about DBIx::ProcedureCall today on Perl Monks in Execute Oracle Stored procedure using DBIx::ProcedureCall. Years ago I remember finding DBIx::ProcedureCall when we were about to embark on writing an application that used stored procedures in DB2, Oracle and MySQL. DBIx::ProcedureCall did not support DB2 and MySQL then and I was not that happy about the way it creates symbols in Perl for database procedures/functions so I dismissed it and I wrote my own code. When I saw it again on Perl Monks I thought I'd take another look at it and was surprised the supported DBDs has not increased (it is still Oracle and Postgres).

DBD::Oracle and collections and a surprising speed up with InstantClient 11.2

Recently at $work I've been battling with some Perl code which retrieves data from Oracle via DBD::Oracle and a package function which returns a reference cursor. As I've mentioned before in this blog, the user has no select privilege on the database but can call package procedures/functions which return reference cursors and hence data from the database.

The query we have a problem with attempts to return multiple rows but one column is actually a list of primary keys from another table:

Syndicate content