=head1 NAME

DBI::Changes - List of significant changes to the DBI

=encoding UTF-8

=cut

=head2 Changes in DBI 1.643 - ...

    Fix memory corruption in XS functions when Perl stack is reallocated
        thanks to Pali
    Fix calling dbd_db_do6 API function
        thanks to Pali
    Fix potentially calling newSV(0) in malloc_using_sv()
        thanks to Pali
    Fix order of XS preparse() ps_accept and ps_return argument names
        thanks to Petr Písař
    Fix a potential NULL profile dereference in dbi_profile()
        thanks to Petr Písař
    Fix a buffer overflow on an overlong DBD class name
        thanks to Petr Písař

    Remove remnants of support for perl <= v5.8.0
        thanks to Pali and H.Merijn Brand
    Update Devel::PPPort and remove redundant compatibility macros
        thanks to Pali and H.Merijn Brand

    Correct minor typo in documentation
        thanks to Mohammad Anwar
    Correct documentation introducing $dbh->selectall_array()
        thanks to Pali
    Introduce select and do wrappers earlier in the documentation
        thanks to Dan Book
    Mark as deprecated old API functions which overflow or are affected by
        Unicode issues, thanks to Pali

    Add new attribute RaiseWarn, similar to RaiseError,
        thanks to Pali

=head2 Changes in DBI 1.642 - 28th October 2018

    Fix '.' in @INC for proxy test under parallel load
        thanks to H.Merijn Brand.
    Fix driver-related croak() in DBI->connect to report the original DSN
        thanks to maxatome #67

    Introduce a new statement DBI method $sth->last_insert_id()
        thanks to pali #64
    Allow to call $dbh->last_insert_id() method without arguments
        thanks to pali #64
    Added a new XS API function variant dbd_db_do6()
        thanks to Pali #61

    Fix misprints in doc of selectall_hashref
        thanks to Perlover #69
    Remove outdated links to DBI related training resources. RT#125999

=head2 Changes in DBI 1.641 - 19th March 2018

    Remove dependency on Storable 2.16 introduced in DBI 1.639
        thanks to Ribasushi #60
    Avoid compiler warnings in Driver.xst #59
        thanks to pali #59

=head2 Changes in DBI 1.640 - 28th January 2018

    Fix test t/91_store_warning.t for perl 5.10.0
        thanks to pali #57

    Add Perl 5.10.0 and 5.8.1 specific versions to Travis testing
        thanks to pali #57
    Add registration of mariadb_ prefix for new DBD::MariaDB driver
        thanks to pali #56

=head2 Changes in DBI 1.639 - 28th December 2017

    Fix UTF-8 support for warn/croak calls within DBI internals,
        thanks to pali #53
    Fix dependency on Storable for perl older than 5.8.9,
        thanks to H.Merijn Brand.

    Add DBD::Mem driver, a pure-perl in-memory driver using DBI::DBD::SqlEngine,
        thanks to Jens Rehsack #42

    Corrected missing semicolon in example in documentation,
        thanks to pali #55

=head2 Changes in DBI 1.637 - 16th August 2017

    Fix use of externally controlled format string (CWE-134) thanks to pali #44
        This could cause a crash if, for example, a db error contained a %.
        https://cwe.mitre.org/data/definitions/134.html
    Fix extension detection for DBD::File related drivers
    Fix tests for perl without dot in @INC RT#120443
    Fix loss of error message on parent handle, thanks to charsbar #34
    Fix disappearing $_ inside callbacks, thanks to robschaber #47
    Fix dependency on Storable for perl older than 5.8.9

    Allow objects to be used as passwords without throwing an error, thanks to demerphq #40
    Allow $sth NAME_* attributes to be set from Perl code, re #45
    Added support for DBD::XMLSimple thanks to nigelhorne #38

    Documentation updates:
    Improve examples using eval to be more correct, thanks to pali #39
    Add cautionary note to prepare_cached docs re refs in %attr #46
    Small POD changes (Getting Help -> Online) thanks to openstrike #33
    Adds links to more module names and fix typo, thanks to oalders #43
    Typo fix thanks to bor #37

=head2 Changes in DBI 1.636 - 24th April 2016

    Fix compilation for threaded perl <= 5.12 broken in 1.635 RT#113955
    Revert change to DBI::PurePerl DESTROY in 1.635
    Change t/16destroy.t to avoid race hazard RT#113951
    Output perl version and archname in t/01basics.t
    Add perl 5.22 and 5.22-extras to travis-ci config

=head2 Changes in DBI 1.635 - 24th April 2016

    Fixed RaiseError/PrintError for UTF-8 errors/warnings. RT#102404
    Fixed cases where ShowErrorStatement might show incorrect Statement RT#97434
    Fixed DBD::Gofer for UTF-8-enabled STDIN/STDOUT
        thanks to mauke PR#32
    Fixed fetchall_arrayref({}) behavior with no columns
        thanks to Dan McGee PR#31
    Fixed tied CachedKids ref leak in attribute cache by weakening
        thanks to Michael Conrad RT#113852
    Fixed "panic: attempt to copy freed scalar" upon commit() or rollback()
        thanks to fbriere for detailed bug report RT#102791
    Ceased to ignore DESTROY of outer handle in DBI::PurePerl
    Treat undef in DBI::Profile Path as string "undef"
        thanks to fREW Schmidt RT#113298
    Fix SQL::Nano parser to ignore trailing semicolon
        thanks to H.Merijn Brand.

    Added @ary = $dbh->selectall_array(...) method
        thanks to Ed Avis RT#106411
    Added appveyor support (Travis like CI for windows)
        thanks to mbeijen PR#30

    Corrected spelling errors in pod
        thanks to Gregor Herrmann RT#107838
    Corrected and/or removed broken links to SQL standards
        thanks to David Pottage RT#111437
    Corrected doc example to use dbi: instead of DBI: in DSN
        thanks to Michael R. Davis RT#101181
    Removed/updated broken links in docs
        thanks to mbeijen PR#29
    Clarified docs for DBI::hash($string)
    Removed the ancient DBI::FAQ module RT#102714
    Fixed t/pod.t to require Test::Pod >= 1.41 RT#101769

This release was developed at the Perl QA Hackathon 2016
L<http://act.qa-hackathon.org/qa2016/>
which was made possible by the generosity of many sponsors:

L<https://www.fastmail.com> FastMail,
L<https://www.ziprecruiter.com> ZipRecruiter,
L<http://www.activestate.com> ActiveState,
L<http://www.opusvl.com> OpusVL,
L<https://www.strato.com> Strato,
L<http://www.surevoip.co.uk> SureVoIP,
L<http://www.cv-library.co.uk> CV-Library,
L<https://www.iinteractive.com/> Infinity,
L<https://opensource.careers/perl-careers/> Perl Careers,
L<https://www.mongodb.com> MongoDB,
L<https://www.thinkproject.com> thinkproject!,
L<https://www.dreamhost.com/> Dreamhost,
L<http://www.perl6.org/> Perl 6,
L<http://www.perl-services.de/> Perl Services,
L<https://www.evozon.com/> Evozon,
L<http://www.booking.com> Booking,
L<http://eligo.co.uk> Eligo,
L<http://www.oetiker.ch/> Oetiker+Partner,
L<http://capside.com/en/> CAPSiDE,
L<https://www.procura.nl/> Procura,
L<https://constructor.io/> Constructor.io,
L<https://metacpan.org/author/BABF> Robbie Bow,
L<https://metacpan.org/author/RSAVAGE> Ron Savage,
L<https://metacpan.org/author/ITCHARLIE> Charlie Gonzalez,
L<https://twitter.com/jscook2345> Justin Cook.

=head2 Changes in DBI 1.634 - 3rd August 2015

    Enabled strictures on all modules (Jose Luis Perez Diez) #22
        Note that this might cause new exceptions in existing code.
        Please take time for extra testing before deploying to production.
    Improved handling of row counts for compiled drivers and enable them to
        return larger row counts (IV type) by defining new *_iv macros.
    Fixed quote_identifier that was adding a trailing separator when there
        was only a catalog (Martin J. Evans)

    Removed redundant keys() call in fetchall_arrayref with hash slice (ilmari) #24
    Corrected pod xref to Placeholders section (Matthew D. Fuller)
    Corrected pod grammar (Nick Tonkin) #25

    Added support for tables('', '', '', '%') special case (Martin J. Evans)
    Added support for DBD prefixes with numbers (Jens Rehsack) #19
    Added extra initializer for DBI::DBD::SqlEngine based DBD's (Jens Rehsack)
    Added Memory Leaks section to the DBI docs (Tim)
    Added Artistic v1 & GPL v1 LICENSE file (Jose Luis Perez Diez) #21

=head2 Changes in DBI 1.633 - 11th Jan 2015

    Fixed selectrow_*ref to return undef on error in list context
        instead if an empty list.
    Changed t/42prof_data.t more informative
    Changed $sth->{TYPE} to be NUMERIC in DBD::File drivers as per the
        DBI docs. Note TYPE_NAME is now also available. [H.Merijn Brand]
    Fixed compilation error on bleadperl due DEFSV no longer being an lvalue
        [Dagfinn Ilmari Mannsåker]

    Added docs for escaping placeholders using a backslash.
    Added docs for get_info(9000) indicating ability to escape placeholders.
    Added multi_ prefix for DBD::Multi (Dan Wright) and ad2_ prefix for
        DBD::AnyData2

=head2 Changes in DBI 1.632 - 9th Nov 2014

    Fixed risk of memory corruption with many arguments to methods
        originally reported by OSCHWALD for Callbacks but may apply
        to other functionality in DBI method dispatch RT#86744.
    Fixed DBD::PurePerl to not set $sth->{Active} true by default
        drivers are expected to set it true as needed.
    Fixed DBI::DBD::SqlEngine to complain loudly when prerequite
        driver_prefix is not fulfilled (RT#93204) [Jens Rehsack]
    Fixed redundant sprintf argument warning RT#97062 [Reini Urban]
    Fixed security issue where DBD::File drivers would open files
        from folders other than specifically passed using the
        f_dir attribute RT#99508 [H.Merijn Brand]

    Changed delete $h->{$key} to work for keys with 'private_' prefix
        per request in RT#83156. local $h->{$key} works as before.

    Added security notice to DBD::Proxy and DBI::ProxyServer because they
        use Storable which is insecure. Thanks to ppisar@redhat.com RT#90475
    Added note to AutoInactiveDestroy docs strongly recommending that it
        is enabled in all new code.

=head2 Changes in DBI 1.631 - 20th Jan 2014

NOTE: This release changes the handle passed to Callbacks from being an 'inner'
handle to being an 'outer' handle. If you have code that makes use of Callbacks,
ensure that you understand what this change means and review your callback code.

    Fixed err_hash handling of integer err RT#92172 [Dagfinn Ilmari]
    Fixed use of \Q vs \E in t/70callbacks.t

    Changed the handle passed to Callbacks from being an 'inner'
        handle to being an 'outer' handle.

    Improved reliability of concurrent testing
        PR#8 [Peter Rabbitson]
    Changed optional dependencies to "suggest"
        PR#9 [Karen Etheridge]
    Changed to avoid mg_get in neatsvpv during global destruction
        PR#10 [Matt Phillips]

=head2 Changes in DBI 1.630 - 28th Oct 2013

NOTE: This release enables PrintWarn by default regardless of $^W.
Your applications may generate more log messages than before.

    Fixed err for new drh to be undef not to 0 [Martin J. Evans]
    Fixed RT#83132 - moved DBIstcf* constants to util
        export tag [Martin J. Evans]
    PrintWarn is now triggered by warnings recorded in methods like STORE
        that don't clear err RT#89015 [Tim Bunce]

    Changed tracing to no longer show quote and quote_identifier calls
        at trace level 1.
    Changed DBD::Gofer ping while disconnected set_err from warn to info.
    Clarified wording of log message when err is cleared.
    Changed bootstrap to use $XS_VERSION RT#89618 [Andreas Koenig]

    Added connect_cached.connected Callback PR#3 [David E. Wheeler]

    Clarified effect of refs in connect_cached attributes [David E. Wheeler]
    Extended ReadOnly attribute docs for when the driver cannot
      ensure read only [Martin J. Evans]
    Corrected SQL_BIGINT docs to say ODBC value is used PR#5 [ilmari]

There was no DBI 1.629 release.

=head2 Changes in DBI 1.628 - 22nd July 2013

    Fixed missing fields on partial insert via DBI::DBD::SqlEngine
        engines (DBD::CSV, DBD::DBM etc.) [H.Merijn Brand, Jens Rehsack]
    Fixed stack corruption on callbacks RT#85562 RT#84974 [Aaron Schweiger]
    Fixed DBI::SQL::Nano_::Statement handling of "0" [Jens Rehsack]
    Fixed exit op precedence in test RT#87029 [Reni Urban]

    Added support for finding tables in multiple directories
        via new DBD::File f_dir_search attribute [H.Merijn Brand]
    Enable compiling by C++ RT#84285 [Kurt Jaeger]

    Typo fixes in pod and comment [David Steinbrunner]
    Change DBI's docs to refer to git not svn [H.Merijn Brand]
    Clarify bind_col TYPE attribute is sticky [Martin J. Evans]
    Fixed reference to $sth in selectall_arrayref docs RT#84873
    Spelling fixes [Ville Skyttä]
    Changed $VERSIONs to hardcoded strings [H.Merijn Brand]

=head2 Changes in DBI 1.627 - 16th May 2013

    Fixed VERSION regression in DBI::SQL::Nano [Tim Bunce]

=head2 Changes in DBI 1.626 - 15th May 2013

    Fixed pod text/link was reversed in a few cases RT#85168
        [H.Merijn Brand]

    Handle aliasing of STORE'd attributes in DBI::DBD::SqlEngine
        [Jens Rehsack]

    Updated repository URI to git [Jens Rehsack]

    Fixed skip() count arg in t/48dbi_dbd_sqlengine.t [Tim Bunce]

=head2 Changes in DBI 1.625 (svn r15595) 28th March 2013

  Fixed heap-use-after-free during global destruction RT#75614
    thanks to Reini Urban.
  Fixed ignoring RootClass attribute during connect() by
    DBI::DBD::SqlEngine reported in RT#84260 by Michael Schout

=head2 Changes in DBI 1.624 (svn r15576) 22nd March 2013

  Fixed Gofer for hash randomization in perl 5.17.10+ RT#84146

  Clarify docs for can() re RT#83207

=head2 Changes in DBI 1.623 (svn r15547) 2nd Jan 2013

  Fixed RT#64330 - ping wipes out errstr (Martin J. Evans).
  Fixed RT#75868 - DBD::Proxy shouldn't call connected() on the server.
  Fixed RT#80474 - segfault in DESTROY with threads.
  Fixed RT#81516 - Test failures due to hash randomisation in perl 5.17.6
    thanks to Jens Rehsack and H.Merijn Brand and feedback on IRC
  Fixed RT#81724 - Handle copy-on-write scalars (sprout)
  Fixed unused variable / self-assignment compiler warnings.
  Fixed default table_info in DBI::DBD::SqlEngine which passed NAMES
    attribute instead of NAME to DBD::Sponge RT72343 (Martin J. Evans)

  Corrected a spelling error thanks to Chris Sanders.
  Corrected typo in DBI->installed_versions docs RT#78825
    thanks to Jan Dubois.

  Refactored table meta information management from DBD::File into
    DBI::DBD::SqlEngine (H.Merijn Brand, Jens Rehsack)
  Prevent undefined f_dir being used in opendir (H.Merijn Brand)

  Added logic to force destruction of children before parents
    during global destruction. See RT#75614.
  Added DBD::File Plugin-Support for table names and data sources
    (Jens Rehsack, #dbi Team)
  Added new tests to 08keeperr for RT#64330
    thanks to Kenichi Ishigaki.
  Added extra internal handle type check, RT#79952
    thanks to Reini Urban.
  Added cubrid_ registered prefix for DBD::cubrid, RT#78453

  Removed internal _not_impl method (Martin J. Evans).

  NOTE: The "old-style" DBD::DBM attributes 'dbm_ext' and 'dbm_lockfile'
    have been deprecated for several years and their use will now generate
    a warning.

=head2 Changes in DBI 1.622 (svn r15327) 6th June 2012

  Fixed lack of =encoding in non-ASCII pod docs. RT#77588

  Corrected typo in DBI::ProfileDumper thanks to Finn Hakansson.

=head2 Changes in DBI 1.621 (svn r15315) 21st May 2012

  Fixed segmentation fault when a thread is created from
    within another thread RT#77137, thanks to Dave Mitchell.
  Updated previous Changes to credit Booking.com for sponsoring
    Dave Mitchell's recent DBI optimization work.

=head2 Changes in DBI 1.620 (svn r15300) 25th April 2012

  Modified column renaming in fetchall_arrayref, added in 1.619,
    to work on column index numbers not names (an incompatible change).
  Reworked the fetchall_arrayref documentation.
  Hash slices in fetchall_arrayref now detect invalid column names.

=head2 Changes in DBI 1.619 (svn r15294) 23rd April 2012

  Fixed the connected method to stop showing the password in
    trace file (Martin J. Evans).
  Fixed _install_method to set CvFILE correctly
    thanks to sprout RT#76296
  Fixed SqlEngine "list_tables" thanks to David McMath
    and Norbert Gruener. RT#67223 RT#69260

  Optimized DBI method dispatch thanks to Dave Mitchell.
  Optimized driver access to DBI internal state thanks to Dave Mitchell.
  Optimized driver access to handle data thanks to Dave Mitchell.
    Dave's work on these optimizations was sponsored by Booking.com.
  Optimized fetchall_arrayref with hash slice thanks
    to Dagfinn Ilmari Mannsåker. RT#76520
  Allow renaming columns in fetchall_arrayref hash slices
    thanks to Dagfinn Ilmari Mannsåker. RT#76572
  Reserved snmp_ and tree_ for DBD::SNMP and DBD::TreeData

=head2 Changes in DBI 1.618 (svn r15170) 25rd February 2012

  Fixed compiler warnings in Driver_xst.h (Martin J. Evans)
  Fixed compiler warning in DBI.xs (H.Merijn Brand)
  Fixed Gofer tests failing on Windows RT74975 (Manoj Kumar)
  Fixed my_ctx compile errors on Windows (Dave Mitchell)

  Significantly optimized method dispatch via cache (Dave Mitchell)
  Significantly optimized DBI internals for threads (Dave Mitchell)
    Dave's work on these optimizations was sponsored by Booking.com.
  Xsub to xsub calling optimization now enabled for threaded perls.
  Corrected typo in example in docs (David Precious)
  Added note that calling clone() without an arg may warn in future.
  Minor changes to the install_method() docs in DBI::DBD.
  Updated dbipport.h from Devel::PPPort 3.20

=head2 Changes in DBI 1.617 (svn r15107) 30th January 2012

  NOTE: The officially supported minimum perl version will change
  from perl 5.8.1 (2003) to perl 5.8.3 (2004) in a future release.
  (The last change, from perl 5.6 to 5.8.1, was announced
  in July 2008 and implemented in DBI 1.611 in April 2010.)

  Fixed ParamTypes example in the pod (Martin J. Evans)
  Fixed the definition of ArrayTupleStatus and remove confusion over
    rows affected in list context of execute_array (Martin J. Evans)
  Fixed sql_type_cast example and typo in errors (Martin J. Evans)
  Fixed Gofer error handling for keeperr methods like ping (Tim Bunce)
  Fixed $dbh->clone({}) RT73250 (Tim Bunce)
  Fixed is_nested_call logic error RT73118 (Reini Urban)

  Enhanced performance for threaded perls (Dave Mitchell, Tim Bunce)
    Dave's work on this optimization was sponsored by Booking.com.
  Enhanced and standardized driver trace level mechanism (Tim Bunce)
  Removed old code that was an inneffective attempt to detect
    people doing DBI->{Attrib}.
  Clear ParamValues on bind_param param count error RT66127 (Tim Bunce)
  Changed DBI::ProxyServer to require DBI at compile-time RT62672 (Tim Bunce)

  Added pod for default_user to DBI::DBD (Martin J. Evans)
  Added CON, ENC and DBD trace flags and extended 09trace.t (Martin J. Evans)
  Added TXN trace flags and applied CON and TXN to relevant methods (Tim Bunce)
  Added some more fetchall_arrayref(..., $maxrows) tests (Tim Bunce)
  Clarified docs for fetchall_arrayref called on an inactive handle.
  Clarified docs for clone method (Tim Bunce)
  Added note to DBI::Profile about async queries (Marcel Grünauer).
  Reserved spatialite_ as a driver prefix for DBD::Spatialite
  Reserved mo_ as a driver prefix for DBD::MO
  Updated link to the SQL Reunion 95 docs, RT69577 (Ash Daminato)
  Changed links for DBI recipes. RT73286 (Martin J. Evans)

=head2 Changes in DBI 1.616 (svn r14616) 30th December 2010

  Fixed spurious dbi_profile lines written to the log when
    profiling is enabled and a trace flag, like SQL, is used.
  Fixed to recognize SQL::Statement errors even if instantiated
    with RaiseError=0 (Jens Rehsack)
  Fixed RT#61513 by catching attribute assignment to tied table access
    interface (Jens Rehsack)
  Fixing some misbehavior of DBD::File when running within the Gofer
    server.
  Fixed compiler warnings RT#62640

  Optimized connect() to remove redundant FETCH of \%attrib values.
  Improved initialization phases in DBI::DBD::SqlEngine (Jens Rehsack)

  Added DBD::Gofer::Transport::corostream. An experimental proof-of-concept
    transport that enables asynchronous database calls with few code changes.
    It enables asynchronous use of DBI frameworks like DBIx::Class.

  Added additional notes on DBDs which avoid creating a statement in
    the do() method and the effects on error handlers (Martin J. Evans)
  Adding new attribute "sql_dialect" to DBI::DBD::SqlEngine to allow
    users control used SQL dialect (ANSI, CSV or AnyData), defaults to
    CSV (Jens Rehsack)
  Add documentation for DBI::DBD::SqlEngine attributes (Jens Rehsack)
  Documented dbd_st_execute return (Martin J. Evans)
  Fixed typo in InactiveDestroy thanks to Emmanuel Rodriguez.

=head2 Changes in DBI 1.615 (svn r14438) 21st September 2010

  Fixed t/51dbm_file for file/directory names with whitespaces in them
    RT#61445 (Jens Rehsack)
  Fixed compiler warnings from ignored hv_store result (Martin J. Evans)
  Fixed portability to VMS (Craig A. Berry)

=head2 Changes in DBI 1.614 (svn r14408) 17th September 2010

  Fixed bind_param () in DBI::DBD::SqlEngine (rt#61281)
  Fixed internals to not refer to old perl symbols that
    will no longer be visible in perl >5.13.3 (Andreas Koenig)
    Many compiled drivers are likely to need updating.
  Fixed issue in DBD::File when absolute filename is used as table name
    (Jens Rehsack)
  Croak manually when file after tie doesn't exists in DBD::DBM
    when it have to exists (Jens Rehsack)
  Fixed issue in DBD::File when users set individual file name for tables
    via f_meta compatibility interface - reported by H.Merijn Brand while
    working on RT#61168 (Jens Rehsack)

  Changed 50dbm_simple to simplify and fix problems (Martin J. Evans)
  Changed 50dbm_simple to skip aggregation tests when not using
    SQL::Statement (Jens Rehsack)
  Minor speed improvements in DBD::File (Jens Rehsack)

  Added $h->{AutoInactiveDestroy} as simpler safer form of
    $h->{InactiveDestroy} (David E. Wheeler)
  Added ability for parallel testing "prove -j4 ..." (Jens Rehsack)
  Added tests for delete in DBM (H.Merijn Brand)
  Added test for absolute filename as table to 51dbm_file (Jens Rehsack)
  Added two initialization phases to DBI::DBD::SqlEngine (Jens Rehsack)
  Added improved developers documentation for DBI::DBD::SqlEngine
    (Jens Rehsack)
  Added guides how to write DBI drivers using DBI::DBD::SqlEngine
    or DBD::File (Jens Rehsack)
  Added register_compat_map() and table_meta_attr_changed() to
    DBD::File::Table to support clean fix of RT#61168 (Jens Rehsack)

=head2 Changes in DBI 1.613 (svn r14271) 22nd July 2010

  Fixed Win32 prerequisite module from PathTools to File::Spec.

  Changed attribute headings and fixed references in DBI pod (Martin J. Evans)
  Corrected typos in DBI::FAQ and DBI::ProxyServer (Ansgar Burchardt)

=head2 Changes in DBI 1.612 (svn r14254) 16th July 2010

NOTE: This is a minor release for the DBI core but a major release for
DBD::File and drivers that depend on it, like DBD::DBM and DBD::CSV.

This is also the first release where the bulk of the development work
has been done by other people. I'd like to thank (in no particular order)
Jens Rehsack, Martin J. Evans, and H.Merijn Brand for all their contributions.

  Fixed DBD::File's {ChopBlank} handling (it stripped \s instead of space
    only as documented in DBI) (H.Merijn Brand)
  Fixed DBD::DBM breakage with SQL::Statement (Jens Rehsack, fixes RT#56561)
  Fixed DBD::File file handle leak (Jens Rehsack)
  Fixed problems in 50dbm.t when running tests with multiple
    dbms (Martin J. Evans)
  Fixed DBD::DBM bugs found during tests (Jens Rehsack)
  Fixed DBD::File doesn't find files without extensions under some
    circumstances (Jens Rehsack, H.Merijn Brand, fixes RT#59038)

  Changed Makefile.PL to modernize with CONFLICTS, recommended dependencies
    and resources (Jens Rehsack)
  Changed DBI::ProfileDumper to rename any existing profile file by
    appending .prev, instead of overwriting it.
  Changed DBI::ProfileDumper::Apache to work in more configurations
    including vhosts using PerlOptions +Parent.
  Add driver_prefix method to DBI (Jens Rehsack)

  Added more tests to 50dbm_simple.t to prove optimizations in
    DBI::SQL::Nano and SQL::Statement (Jens Rehsack)
  Updated tests to cover optional installed SQL::Statement (Jens Rehsack)
  Synchronize API between SQL::Statement and DBI::SQL::Nano (Jens Rehsack)
  Merged some optimizations from SQL::Statement into DBI::SQL::Nano
    (Jens Rehsack)
  Added basic test for DBD::File (H.Merijn Brand, Jens Rehsack)
  Extract dealing with Perl SQL engines from DBD::File into
    DBI::DBD::SqlEngine for better subclassing of 3rd party non-db DBDs
    (Jens Rehsack)

  Updated and clarified documentation for finish method (Tim Bunce).
  Changes to DBD::File for better English and hopefully better
    explanation (Martin J. Evans)
  Update documentation of DBD::DBM to cover current implementation,
    tried to explain some things better and changes most examples to
    preferred style of Merijn and myself (Jens Rehsack)
  Added developer documentation (including a roadmap of future plans)
    for DBD::File

=head2 Changes in DBI 1.611 (svn r13935) 29th April 2010

  NOTE: minimum perl version is now 5.8.1 (as announced in DBI 1.607)

  Fixed selectcol_arrayref MaxRows attribute to count rows not values
    thanks to Vernon Lyon.
  Fixed DBI->trace(0, *STDERR); (H.Merijn Brand)
    which tried to open a file named "*main::STDERR" in perl-5.10.x
  Fixes in DBD::DBM for use under threads (Jens Rehsack)

  Changed "Issuing rollback() due to DESTROY without explicit disconnect"
    warning to not be issued if ReadOnly set for that dbh.

  Added f_lock and f_encoding support to DBD::File (H.Merijn Brand)
  Added ChildCallbacks => { ... } to Callbacks as a way to
    specify Callbacks for child handles.
    With tests added by David E. Wheeler.
  Added DBI::sql_type_cast($value, $type, $flags) to cast a string value
    to an SQL type. e.g. SQL_INTEGER effectively does $value += 0;
    Has other options plus an internal interface for drivers.

  Documentation changes:
  Small fixes in the documentation of DBD::DBM (H.Merijn Brand)
  Documented specification of type casting behaviour for bind_col()
    based on DBI::sql_type_cast() and two new bind_col attributes
    StrictlyTyped and DiscardString. Thanks to Martin Evans.
  Document fetchrow_hashref() behaviour for functions,
    aliases and duplicate names (H.Merijn Brand)
  Updated DBI::Profile and DBD::File docs to fix pod nits
    thanks to Frank Wiegand.
  Corrected typos in Gopher documentation reported by Jan Krynicky.
  Documented the Callbacks attribute thanks to David E. Wheeler.
  Corrected the Timeout examples as per rt 50621 (Martin J. Evans).
  Removed some internal broken links in the pod (Martin J. Evans)
  Added Note to column_info for drivers which do not
    support it (Martin J. Evans)
  Updated dbipport.h to Devel::PPPort 3.19 (H.Merijn Brand)

=head2 Changes in DBI 1.609 (svn r12816) 8th June 2009

  Fixes to DBD::File (H.Merijn Brand)
    added f_schema attribute
    table names case sensitive when quoted, insensitive when unquoted
    workaround a bug in SQL::Statement (temporary fix) related
      to the "You passed x parameters where y required" error

  Added ImplementorClass and Name info to the "Issuing rollback() due to
    DESTROY without explicit disconnect" warning to identify the handle.
    Applies to compiled drivers when they are recompiled.
  Added DBI->visit_handles($coderef) method.
  Added $h->visit_child_handles($coderef) method.
  Added docs for column_info()'s COLUMN_DEF value.
  Clarified docs on stickyness of data type via bind_param().
  Clarified docs on stickyness of data type via bind_col().

=head2 Changes in DBI 1.608 (svn r12742) 5th May 2009

  Fixes to DBD::File (H.Merijn Brand)
    bind_param () now honors the attribute argument
    added f_ext attribute
    File::Spec is always required. (CORE since 5.00405)
    Fail and set errstr on parameter count mismatch in execute ()
  Fixed two small memory leaks when running in mod_perl
    one in DBI->connect and one in DBI::Gofer::Execute.
    Both due to "local $ENV{...};" leaking memory.
  Fixed DBD_ATTRIB_DELETE macro for driver authors
    and updated DBI::DBD docs thanks to Martin J. Evans.
  Fixed 64bit issues in trace messages thanks to Charles Jardine.
  Fixed FETCH_many() method to work with drivers that incorrectly return
    an empty list from $h->FETCH. Affected gofer.

  Added 'sqlite_' as registered prefix for DBD::SQLite.
  Corrected many typos in DBI docs thanks to Martin J. Evans.
  Improved DBI::DBD docs thanks to H.Merijn Brand.

=head2 Changes in DBI 1.607 (svn r11571) 22nd July 2008

  NOTE: Perl 5.8.1 is now the minimum supported version.
  If you need support for earlier versions send me a patch.

  Fixed missing import of carp in DBI::Gofer::Execute.

  Added note to docs about effect of execute(@empty_array).
  Clarified docs for ReadOnly thanks to Martin Evans.

=head2 Changes in DBI 1.605 (svn r11434) 16th June 2008

  Fixed broken DBIS macro with threads on big-endian machines
    with 64bit ints but 32bit pointers. Ticket #32309.
  Fixed the selectall_arrayref, selectrow_arrayref, and selectrow_array
    methods that get embedded into compiled drivers to use the
    inner sth handle when passed a $sth instead of an sql string.
    Drivers will need to be recompiled to pick up this change.
  Fixed leak in neat() for some kinds of values thanks to Rudolf Lippan.
  Fixed DBI::PurePerl neat() to behave more like XS neat().

  Increased default $DBI::neat_maxlen from 400 to 1000.
  Increased timeout on tests to accommodate very slow systems.
  Changed behaviour of trace levels 1..4 to show less information
    at lower levels.
  Changed the format of the key used for $h->{CachedKids}
    (which is undocumented so you shouldn't depend on it anyway)
  Changed gofer error handling to avoid duplicate error text in errstr.
  Clarified docs re ":N" style placeholders.
  Improved gofer retry-on-error logic and refactored to aid subclassing.
  Improved gofer trace output in assorted ways.

  Removed the beeps "\a" from Makefile.PL warnings.
  Removed check for PlRPC-modules from Makefile.PL

  Added sorting of ParamValues reported by ShowErrorStatement
    thanks to to Rudolf Lippan.
  Added cache miss trace message to DBD::Gofer transport class.
  Added $drh->dbixs_revision method.
  Added explicit LICENSE specification (perl) to META.yaml

=head2 Changes in DBI 1.604 (svn rev 10994) 24th March 2008

  Fixed fetchall_arrayref with $max_rows argument broken in 1.603,
    thanks to Greg Sabino Mullane.
  Fixed a few harmless compiler warnings on cygwin.

=head2 Changes in DBI 1.603

  Fixed pure-perl fetchall_arrayref with $max_rows argument
    to not error when fetching after all rows already fetched.
    (Was fixed for compiled drivers back in DBI 1.31.)
    Thanks to Mark Overmeer.
  Fixed C sprintf formats and casts, fixing compiler warnings.

  Changed dbi_profile() to accept a hash of profiles and apply to all.
  Changed gofer stream transport to improve error reporting.
  Changed gofer test timeout to avoid spurious failures on slow systems.

  Added options to t/85gofer.t so it's more useful for manual testing.

=head2 Changes in DBI 1.602 (svn rev 10706)  8th February 2008

  Fixed potential coredump if stack reallocated while calling back
    into perl from XS code. Thanks to John Gardiner Myers.
  Fixed DBI::Util::CacheMemory->new to not clear the cache.
  Fixed avg in DBI::Profile as_text() thanks to Abe Ingersoll.
  Fixed DBD::DBM bug in push_names thanks to J M Davitt.
  Fixed take_imp_data for some platforms thanks to Jeffrey Klein.
  Fixed docs tie'ing CacheKids (ie LRU cache) thanks to Peter John Edwards.

  Expanded DBI::DBD docs for driver authors thanks to Martin Evans.
  Enhanced t/80proxy.t test script.
  Enhanced t/85gofer.t test script thanks to Stig.
  Enhanced t/10examp.t test script thanks to David Cantrell.
  Documented $DBI::stderr as the default value of err for internal errors.

  Gofer changes:
    track_recent now also keeps track of N most recent errors.
    The connect method is now also counted in stats.

=head2 Changes in DBI 1.601 (svn rev 10103),  21st October 2007

  Fixed t/05thrclone.t to work with Test::More >= 0.71
    thanks to Jerry D. Hedden and Michael G Schwern.
  Fixed DBI for VMS thanks to Peter (Stig) Edwards.

  Added client-side caching to DBD::Gofer. Can use any cache with
    get($k)/set($k,$v) methods, including all the Cache and Cache::Cache
    distribution modules plus Cache::Memcached, Cache::FastMmap etc.
    Works for all transports. Overridable per handle.

  Added DBI::Util::CacheMemory for use with DBD::Gofer caching.
    It's a very fast and small strict subset of Cache::Memory.

=head2 Changes in DBI 1.59 (svn rev 9874),  23rd August 2007

  Fixed DBI::ProfileData to unescape headers lines read from data file.
  Fixed DBI::ProfileData to not clobber $_, thanks to Alexey Tourbin.
  Fixed DBI::SQL::Nano to not clobber $_, thanks to Alexey Tourbin.
  Fixed DBI::PurePerl to return undef for ChildHandles if weaken not available.
  Fixed DBD::Proxy disconnect error thanks to Philip Dye.
  Fixed DBD::Gofer::Transport::Base bug (typo) in timeout code.
  Fixed DBD::Proxy rows method thanks to Philip Dye.
  Fixed dbiprof compile errors, thanks to Alexey Tourbin.
  Fixed t/03handle.t to skip some tests if ChildHandles not available.

  Added check_response_sub to DBI::Gofer::Execute

=head2 Changes in DBI 1.58 (svn rev 9678),  25th June 2007

  Fixed code triggering fatal error in bleadperl, thanks to Steve Hay.
  Fixed compiler warning thanks to Jerry D. Hedden.
  Fixed t/40profile.t to use int(dbi_time()) for systems like Cygwin where
    time() seems to be rounded not truncated from the high resolution time.
  Removed dump_results() test from t/80proxy.t.

=head2 Changes in DBI 1.57 (svn rev 9639),  13th June 2007

  Note: this release includes a change to the DBI::hash() function which will
  now produce different values than before *if* your perl was built with 64-bit
  'int' type (i.e. "perl -V:intsize" says intsize='8').  It's relatively rare
  for perl to be configured that way, even on 64-bit systems.

  Fixed XS versions of select*_*() methods to call execute()
    fetch() etc., with inner handle instead of outer.
  Fixed execute_for_fetch() to not cache errstr values
    thanks to Bart Degryse.
  Fixed unused var compiler warning thanks to JDHEDDEN.
  Fixed t/86gofer_fail tests to be less likely to fail falsely.

  Changed DBI::hash to return 'I32' type instead of 'int' so results are
    portable/consistent regardless of size of the int type.
  Corrected timeout example in docs thanks to Egmont Koblinger.
  Changed t/01basic.t to warn instead of failing when it detects
    a problem with Math::BigInt (some recent versions had problems).

  Added support for !Time and !Time~N to DBI::Profile Path. See docs.
  Added extra trace info to connect_cached thanks to Walery Studennikov.
  Added non-random (deterministic) mode to DBI_GOFER_RANDOM mechanism.
  Added DBIXS_REVISION macro that drivers can use.
  Added more docs for private_attribute_info() method.

  DBI::Profile changes:
    dbi_profile() now returns ref to relevant leaf node.
    Don't profile DESTROY during global destruction.
    Added as_node_path_list() and as_text() methods.
  DBI::ProfileDumper changes:
    Don't write file if there's no profile data.
    Uses full natural precision when saving data (was using %.6f)
    Optimized flush_to_disk().
    Locks the data file while writing.
    Enabled filename to be a code ref for dynamic names.
  DBI::ProfileDumper::Apache changes:
    Added Quiet=>1 to avoid write to STDERR in flush_to_disk().
    Added Dir=>... to specify a writable destination directory.
    Enabled DBI_PROFILE_APACHE_LOG_DIR for mod_perl 1 as well as 2.
    Added parent pid to default data file name.
  DBI::ProfileData changes:
    Added DeleteFiles option to rename & delete files once read.
    Locks the data files while reading.
    Added ability to sort by Path elements.
  dbiprof changes:
    Added --dumpnodes and --delete options.
  Added/updated docs for both DBI::ProfileDumper && ::Apache.

=head2 Changes in DBI 1.56 (svn rev 9660),  18th June 2007

  Fixed printf arg warnings thanks to JDHEDDEN.
  Fixed returning driver-private sth attributes via gofer.

  Changed pod docs docs to use =head3 instead of =item
    so now in html you get links to individual methods etc.
  Changed default gofer retry_limit from 2 to 0.
  Changed tests to workaround Math::BigInt broken versions.
  Changed dbi_profile_merge() to dbi_profile_merge_nodes()
    old name still works as an alias for the new one.
  Removed old DBI internal sanity check that's no longer valid
    causing "panic: DESTROY (dbih_clearcom)" when tracing enabled

  Added DBI_GOFER_RANDOM env var that can be use to trigger random
    failures and delays when executing gofer requests. Designed to help
    test automatic retry on failures and timeout handling.
  Added lots more docs to all the DBD::Gofer and DBI::Gofer classes.

=head2 Changes in DBI 1.55 (svn rev 9504),  4th May 2007

  Fixed set_err() so HandleSetErr hook is executed reliably, if set.
  Fixed accuracy of profiling when perl configured to use long doubles.
  Fixed 42prof_data.t on fast systems with poor timers thanks to Malcolm Nooning.
  Fixed potential corruption in selectall_arrayref and selectrow_arrayref
    for compiled drivers, thanks to Rob Davies.
    Rebuild your compiled drivers after installing DBI.

  Changed some handle creation code from perl to C code,
    to reduce handle creation cost by ~20%.
  Changed internal implementation of the CachedKids attribute
    so it's a normal handle attribute (and initially undef).
  Changed connect_cached and prepare_cached to avoid a FETCH method call,
    and thereby reduced cost by ~5% and ~30% respectively.
  Changed _set_fbav to not croak when given a wrongly sized array,
    it now warns and adjusts the row buffer to match.
  Changed some internals to improve performance with threaded perls.
  Changed DBD::NullP to be slightly more useful for testing.
  Changed File::Spec prerequisite to not require a minimum version.
  Changed tests to work with other DBMs thanks to ZMAN.
  Changed ex/perl_dbi_nulls_test.pl to be more descriptive.

  Added more functionality to the (undocumented) Callback mechanism.
    Callbacks can now elect to provide a value to be returned, in which case
    the method won't be called. A callback for "*" is applied to all methods
    that don't have their own callback.
  Added $h->{ReadOnly} attribute.
  Added support for DBI Profile Path to contain refs to scalars
    which will be de-ref'd for each profile sample.
  Added dbilogstrip utility to edit DBI logs for diff'ing (gets installed)
  Added details for SQLite 3.3 to NULL handling docs thanks to Alex Teslik.
  Added take_imp_data() to DBI::PurePerl.

  Gofer related changes:
    Fixed gofer pipeone & stream transports to avoid risk of hanging.
    Improved error handling and tracing significantly.
    Added way to generate random 1-in-N failures for methods.
    Added automatic retry-on-error mechanism to gofer transport base class.
    Added tests to show automatic retry mechanism works a treat!
    Added go_retry_hook callback hook so apps can fine-tune retry behaviour.
    Added header to request and response packets for sanity checking
      and to enable version skew between client and server.
    Added forced_single_resultset, max_cached_sth_per_dbh and max_cached_dbh_per_drh
      to gofer executor config.
    Driver-private methods installed with install_method are now proxied.
    No longer does a round-trip to the server for methods it knows
      have not been overridden by the remote driver.
    Most significant aspects of gofer behaviour are controlled by policy mechanism.
    Added policy-controlled caching of results for some methods, such as schema metadata.
    The connect_cached and prepare_cached methods cache on client and server.
    The bind_param_array and execute_array methods are now supported.
    Worked around a DBD::Sybase bind_param bug (which is fixed in DBD::Sybase 1.07)
    Added goferperf.pl utility (doesn't get installed).
    Many other assorted Gofer related bug fixes, enhancements and docs.
    The http and mod_perl transports have been remove to their own distribution.
    Client and server will need upgrading together for this release.

=head2 Changes in DBI 1.54 (svn rev 9157),  23rd February 2007

  NOTE: This release includes the 'next big thing': DBD::Gofer.
  Take a look!

  WARNING: This version has some subtle changes in DBI internals.
  It's possible, though doubtful, that some may affect your code.
  I recommend some extra testing before using this release.
  Or perhaps I'm just being over cautious...

  Fixed type_info when called for multiple dbh thanks to Cosimo Streppone.
  Fixed compile warnings in bleadperl on freebsd-6.1-release
    and solaris 10g thanks to Philip M. Gollucci.
  Fixed to compile for perl built with -DNO_MATHOMS thanks to Jerry D. Hedden.
  Fixed to work for bleadperl (r29544) thanks to Nicholas Clark.
    Users of Perl >= 5.9.5 will require DBI >= 1.54.
  Fixed rare error when profiling access to $DBI::err etc tied variables.
  Fixed DBI::ProfileDumper to not be affected by changes to $/ and $,
    thanks to Michael Schwern.

  Changed t/40profile.t to skip tests for perl < 5.8.0.
  Changed setting trace file to no longer write "Trace file set" to new file.
  Changed 'handle cleared whilst still active' warning for dbh
    to only be given for dbh that have active sth or are not AutoCommit.
  Changed take_imp_data to call finish on all Active child sth.
  Changed DBI::PurePerl trace() method to be more consistent.
  Changed set_err method to effectively not append to errstr if the new errstr
    is the same as the current one.
  Changed handle factory methods, like connect, prepare, and table_info,
    to copy any error/warn/info state of the handle being returned
    up into the handle the method was called on.
  Changed row buffer handling to not alter NUM_OF_FIELDS if it's
    inconsistent with number of elements in row buffer array.
  Updated DBI::DBD docs re handling multiple result sets.
  Updated DBI::DBD docs for driver authors thanks to Ammon Riley
    and Dean Arnold.
  Updated column_info docs to note that if a table doesn't exist
    you get an sth for an empty result set and not an error.

  Added new DBD::Gofer 'stateless proxy' driver and framework,
    and the DBI test suite is now also executed via DBD::Gofer,
    and DBD::Gofer+DBI::PurePerl, in addition to DBI::PurePerl.
  Added ability for trace() to support filehandle argument,
    including tracing into a string, thanks to Dean Arnold.
  Added ability for drivers to implement func() method
    so proxy drivers can proxy the func method itself.
  Added SQL_BIGINT type code (resolved to the ODBC/JDBC value (-5))
  Added $h->private_attribute_info method.

=head2 Changes in DBI 1.53 (svn rev 7995),   31st October 2006

  Fixed checks for weaken to work with early 5.8.x versions
  Fixed DBD::Proxy handling of some methods, including commit and rollback.
  Fixed t/40profile.t to be more insensitive to long double precision.
  Fixed t/40profile.t to be insensitive to small negative shifts in time
    thanks to Jamie McCarthy.
  Fixed t/40profile.t to skip tests for perl < 5.8.0.
  Fixed to work with current 'bleadperl' (~5.9.5) thanks to Steve Peters.
    Users of Perl >= 5.9.5 will require DBI >= 1.53.
  Fixed to be more robust against drivers not handling multiple result
    sets properly, thanks to Gisle Aas.

  Added array context support to execute_array and execute_for_fetch
    methods which returns executed tuples and rows affected.
  Added Tie::Cache::LRU example to docs thanks to Brandon Black.

=head2 Changes in DBI 1.52 (svn rev 6840),   30th July 2006

  Fixed memory leak (per handle) thanks to Nicholas Clark and Ephraim Dan.
  Fixed memory leak (16 bytes per sth) thanks to Doru Theodor Petrescu.
  Fixed execute_for_fetch/execute_array to RaiseError thanks to Martin J. Evans.
  Fixed for perl 5.9.4. Users of Perl >= 5.9.4 will require DBI >= 1.52.

  Updated DBD::File to 0.35 to match the latest release on CPAN.

  Added $dbh->statistics_info specification thanks to Brandon Black.

  Many changes and additions to profiling:
    Profile Path can now uses sane strings instead of obscure numbers,
    can refer to attributes, assorted magical values, and even code refs!
    Parsing of non-numeric DBI_PROFILE env var values has changed.
    Changed DBI::Profile docs extensively - many new features.
    See DBI::Profile docs for more information.

=head2 Changes in DBI 1.51 (svn rev 6475),   6th June 2006

  Fixed $dbh->clone method 'signature' thanks to Jeffrey Klein.
  Fixed default ping() method to return false if !$dbh->{Active}.
  Fixed t/40profile.t to be insensitive to long double precision.
  Fixed for perl 5.8.0's more limited weaken() function.
  Fixed DBD::Proxy to not alter $@ in disconnect or AUTOLOADd methods.
  Fixed bind_columns() to use return set_err(...) instead of die()
    to report incorrect number of parameters, thanks to Ben Thul.
  Fixed bind_col() to ignore undef as bind location, thanks to David Wheeler.
  Fixed for perl 5.9.x for non-threaded builds thanks to Nicholas Clark.
    Users of Perl >= 5.9.x will require DBI >= 1.51.
  Fixed fetching of rows as hash refs to preserve utf8 on field names
    from $sth->{NAME} thanks to Alexey Gaidukov.
  Fixed build on Win32 (dbd_postamble) thanks to David Golden.

  Improved performance for thread-enabled perls thanks to Gisle Aas.
  Drivers can now use PERL_NO_GET_CONTEXT thanks to Gisle Aas.
