DBD::ODBC 1.15 released to CPAN
am 29.01.2008 11:50:53 von Martin.EvansSince things seemed to have quietened down since the last development
release of DBD::ODBC I have released 1.15 to CPAN today. The changes in
1.15 (final) and previous development releases are listed below. There
are some fairly serious changes in this version compared with 1.14.
=head2 Changes in DBD::ODBC 1.15 January 29, 2008
Fixed bug reported by Toni Salomaki where DBD::ODBC may call
SQLNumResultCols after SQLMoreResults returns SQL_NO_DATA. It led to
the error:
Describe failed during DBI::st=HASH(0x19c2048)->FETCH(NUM_OF_FIELDS,0)
when NUM_OF_FIELDS was referenced in the Perl script.
Updated odbc_exec_direct documentation to describe its requirement
when creating temporary objects in SQL Server.
Added FAQ on SQL Server temporary tables.
Fixed bug in dbdimp.c which was using SQL_WCHAR without testing it was
defined - thanks Jergen Dutch.
Fixed use of "our" in UCHelp.pm which fails on older Perls.
Minor changes to 02simple.t and 03dbatt.t to fix diagnostics output
and help debug DBD which does not handle long data properly.
Further changes to Makefile.PL to avoid change in behavior of
ExtUtils::MakeMaker wrt order of execution of PREREQ_PM and CONFIGURE.
Now if DBI::DBD is not installed we just warn and exit 0 to avoid a
cpan-testers failure.
=head2 Changes in DBD::ODBC 1.15_2 November 14, 2007
Fix bug in DBD::ODBC's private function data_sources which was
returning data sources prefixed with "DBI:ODBC" instead of "dbi:ODBC".
If you don't have at least DBI 1.21 it is now a fatal error instead of
just a warning.
DBI->connect changed so informational diagnostics like "Changed
database context to 'master'" from SQL Server are available in
errstr/state. These don't cause DBI->connect to die but you can test
$h->err eq "" after connect and obtain the informational diagnostics
from errstr/state if you want them.
Fixed problem in 41Unicode.t where utf8 was used before testing we had
a recent enough Perl - thank you cpan testers.
Changed "our" back to "my" in Makefile.PL - thank you cpan testers.
Removed all calls to DBIh_EVENT2 in dbdimp.c as it is no longer used
(see posts on dbi-dev).
Changed text output when a driver manager is not found to stop
referring to iodbcsrc which is no longer included with DBD::ODBC.
Changed Makefile.PL to attempt to find unixODBC if -o or ODBCHOME not
specified.
Updated META.yml based on new 1.2 spec.
Changed Makefile.PL so if an ODBC driver manager is not found then we
issue warning and exit cleanly but not generating a Makefile. This
should stop cpan-testers from flagging a fail because they haven't got
an ODBC driver manager.
Changed Makefile.PL so if an ODBC driver manager is not found then we
issue warning and exit cleanly but not generating a Makefile. This
should stop cpan-testers from flagging a fail because they haven't got
an ODBC driver manager.
Changed Makefile.PL so it no longer "use"s DBI/DBI::DBD because this
makes cpan-testers log a fail if DBI is not installed. Changed to put
the DBI::DBD use in the CONFIGURE sub so PREREQ_PM will filter out
machines where DBI is not installed.
Fix a possible typo, used once in 10handler.t.
=head2 Changes in DBD::ODBC 1.15_1 November 6, 2007
Minor changes to 20SqlServer.t test for SQL Server 2008 (Katmai).
Timestamps now return an extra 4 digits of precision (all 0000) and
the driver reported in dbcc messages has a '.' in the version which
was not handled.
New FAQ entry and test code for "Datetime field overflow" problem in
Oracle.
Changed all ODBC code to use new SQLLEN/SQLULEN types where
Microsoft's headers indicate, principally so DBD::ODBC builds and
works on win64. NOTE: you will need an ODBC Driver Manager on UNIX
which knows SQLLEN/SQLULEN types. The unixODBC driver manager uses
SQLLEN/SQLULEN in versions from at least 2.2.12. Thanks to Nelson
Oliveira for finding, patching and testing this and then fixing
problems with bound parameters on 64 bit Windows.
Added private_attribute_info method DBI introduced (see DBI docs)
and test cases to 02simple.t.
Fairly major changes to dbd_describe in dbdimp.c to reduce ODBC calls
by 1 SQLDescribeCol call per column when describing result
sets. Instead of calculating the amount of memory required to hold
every column name we work on the basis that (num_columns + 1) *
SQL_MAX_COLUMN_NAME_LEN can hold all column names. However, to avoid
using a large amount of memory unnecessarily if an ODBC driver
supports massive column name lengths the maximum size per column is
restricted to 256.
Changed to avoid using explicit use of DBIc_ERRXXX in favour of newish
(ok, DBD::ODBC is a bit behind the times in this respect)
DBIh_SET_ERR_CHAR. This involved a reworking or the error handling
and although all test cases still pass I cannot guarantee it has no
other effects - please let me know if you spot differences in error
messages.
Fixed bug in 20SqlServer test for multiple results that was passing
but for the wrong reason (namely, that the odbc_err_handler was being
called when it should not have been).
Fixed bug in odbc_err_handler that prevented it from being reset so
you don't have an error handler. Looks like the problem was in
dbd_db_STORE_attrib where "if(valuesv == &PL_sv_undef)" was used to
detect undef and I think it should be "if (!SvOK(valuesv))".
Improvements to odbc_err_handler documentation.
Added 10handler.t test cases.
More tests in 02simple.t to check NUM_OF_FIELDS and NAMES_uc.
Bit of a tidy up:
Removed some unused variable declarations from dbdimp.c.
Lots of changes to DBD::ODBC tracing, particularly in dbd_describe,
and dbd_error2 and login6.
Removed a lot of tracing code in comments or #if 0 as it never gets
built.
Changed dual tests on SQL_SUCCESS and SQL_SUCCESS_WITH_INFO to use
SQL_SUCCEEDED.
Martin
--
Martin J. Evans
Easysoft Limited
http://www.easysoft.com