I've just released DBD::ODBC 1.27.
Version 1.27 combines all the 1.26 development releases and is a significant release as DBD::ODBC is now entirely ODBC 3.0 and requires an ODBC Driver Manager for any ODBC 2.0 drivers. Many thanks to everyone who has contributed. The changes are listed below.
=head2 Changes in DBD::ODBC 1.27 December 29, 2010
Official release of the 1.26 development releases.
=head2 Changes in DBD::ODBC 1.26_4 December 14, 2010
Fixed bug highlighted by investigation into rt 62033 where the active flag was sometimes not set on the statement after SQLMoreResults indicates a result-set exists.
Fix rt 63550 reported by John Corcoran where if a do method call fails the SQL C is not available in an error handler as we never created a DBI statement in the first place. Added a note to "do" deviations pod.
Minor fix to head at wrong level in the pod.
Fix a possible snprintf buffer overflow in GetTypeInfo when the type is specified and it is negative.
=head2 Changes in DBD::ODBC 1.26_3 November 18, 2010
Fixed rt 63108. The change to column binding in 1.24_2 was not complete and causes bound columns to be rebound on each execute wasting time and leaking memory. Found, diagnosed and proposed fix by Steve Bentley.
=head2 Changes in DBD::ODBC 1.26_2 November 9, 2010
Fixed bug found by frew where an snprintf can overflow when binding a lot of parameters.
=head2 Changes in DBD::ODBC 1.26_1 October 24, 2010
There are over 200 block changes in the source code for this release from the previous one (see below). If you are using DBD::ODBC in production you should not upgrade without testing this release first as it introduces a lot of internal changes. DBD::ODBC has now gone entirely ODBC 3 and relies on an ODBC Driver Manager to map calls to ODBC 2.0 drivers (why are you still using ODBC 2.0 drivers?). From now on DBD::ODBC needs to be linked with an ODBC Driver Manager and I recommend unixODBC on UNIX and the MS ODBC Driver Manager on Windows. There are really good reasons for this but mainly it is because an ODBC Driver Manager will map ODBC 2.0 calls to an ODBC 3.0 driver and vice versa and handle UNICODE transparently.
Bumped Test::Simple requirement up to 0.90 so we can use done_testing and note.
Bump Perl requirement to 5.8 as per DBI.
Workaround a bug in mdbtools which fails to set the out connection string in a SQLDriverConnect call. This can lead to:
Fixed panic: sv_setpvn called with negative strlen at
blib/lib/DBD/ODBC.pm line 107.
Added rt_61370.t for rt 61370.
Removed last remaining sprintf calls and replaced with snprintf.
Changed the point at which DBD::ODBC switches from VARCHAR to LONGVARCHAR or WVARCHAR to WLONGVARCHAR when SQLDesribeParam fails. It was 4000 and is now 2000 for unicode builds. Works around a daft issue in the MS SQL Server driver which will not allow 'x' x 2001 converted to wide characters to be inserted into a varchar(8000).
Minor change to Makefile.PL to print out found libs for iODBC and unixODBC.
Added some FAQs for problems with iODBC and a recent bug in DBI.
Added FAQ on my_snprintf problem.
Fixed some pod errors in FAQ document.
Fixed warning on 64 bit Strawberry Perl when compiling dbdimp.c for cast from ptr to UDWORD.
Moved to_do items from Changes to TO_DO.
Reformatted this file to save Jens work.
Changed calls to SQLTransact (ODBC 2.0) to SQLEndTran (ODBC 3.0). There really shouldn't be any ODBC 2.0 drivers still around but even if there are, the ODBC driver manager should do the mapping for us.
Changed calls to SQLGetConnectOption/SQLSetConnectOption to SQLGetConnectAttr/SQLSetConnectAttr for ODBC 3.0.
Changed calls to SQLColAttributes (ODBC 2.0) to SQLColAttribute (ODBC 3.0).
Bumped requirement on DBI to 1.609 because that is the first version to contain a dbipport.h which defined my_snprintf - see https://rt.cpan.org/Public/Bug/Display.html?id=62346
Various small changes to dbdimp.c which should have no effect other than to make it leaner:
Removed all dTHR occurrences from dbdimp.c as it is a NOOP since 5.8 and we need 5.8 at least.
Removed dbd_param_err as it was not used
Removed odbc_get_query_timeout as it was never compiled
Removed eod field from statement as it was never used
Removed a load of commented out code
Replaced some SvPV calls with SvPV_nolen when we didn't used the length
Removed some silly code from dbd_db_execdirect which attempted to return -3 - don't think it could ever get run.
Minor tracing output tidy up
Removed dbd_caution as it was no used
Localised more variable declarations