New development release of perl DBD::ODBC

I have released DBD::ODBC 1.36-1 to cpan. With hindsight I was probably too ambitious releasing 1-35 with the default for execute_for_fetch enabled. This decision was based on a) my experience with writing bound arrays of parameters in the ODBC-ODBC Bridge b) I knew some drivers would have issues but I thought this might encourage fixes c) it is so much faster. As it turns out I am seeing issues currently with SQLite, Freetds, MS Access and even MS SQL Server. Until I resolve these issues I will probably reverse the default in the next development release.

The changes in this release are:


* Fixed 12blob.t skip count when driver does not have a big enough
varchar column to run the test.

* Work around problems hit during the test suite in DB2 driver which
only allows rows of size up to the page size and varchars of 4K.

* Fix bug in execute_for_fetch where it would ignore the parameters
processed when creating the ArrayTupleStatus and hence could
attempt to call SQLGetDiagRec on a parameter row which was not
executed. See the logs in rt 75687 which show this although this
is not a fix for this rt.

* The code wasn't catching success with info from SQLExecute in

* Add support for drivers (DB2 in this case) which return SQL_PARAM_DIAG_UNAVAILABLE in bound parameter status array when running execute_for_fetch. Any driver returning doing SQL_PARC_NO_BATCH from SQLGetInfo(SQL_PARAM_ARRAY_ROW_COUNTS) might do this.

* Fix test code for execute_for_fetch to a) handle drivers doing
SQL_PARC_NO_BATCH and b) add "not null" to primary key fields for
drivers like DB2 which require it.


* In execute_for_fetch set the parameter status array to all 9999
(which is invalid) so we can see if the ODBC driver actually sets
them and we can warn if they don't.

* For freeTDS default odbc_disable_array_operations to 1 as no
version of the freeTDS driver can be found that works. I was
requested to do this by the dbix-class guys. I may revert this
later if freeTDS is fixed.

* as above for MS Access. It is a shame I cannot find any way of
finding out if a driver is capable of array operations.


* execute_for_fetch code now checks the
ODBC_DISABLE_ARRAY_OPERATIONS environment variable which can
be set to 1 or 0 to override the internal default.


* Fixed ColAttributes example in pod which used a $dbh instead of a

* Fixed DescribeCol example in pod which used a $dbh instead of a

* new FAQ on SQLRowCount, freeTDS and execute_for_fetch

* Fix typo shown in rt 75860.


* Reduced usage of D_imp_xxx to avoid calls to dbih_getcom2. See
thread on dbi-dev at

* Changed the 70execute_array.t test to run it twice, once using
DBI's methods and once using the native one in DBD::ODBC.

* Made the 2 unicode tests work with DB2 ODBC driver.