DBI::Changes(3)
✨ NAME ✨
okay so. this is DBI::Changes — section 3 of the manual, hi bestie 💖 — and it is literally just the list. The whole list. Every significant change that has ever landed in the DBI, newest at the top, oldest at the bottom, with every CVE, every issue number, and every single person who sent a patch getting their name in lights ✨
Think of it as the group chat scrollback for a module that has genuinely been through it. Not me being dramatic, it's just true 💅
🎀 Changes in DBI 1.656 - 17 Oct 2026
- Re-add conflicts to
cpanfile. (WIP) — it's giving "work in progress", she said what she said 💀 - Remove lock file on end of scope
- Prevent
dbi_profilecrash (CVE-2026-108518) (Henrik Teichmann) - Memory corruption via
selectrow_array+ SQLite UDF (issue#98) - Fix
errstrwhendbm_updatable_keyattribute forDBD::DBMis set to2(croak) on Perl versions <v5.13.2 - Fix emit warnings when
dbm_updatable_keyattribute forDBD::DBMis set to1(carp) - Fix lock file not removed when
DBD::DBMcheck for bad serializer class fails. (CVE-2026-111879) - * WARNING: Next release will require perl-5.14 * - Main reason: Exception handling
🚨 bestie this is not a drill: the next release requires perl-5.14, and the main reason is exception handling. That's the whole reason. Upgrade era, no cap.
💫 Changes in DBI 1.655 - 30 Sep 2026
- Fix for C89 (Paul Howarth, PR#197)
- Ignore invalid handles consistently (detected by Raj)
🌸 Changes in DBI 1.654 - 25 Sep 2026
- Fix
DBI::sql_type_caston IV/NV (CVE-2026-88815) (reported by Raj) - Fix
FetchHashKeyNameon IV/NV (CVE-2026-88816) (reported by Raj) - Fix provided in META
🦋 Changes in DBI 1.653 - 09 Sep 2026
- Fix test for 32bit-perl (report in PR#189)
- Fix arbitrary module and file loading via
dbm_type/dbm_mldbm(CVE-2026-78030) - More META checking/updates
- Tighten symlink outside of
f_dir(CVE-2026-15392) check (reported by Raj) - CPAN.org does not forward email anymore
🎀 Changes in DBI 1.652 - 15 Aug 2026
- DBI now requires
perl-5.12, driven by CVE's - Fix test for perl configured without threads (caught by
perl-5.45.1) - Small doc fix, (issue#155), thanks Dick Franks
- Add suggested dependency (issue#145), thanks Dick Franks
- Force placeholder limit on
:#and:p#too (CVE-2026-73194) - Limit statements to 292 Mb in
preparse(CVE-2026-73193) - Add a security policy (issue#174)
- Add
dbm_updatable_keyattribute toDBD::DBMto configure how keys are updated - Fix missing import in
DBI::DBD::SqlEngine - Fix
!Caller2caller loss when$^Pis set (PR#184) (Thanks Paul)
🌈 Changes in DBI 1.651 - 14 Jul 2026
- Fix inverted comparisons for strings in
DBI::SQL::Nano(CVE-2026-15043) - Document that
IS NULLmatches empty strings inDBI::SQL::Nano - Fix
DBD::Fileto ensure that the table is not a symlink outside off_dir(CVE-2026-15392) - Fix an out-of-bounds error when a statement handle has no fields but the source row is not empty (CVE-2026-60082)
- Add an overridable upper bound
$MAX_PATH_DEPTHforDBI::ProfileData(CVE-2026-60081) - * WARNING: Next release will require perl-5.12 *
💜 Changes in DBI 1.650 - 06 Jul 2026
- Set a hard limit of 99999 on
?placeholders (CVE-2026-14739) - Fix out-of-bounds read in
preparseof SQL that starts with a comment (CVE-2026-14740) - Fix code injection via Profile DSN attribute or
DBI_PROFILEvariable (CVE-2026-14380) - Update
dbipport.htoDevel::PPPort-3.73 - Require
Test::More0.96(tests will otherwise fail on pristineperl-5.12)
🍓 Changes in DBI 1.649 - 22 Jun 2026
- Extra
Cwd::abs_pathrequired for Windows
🧚 Changes in DBI 1.648 - 04 Jun 2026
- Correct
sprintfusage fortrace_msg(issue#132) - Add
DBIXS_VERSION&DBIXS_RELEASEtodbixs_rev.h - Remove
-Wbad-function-cast - Fix possible stack overflow (old issue already noted by Tim) (CVE-2026-9698)
- Do not allow table source locations outside explicit given folders
DBD::SpongePRECISIONhandling (pr#12, pilcrow)- Fix possible buffer overflow in
preparse(CVE-2026-10879) - Skip mismatching
.so's (Greg, PR#81) - Fix cast warning in
dbi_get_state(Greg, PR#182)
⭐ Changes in DBI 1.647 - 20 Jan 2025
- Spellcheck
- Fix Makefile rules for Changes (Windows case issue)
- Another example to bind columns (issue#159)
- Fix
fetchall_arrayreffor undefinedNAME(issue#156)
💖 Changes in DBI 1.646 - 11 Jan 2025
- Remove "experimental" tag from
statistics_info ()(issue#134) - RT tickets moved to github issues (Dick Franks++) - All RT tickets now marked as resolved with reference to GitHub issue
- Fix install issue (issue #168)
🔥 Changes in DBI 1.645 - 03 Sep 2024
- Move developer tests to
xt/ - Make Changes match
CPAN::Changes::Specand regenDBI::Changesfrom that - Fixes for modern gcc i.c.w. recent perl (Daniël)
- Small code & doc cleanups for recent perl
- See TODO in
perldoc DBIto see where you can help with documentation!
👑 Changes in DBI 1.644 - 23 Aug 2024
- Update
Devel::PPPort, thanks to H.Merijn Brand - Fix CVE-2014-10401 and CVE-2014-10402 -
f_dirmight not exist inDBD::Fileconnections, thanks to Jens Rehsack & H.Merijn Brand - Do not check
gccversionon clang, thanks to Daniël van Eeden - Upgrade
GIMMEtoGIMME_V, thanks to Daniël van Eeden - Do not check with
JSON::XSwithperl-5.022and later, thanks to H.Merijn Brand Makefile.PLallowsgcc-10and up now, thanks to H.Merijn Brand (noted by XSven)- Do not leak
$_after callback execution (rt#144526, PR#117), thanks to Mauke - Switch from
DynaloadertoXSLoader(PR#94), thanks to Todd - Tim handed the project to the team
- Merge Pull Requests, resolve RT tickets, & resolve GH issues, thanks to many! Please check
gitlog
🦋 Changes in DBI 1.643 - 31 Jan 2020
- Fix memory corruption in XS functions when Perl stack is reallocated, thanks to Pali
- Fix calling
dbd_db_do6API function, thanks to Pali - Fix potentially calling
newSV(0)inmalloc_using_sv(), thanks to Pali - Fix order of XS
preparse()ps_acceptandps_returnargument 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::PPPortand 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
selectanddowrappers 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 toRaiseError, thanks to Pali
💫 Changes in DBI 1.642 - 28 Oct 2018
- Fix
'.'in@INCfor proxy test under parallel load, thanks to H.Merijn Brand. - Fix driver-related
croak()inDBI->connectto 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
🌸 Changes in DBI 1.641 - 19 Mar 2018
- Remove dependency on
Storable2.16introduced in DBI 1.639, thanks to Ribasushi #60 - Avoid compiler warnings in
Driver.xst#59, thanks to pali #59
🎀 Changes in DBI 1.640 - 28 Jan 2018
- Fix test
t/91_store_warning.tfor 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 newDBD::MariaDBdriver, thanks to pali #56
💜 Changes in DBI 1.639 - 28 Dec 2017
- Fix UTF-8 support for
warn/croakcalls within DBI internals, thanks to pali #53 - Fix dependency on
Storablefor perl older than 5.8.9, thanks to H.Merijn Brand. - Add
DBD::Memdriver, a pure-perl in-memory driver usingDBI::DBD::SqlEngine, thanks to Jens Rehsack #42 - Corrected missing semicolon in example in documentation, thanks to pali #55
🧚 Changes in DBI 1.637 - 16 Aug 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
- This could cause a crash if, for example, a db error contained a
- Fix extension detection for
DBD::Filerelated drivers - Fix tests for perl without dot in
@INCRT#120443 - Fix loss of error message on parent handle, thanks to charsbar #34
- Fix disappearing
$_inside callbacks, thanks to robschaber #47 - Fix dependency on
Storablefor perl older than 5.8.9 - Allow objects to be used as passwords without throwing an error, thanks to demerphq #40
- Allow
$sthNAME_*attributes to be set from Perl code, re #45 - Added support for
DBD::XMLSimplethanks to nigelhorne #38 - Documentation updates:
- Improve examples using
evalto be more correct, thanks to pali #39 - Add cautionary note to
prepare_cacheddocs 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
- Improve examples using
⭐ Changes in DBI 1.636 - 24 Apr 2016
- Fix compilation for threaded perl <= 5.12 broken in 1.635 RT#113955
- Revert change to
DBI::PurePerlDESTROYin 1.635 - Change
t/16destroy.tto 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
🍓 Changes in DBI 1.635 - 24 Apr 2016
- Fixed
RaiseError/PrintErrorfor UTF-8 errors/warnings. RT#102404 - Fixed cases where
ShowErrorStatementmight show incorrect Statement RT#97434 - Fixed
DBD::Goferfor UTF-8-enabledSTDIN/STDOUT, thanks to mauke PR#32 - Fixed
fetchall_arrayref({})behavior with no columns, thanks to Dan McGee PR#31 - Fixed tied
CachedKidsref leak in attribute cache by weakening, thanks to Michael Conrad RT#113852 - Fixed "panic: attempt to copy freed scalar" upon
commit()orrollback(), thanks to fbriere for detailed bug report RT#102791 - Ceased to ignore
DESTROYof outer handle inDBI::PurePerl - Treat undef in
DBI::ProfilePath as string "undef", thanks to fREW Schmidt RT#113298 - Fix
SQL::Nanoparser to ignore trailing semicolon, thanks to H.Merijn Brand. - Added
@ary = $dbh->selectall_array(...)— new method just dropped, huge thanks to Ed Avis RT#106411 🫶 - Added appveyor support (basically Travis but for windows, iykyk) — ty mbeijen PR#30 ✨
- Corrected spelling errors in pod — ty Gregor Herrmann RT#107838 📝
- Corrected and/or removed broken links to SQL standards — ty David Pottage RT#111437 🔗
- Corrected doc example to use
dbi:instead ofDBI:in DSN — ty Michael R. Davis RT#101181 💅 - Removed/updated broken links in docs — ty mbeijen PR#29
- Clarified docs for
DBI::hash($string) - Removed the ancient
DBI::FAQmodule RT#102714 🗑️ rip bestie - Fixed
t/pod.tto requireTest::Pod >= 1.41RT#101769
This release was developed at the Perl QA Hackathon 2016 <http://act.qa-hackathon.org/qa2016/> — and the way it happened at all is because so many sponsors were generous, no cap:
<https://www.fastmail.com> FastMail, <https://www.ziprecruiter.com> ZipRecruiter, <http://www.activestate.com> ActiveState, <http://www.opusvl.com> OpusVL, <https://www.strato.com> Strato, <http://www.surevoip.co.uk> SureVoIP, <http://www.cv-library.co.uk> CV-Library, <https://www.iinteractive.com/> Infinity, <https://opensource.careers/perl-careers/> Perl Careers, <https://www.mongodb.com> MongoDB, <https://www.thinkproject.com> thinkproject!, <https://www.dreamhost.com/> Dreamhost, <http://www.perl6.org/> Perl 6, <http://www.perl-services.de/> Perl Services, <https://www.evozon.com/> Evozon, <http://www.booking.com> Booking, <http://eligo.co.uk> Eligo, <http://www.oetiker.ch/> Oetiker+Partner, <http://capside.com/en/> CAPSiDE, <https://www.procura.nl/> Procura, <https://constructor.io/> Constructor.io, <https://metacpan.org/author/BABF> Robbie Bow, <https://metacpan.org/author/RSAVAGE> Ron Savage, <https://metacpan.org/author/ITCHARLIE> Charlie Gonzalez, <https://twitter.com/jscook2345> Justin Cook. 👑💖
🌈 Changes in DBI 1.634 - 03 Aug 2015
- Enabled strictures on all modules (Jose Luis Perez Diez) #22 — bestie, listen: this might cause new exceptions in existing code. Please take time for extra testing before deploying to production. like fr fr, test first 🙏
- Improved handling of row counts for compiled drivers, and let them return larger row counts (IV type) by defining new
*_ivmacros 🔢 - Fixed
quote_identifierthat was adding a trailing separator when there was only a catalog (Martin J. Evans) - Removed redundant
keys()call infetchall_arrayrefwith 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::SqlEnginebased 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 📜
✨ Changes in DBI 1.633 - 11 Jan 2015
- Fixed
selectrow_*refto returnundefon error in list context instead of an empty list. - Changed
t/42prof_data.tto be more informative - Changed
$sth->{TYPE}to beNUMERICin DBD::File drivers as per the DBI docs. NoteTYPE_NAMEis now also available. [H.Merijn Brand] - Fixed compilation error on bleadperl due
DEFSVno 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) andad2_prefix for DBD::AnyData2
🦋 Changes in DBI 1.632 - 09 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. scary ngl 💀
- Fixed DBD::PurePerl to not set
$sth->{Active}true by default — drivers are expected to set it true as needed. - Fixed
DBI::DBD::SqlEngineto complain loudly when prerequitedriver_prefixis 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_dirattribute RT#99508 [H.Merijn Brand] 🔒 - Changed
delete $h->{$key}to work for keys withprivate_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.
🫶 Changes in DBI 1.631 - 20 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_hashhandling of integererrRT#92172 [Dagfinn Ilmari] - Fixed use of
\Qvs\Eint/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_getinneatsvpvduring global destruction PR#10 [Matt Phillips]
🌸 Changes in DBI 1.630 - 28 Oct 2013
NOTE: This release enablesPrintWarnby default regardless of$^W. Your applications may generate more log messages than before. no cap, expect more log spam 📢
- Fixed
errfor newdrhto beundefnot to0[Martin J. Evans] - Fixed RT#83132 — moved
DBIstcf*constants to util export tag [Martin J. Evans] PrintWarnis now triggered by warnings recorded in methods likeSTOREthat don't clearerrRT#89015 [Tim Bunce]- Changed tracing to no longer show
quoteandquote_identifiercalls at trace level 1. - Changed DBD::Gofer
pingwhile disconnectedset_errfrom warn to info. - Clarified wording of log message when
erris cleared. - Changed bootstrap to use
$XS_VERSIONRT#89618 [Andreas Koenig] - Added
connect_cached.connectedCallback PR#3 [David E. Wheeler] - Clarified effect of refs in
connect_cachedattributes [David E. Wheeler] - Extended ReadOnly attribute docs for when the driver cannot ensure read only [Martin J. Evans]
- Corrected
SQL_BIGINTdocs to say ODBC value is used PR#5 [ilmari]
There was no DBI 1.629 release. (we don't talk about it 🙈)
🎀 Changes in DBI 1.628 - 22 Jul 2013
- Fixed missing fields on partial insert via
DBI::DBD::SqlEngineengines (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_::Statementhandling 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_searchattribute [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_colTYPEattribute is sticky [Martin J. Evans] - Fixed reference to
$sthinselectall_arrayrefdocs RT#84873 - Spelling fixes [Ville Skyttä]
- Changed
$VERSIONs to hardcoded strings [H.Merijn Brand]
💜 Changes in DBI 1.627 - 16 May 2013
- Fixed VERSION regression in
DBI::SQL::Nano[Tim Bunce]
⭐ Changes in DBI 1.626 - 15 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 int/48dbi_dbd_sqlengine.t[Tim Bunce]
🧚 Changes in DBI 1.625 (svn rev 15595) - 28 Mar 2013
- Fixed heap-use-after-free during global destruction RT#75614 — thanks to Reini Urban.
- Fixed ignoring
RootClassattribute duringconnect()byDBI::DBD::SqlEngine— reported in RT#84260 by Michael Schout
🍓 Changes in DBI 1.624 (svn rev 15576) - 22 Mar 2013
- Fixed Gofer for hash randomization in perl 5.17.10+ RT#84146
- Clarify docs for
can()re RT#83207
💅 Changes in DBI 1.623 (svn rev 15547) - 02 Jan 2013
- Fixed RT#64330 —
pingwipes outerrstr(Martin J. Evans). - Fixed RT#75868 — DBD::Proxy shouldn't call
connected()on the server. - Fixed RT#80474 — segfault in
DESTROYwith 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_infoinDBI::DBD::SqlEnginewhich 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_versionsdocs 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_dirbeing used inopendir(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
08keeperrfor 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_implmethod (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. ⚠️
🦋 Changes in DBI 1.622 (svn rev 15327) - 06 Jun 2012
- Fixed lack of
=encodingin non-ASCII pod docs. RT#77588 - Corrected typo in
DBI::ProfileDumperthanks to Finn Hakansson.
🔥 Changes in DBI 1.621 (svn rev 15315) - 21 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.
👑 Changes in DBI 1.620 (svn rev 15300) - 25 Apr 2012
- Modified column renaming in
fetchall_arrayref, added in 1.619, to work on column index numbers not names (an incompatible change). bestie this one will bite you, read it twice 😭 - Reworked the
fetchall_arrayrefdocumentation. - Hash slices in
fetchall_arrayrefnow detect invalid column names.
🌟 Changes in DBI 1.619 (svn rev 15294) - 23 Apr 2012
- Fixed the
connectedmethod so it stops putting the password in the trace file (Martin J. Evans). no more leaking, we love to see it 🙈 - Fixed
_install_methodso it setsCvFILEcorrectly — ty to sprout for RT#76296 - Fixed SqlEngine
"list_tables"— ty to David McMath and Norbert Gruener. RT#67223 RT#69260 - Optimized DBI method dispatch, ty to Dave Mitchell. ⚡
- Optimized driver access to DBI internal state, ty to Dave Mitchell.
- Optimized driver access to handle data, ty to Dave Mitchell.
- Dave's work on these optimizations was sponsored by Booking.com. iconic sponsor behavior fr fr
- Optimized
fetchall_arrayrefwith hash slice, ty to Dagfinn Ilmari Mannsåker. RT#76520 - Allow renaming columns in
fetchall_arrayrefhash slices, ty to Dagfinn Ilmari Mannsåker. RT#76572 - Reserved
snmp_andtree_for DBD::SNMP and DBD::TreeData
✨ Changes in DBI 1.618 (svn rev 15170) - 25 Feb 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_ctxcompile 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. 👀 future you has been warned - Minor changes to the
install_method()docs in DBI::DBD. - Updated
dbipport.hfrom Devel::PPPort 3.20
🦋 Changes in DBI 1.617 (svn rev 15107) - 30 Jan 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
ParamTypesexample in the pod (Martin J. Evans) - Fixed the definition of
ArrayTupleStatusand removed the confusion over rows affected in list context ofexecute_array(Martin J. Evans) - Fixed
sql_type_castexample and a 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_calllogic 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}. 💀 girl the attempt was NOT working - Clear
ParamValuesonbind_paramparam count error RT66127 (Tim Bunce) - Changed DBI::ProxyServer to require DBI at compile-time RT62672 (Tim Bunce)
- Added pod for
default_userto DBI::DBD (Martin J. Evans) - Added
CON,ENCandDBDtrace flags and extended09trace.t(Martin J. Evans) - Added
TXNtrace flags and appliedCONandTXNto relevant methods (Tim Bunce) - Added some more
fetchall_arrayref(..., $maxrows)tests (Tim Bunce) - Clarified docs for
fetchall_arrayrefcalled on an inactive handle. - Clarified docs for
clonemethod (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)
🌸 Changes in DBI 1.616 (svn rev 14616) - 30 Dec 2010
- Fixed spurious
dbi_profilelines written to the log when profiling is enabled and a trace flag, likeSQL, 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\%attribvalues. - 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. ✨ async girlies rise
- 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 of the used SQL dialect (ANSI,CSVorAnyData), defaults toCSV(Jens Rehsack) - Add documentation for DBI::DBD::SqlEngine attributes (Jens Rehsack)
- Documented
dbd_st_executereturn (Martin J. Evans) - Fixed typo in
InactiveDestroythanks to Emmanuel Rodriguez.
🎀 Changes in DBI 1.615 (svn rev 14438) - 21 Sep 2010
- Fixed
t/51dbm_filefor file/directory names with whitespaces in them RT#61445 (Jens Rehsack) - Fixed compiler warnings from ignored
hv_storeresult (Martin J. Evans) - Fixed portability to VMS (Craig A. Berry)
💜 Changes in DBI 1.614 (svn rev 14408) - 17 Sep 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. ⚠️ heads up bestie
- 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_metacompatibility interface — reported by H.Merijn Brand while working on RT#61168 (Jens Rehsack) - Changed
50dbm_simpleto simplify and fix problems (Martin J. Evans) - Changed
50dbm_simpleto skip aggregation tests when not using SQL::Statement (Jens Rehsack) - Minor speed improvements in DBD::File (Jens Rehsack)
- Added
$h->{AutoInactiveDestroy}as a simpler safer form of$h->{InactiveDestroy}(David E. Wheeler) 🫶 the safer sibling - 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()andtable_meta_attr_changed()to DBD::File::Table to support clean fix of RT#61168 (Jens Rehsack)
💅 Changes in DBI 1.613 (svn rev 14271) - 22 Jul 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)
🌈 Changes in DBI 1.612 (svn rev 14254) - 16 Jul 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. 💖 we stan a community effort
- Fixed DBD::File's
{ChopBlank}handling (it stripped\sinstead 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.twhen 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.PLto modernize withCONFLICTS, 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_prefixmethod to DBI (Jens Rehsack) - Added more tests to
50dbm_simple.tto 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
finishmethod (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 🗺️✨
⭐ Changes in DBI 1.611 (svn rev 13935) - 29 Apr 2010
NOTE: minimum perl version is now 5.8.1 (as announced in DBI 1.607)
- Fixed
selectcol_arrayrefMaxRowsattribute 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 😭 not the vibe - Fixes in DBD::DBM for use under threads (Jens Rehsack)
- Changed
"Issuing rollback() due to DESTROY without explicit disconnect"warning to not be issued ifReadOnlyset for that dbh. - Added
f_lockandf_encodingsupport to DBD::File (H.Merijn Brand) - Added
ChildCallbacks => { ... }toCallbacksas a way to specifyCallbacksfor 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_INTEGEReffectively 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 onDBI::sql_type_cast()and two newbind_colattributesStrictlyTypedandDiscardString. Thanks to Martin Evans. 🎀 - Document
fetchrow_hashref()behaviour for functions, aliases and duplicate names (H.Merijn Brand) - Updated
DBI::ProfileandDBD::Filedocs to fix pod nits thanks to Frank Wiegand. ✨ - Corrected typos in Gopher documentation reported by Jan Krynicky. 👀
- Documented the
Callbacksattribute thanks to David E. Wheeler. 🫶 - Corrected the
Timeoutexamples as per rt 50621 (Martin J. Evans). - Removed some internal broken links in the pod (Martin J. Evans)
- Added Note to
column_infofor drivers which do not support it (Martin J. Evans) - Updated
dbipport.htoDevel::PPPort3.19 (H.Merijn Brand)
🌈 Changes in DBI 1.609 (svn rev 12816) - 08 Jun 2009
- Fixes to
DBD::File(H.Merijn Brand)- added
f_schemaattribute - 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
- Added
ImplementorClassandNameinfo 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()'sCOLUMN_DEFvalue. - Clarified docs on stickyness of data type via
bind_param(). - Clarified docs on stickyness of data type via
bind_col().
🦋 Changes in DBI 1.608 (svn rev 12742) - 05 May 2009
- Fixes to
DBD::File(H.Merijn Brand)bind_param ()now honors the attribute argument- added
f_extattribute File::Specis always required. (CORE since 5.00405)- Fail and set
errstron parameter count mismatch inexecute ()
- Fixed two small memory leaks when running in mod_perl 💀 — one in
DBI->connectand one inDBI::Gofer::Execute. Both due to"local $ENV{...};"leaking memory. - Fixed
DBD_ATTRIB_DELETEmacro for driver authors and updatedDBI::DBDdocs 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 forDBD::SQLite. - Corrected many typos in DBI docs thanks to Martin J. Evans.
- Improved
DBI::DBDdocs thanks to H.Merijn Brand.
🌸 Changes in DBI 1.607 (svn rev 11571) - 22 Jul 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
carpinDBI::Gofer::Execute. - Added note to docs about effect of
execute(@empty_array). - Clarified docs for
ReadOnlythanks to Martin Evans.
💜 Changes in DBI 1.605 (svn rev 11434) - 16 Jun 2008
- Fixed broken
DBISmacro with threads on big-endian machines with 64bit ints but 32bit pointers. Ticket #32309. 😭 - Fixed the
selectall_arrayref,selectrow_arrayref, andselectrow_arraymethods that get embedded into compiled drivers to use the inner sth handle when passed a$sthinstead 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::PurePerlneat()to behave more like XSneat(). - Increased default
$DBI::neat_maxlenfrom400to1000. - Increased timeout on tests to accommodate very slow systems. 🐢
- Changed behaviour of trace levels
1..4to 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"fromMakefile.PLwarnings. 🤫 - Removed check for
PlRPC-modules fromMakefile.PL - Added sorting of
ParamValuesreported byShowErrorStatementthanks to to Rudolf Lippan. - Added cache miss trace message to
DBD::Gofertransport class. - Added
$drh->dbixs_revisionmethod. - Added explicit LICENSE specification (perl) to
META.yaml
🍓 Changes in DBI 1.604 (svn rev 10994) - 24 Mar 2008
- Fixed
fetchall_arrayrefwith$max_rowsargument broken in 1.603, thanks to Greg Sabino Mullane. 🙈 - Fixed a few harmless compiler warnings on cygwin.
⭐ Changes in DBI 1.603 - 22 Mar 2008
- Fixed pure-perl
fetchall_arrayrefwith$max_rowsargument 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
sprintfformats 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.tso it's more useful for manual testing.
🎀 Changes in DBI 1.602 (svn rev 10706) - 08 Feb 2008
- Fixed potential coredump if stack reallocated while calling back into perl from XS code. Thanks to John Gardiner Myers. 💀
- Fixed
DBI::Util::CacheMemory->newto not clear the cache. - Fixed
avginDBI::Profileas_text()thanks to Abe Ingersoll. - Fixed
DBD::DBMbug inpush_namesthanks to J M Davitt. - Fixed
take_imp_datafor some platforms thanks to Jeffrey Klein. - Fixed docs tie'ing
CacheKids(ie LRU cache) thanks to Peter John Edwards. - Expanded
DBI::DBDdocs for driver authors thanks to Martin Evans. - Enhanced
t/80proxy.ttest script. - Enhanced
t/85gofer.ttest script thanks to Stig. - Enhanced
t/10examp.ttest script thanks to David Cantrell. - Documented
$DBI::stderras the default value oferrfor internal errors. - Gofer changes:
track_recentnow also keeps track of N most recent errors.- The
connectmethod is now also counted in stats.
🧚 Changes in DBI 1.601 (svn rev 10103) - 21 Oct 2007
- Fixed
t/05thrclone.tto work withTest::More>=0.71thanks 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 withget($k)/set($k,$v)methods, including all theCacheandCache::Cachedistribution modules plusCache::Memcached,Cache::FastMmapetc. Works for all transports. Overridable per handle. ⚡ - Added
DBI::Util::CacheMemoryfor use withDBD::Gofercaching. It's a very fast and small strict subset ofCache::Memory.
💖 Changes in DBI 1.59 (svn rev 9874) - 23 Aug 2007
- Fixed
DBI::ProfileDatato unescape headers lines read from data file. - Fixed
DBI::ProfileDatato not clobber$_, thanks to Alexey Tourbin. - Fixed
DBI::SQL::Nanoto not clobber$_, thanks to Alexey Tourbin. - Fixed
DBI::PurePerlto return undef forChildHandlesifweakennot available. - Fixed
DBD::Proxydisconnect error thanks to Philip Dye. - Fixed
DBD::Gofer::Transport::Basebug (typo) in timeout code. - Fixed
DBD::Proxyrowsmethod thanks to Philip Dye. - Fixed
dbiprofcompile errors, thanks to Alexey Tourbin. - Fixed
t/03handle.tto skip some tests ifChildHandlesnot available. - Added
check_response_subtoDBI::Gofer::Execute
🦄 Changes in DBI 1.58 (svn rev 9678) - 25 Jun 2007
- Fixed code triggering fatal error in bleadperl, thanks to Steve Hay.
- Fixed compiler warning thanks to Jerry D. Hedden.
- Fixed
t/40profile.tto useint(dbi_time())for systems like Cygwin wheretime()seems to be rounded not truncated from the high resolution time. - Removed
dump_results()test fromt/80proxy.t.
👑 Changes in DBI 1.57 (svn rev 9639) - 13 Jun 2007
Note: this release includes a change to theDBI::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"saysintsize='8'). It's relatively rare for perl to be configured that way, even on 64-bit systems. ⚠️
- Fixed XS versions of
select*_*()methods to callexecute()fetch()etc., with inner handle instead of outer. - Fixed
execute_for_fetch()to not cacheerrstrvalues thanks to Bart Degryse. - Fixed unused var compiler warning thanks to JDHEDDEN.
- Fixed
t/86gofer_failtests to be less likely to fail falsely. - Changed
DBI::hashto 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.tto warn instead of failing when it detects a problem withMath::BigInt(some recent versions had problems). - Added support for
!Timeand!Time~NtoDBI::ProfilePath. See docs. - Added extra trace info to
connect_cachedthanks to Walery Studennikov. - Added non-random (deterministic) mode to
DBI_GOFER_RANDOMmechanism. - Added
DBIXS_REVISIONmacro that drivers can use. - Added more docs for
private_attribute_info()method. DBI::Profilechanges:dbi_profile()now returns ref to relevant leaf node.- Don't profile
DESTROYduring global destruction. - Added
as_node_path_list()andas_text()methods.
DBI::ProfileDumperchanges:- 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::Apachechanges:- Added
Quiet=>1to avoid write toSTDERRinflush_to_disk(). - Added
Dir=>...to specify a writable destination directory. - Enabled
DBI_PROFILE_APACHE_LOG_DIRfor mod_perl 1 as well as 2. - Added parent pid to default data file name.
- Added
DBI::ProfileDatachanges:- Added
DeleteFilesoption to rename & delete files once read. - Locks the data files while reading.
- Added ability to sort by
Pathelements.
- Added
dbiprofchanges:- Added
--dumpnodesand--deleteoptions.
- Added
- Added/updated docs for both
DBI::ProfileDumper&&::Apache.
🌟 Changes in DBI 1.56 (svn rev 9660) - 18 Jun 2007
- Fixed
printfarg warnings thanks to JDHEDDEN. - Fixed returning driver-private sth attributes via gofer.
- Changed the pod docs to use
=head3instead of=item, so now in html you actually get links to individual methods and all that good stuff. glow up ✨ - Changed the default gofer
retry_limitfrom2to0. (yes bestie, it moved, no cap) - Changed the tests to work around broken versions of
Math::BigInt. - Changed
dbi_profile_merge()todbi_profile_merge_nodes()— and don't stress, the old name still works as an alias for the new one 🫶 - Removed an old DBI internal sanity check that's no longer valid, which was causing
"panic: DESTROY (dbih_clearcom)"when tracing was enabled. bye felicia 💀 - Added the
DBI_GOFER_RANDOMenv var, which you can use to trigger random failures and delays when executing gofer requests. It's designed to help you test automatic retry on failures and timeout handling. chaos for science 🔥 - Added lots more docs to all the
DBD::GoferandDBI::Goferclasses. we love documentation in this house.
💖 Changes in DBI 1.55 (svn rev 9504) - 04 May 2007 💖
- Fixed
set_err()so theHandleSetErrhook is executed reliably, if it's set. periodt. - Fixed the accuracy of profiling when perl is configured to use long doubles.
- Fixed
42prof_data.ton fast systems with poor timers — big thanks to Malcolm Nooning 🙏 - Fixed potential corruption in
selectall_arrayrefandselectrow_arrayreffor compiled drivers, thanks to Rob Davies.
Heads up bestie: rebuild your compiled drivers after installing DBI, okay? do not skip this.
- Changed some handle creation code from perl to C code, to reduce handle creation cost by ~20%. slay 💅
- Changed the internal implementation of the
CachedKidsattribute so it's a normal handle attribute (and initiallyundef). - Changed
connect_cachedandprepare_cachedto avoid aFETCHmethod call, and thereby reduced cost by ~5% and ~30% respectively. the way that perf just went up 😭 - Changed
_set_fbavto 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::NullPto be slightly more useful for testing. - Changed the
File::Specprerequisite to not require a minimum version. - Changed the tests to work with other DBMs thanks to ZMAN.
- Changed
ex/perl_dbi_nulls_test.plto 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 the
$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 the
dbilogstriputility to edit DBI logs for diff'ing (it does get installed). - Added details for SQLite 3.3 to the NULL handling docs thanks to Alex Teslik.
- Added
take_imp_data()toDBI::PurePerl.
🦋 Gofer related changes: 🦋
- Fixed the gofer
pipeone&streamtransports to avoid risk of hanging. - Improved error handling and tracing significantly.
- Added a way to generate random 1-in-N failures for methods.
- Added an automatic retry-on-error mechanism to the gofer transport base class.
- Added tests to show the automatic retry mechanism works a treat!
- Added the
go_retry_hookcallback hook so apps can fine-tune retry behaviour. - Added a 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_dbhandmax_cached_dbh_per_drhto the gofer executor config. - Driver-private methods installed with
install_methodare now proxied. - No longer does a round-trip to the server for methods it knows have not been overridden by the remote driver. efficiency queen 👑
- Most significant aspects of gofer behaviour are controlled by the policy mechanism.
- Added policy-controlled caching of results for some methods, such as schema metadata.
- The
connect_cachedandprepare_cachedmethods cache on client and server. - The
bind_param_arrayandexecute_arraymethods are now supported. - Worked around a
DBD::Sybasebind_parambug (which is fixed inDBD::Sybase1.07). - Added the
goferperf.plutility (this one doesn't get installed). - Many other assorted Gofer related bug fixes, enhancements and docs.
- The
httpandmod_perltransports have been removed to their own distribution.
Real talk: client and server will need upgrading together for this release. no mixing, okay?
🎀 Changes in DBI 1.54 (svn rev 9157) - 23 Feb 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_infowhen called for multiple dbh thanks to Cosimo Streppone. - Fixed compile warnings in bleadperl on
freebsd-6.1-releaseandsolaris 10gthanks to Philip M. Gollucci. - Fixed to compile for perl built with
-DNO_MATHOMSthanks 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 a rare error when profiling access to
$DBI::erretc tied variables. - Fixed
DBI::ProfileDumperto not be affected by changes to$/and$,, thanks to Michael Schwern. - Changed
t/40profile.tto skip tests for perl < 5.8.0. - Changed setting the trace file to no longer write
"Trace file set"to the new file. - Changed the '
handle cleared whilst still active' warning for dbh to only be given for dbh that have active sth or are notAutoCommit. - Changed
take_imp_datato callfinishon allActivechild sth. - Changed the
DBI::PurePerltrace()method to be more consistent. - Changed the
set_errmethod to effectively not append to errstr if the new errstr is the same as the current one. - Changed handle factory methods, like
connect,prepare, andtable_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_FIELDSif it's inconsistent with the number of elements in the row buffer array. - Updated
DBI::DBDdocs re handling multiple result sets. - Updated
DBI::DBDdocs for driver authors thanks to Ammon Riley and Dean Arnold. - Updated
column_infodocs to note that if a table doesn't exist you get an sth for an empty result set and not an error. - Added a new
DBD::Gofer'stateless proxy' driver and framework, and the DBI test suite is now also executed viaDBD::Gofer, andDBD::Gofer+DBI::PurePerl, in addition toDBI::PurePerl. iconic ✨ - Added the ability for
trace()to support a filehandle argument, including tracing into a string, thanks to Dean Arnold. - Added the ability for drivers to implement the
func()method so proxy drivers can proxy thefuncmethod itself. - Added the
SQL_BIGINTtype code (resolved to the ODBC/JDBC value (-5)). - Added the
$h->private_attribute_infomethod.
🌸 Changes in DBI 1.53 (svn rev 7995) - 31 Oct 2006 🌸
- Fixed checks for
weakento work with early 5.8.x versions. - Fixed
DBD::Proxyhandling of some methods, includingcommitandrollback. - Fixed
t/40profile.tto be more insensitive to long double precision. - Fixed
t/40profile.tto be insensitive to small negative shifts in time thanks to Jamie McCarthy. - Fixed
t/40profile.tto 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_arrayandexecute_for_fetchmethods, which returns executed tuples and rows affected. - Added the
Tie::Cache::LRUexample to the docs thanks to Brandon Black.
💜 Changes in DBI 1.52 (svn rev 6840) - 30 Jul 2006 💜
- Fixed a memory leak (per handle) thanks to Nicholas Clark and Ephraim Dan.
- Fixed a memory leak (16 bytes per sth) thanks to Doru Theodor Petrescu.
- Fixed
execute_for_fetch/execute_arraytoRaiseErrorthanks to Martin J. Evans. - Fixed for perl 5.9.4.
Users of Perl >= 5.9.4 will require DBI >= 1.52.
- Updated
DBD::Fileto 0.35 to match the latest release on CPAN. - Added the
$dbh->statistics_infospecification thanks to Brandon Black.
🔥 Many changes and additions to profiling: 🔥
- Profile Path can now use sane strings instead of obscure numbers — it can refer to attributes, assorted magical values, and even code refs!
- Parsing of non-numeric
DBI_PROFILEenv var values has changed. - Changed
DBI::Profiledocs extensively — many new features. - See the
DBI::Profiledocs for more information.
⭐ Changes in DBI 1.51 (svn rev 6475) - 06 Jun 2006 ⭐
- Fixed the
$dbh->clonemethod 'signature' thanks to Jeffrey Klein. - Fixed the default
ping()method to return false if!$dbh->{Active}. - Fixed
t/40profile.tto be insensitive to long double precision. - Fixed for perl 5.8.0's more limited
weaken()function. - Fixed
DBD::Proxyto not alter$@indisconnector AUTOLOADd methods. - Fixed
bind_columns()to usereturn set_err(...)instead ofdie()to report an incorrect number of parameters, thanks to Ben Thul. - Fixed
bind_col()to ignoreundefas a 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 the 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_CONTEXTthanks to Gisle Aas.
Driver authors please read the notes in the DBI::DBD docs. iykyk 📖
- Changed the
DBI::Profileformat to always include a percentage — if not existing, then it uses the time between the first and last DBI call. - Changed
DBI::ProfileDatato be more forgiving of systems with unstable clocks (where time may go backwards occasionally). - Clarified the 'Subclassing the DBI' docs.
- Assorted minor changes to docs from comments on annocpan.org.
- Changed
Makefile.PLto avoid incompatible options for old gcc. - Added the 'fetch array of hash refs' example to the
selectall_arrayrefdocs thanks to Tom Schindl. - Added docs for
$sth->{ParamArrays}thanks to Martin J. Evans. - Added a reference to
$DBI::neat_maxlenin the TRACING section of docs. - Added the ability for DBI::Profile Path to include attributes and a summary of where the code was called from.
🧚 Changes in DBI 1.50 (svn rev 2307) - 13 Dec 2005 🧚
- Fixed
Makefile.PLoptions for a gcc bug introduced in 1.49. - Fixed handle magic order to keep
DBD::Oraclehappy. - Fixed
selectrow_arrayto return an empty list on error. - Changed
dbi_profile_merge()to be able to recurse and merge sub-trees of profile data. - Added documentation for
dbi_profile_merge(), including how to measure the time spent inside the DBI for an http request.
Changes in DBI 1.49 (svn rev 2287) - 29 Nov 2005 🎀
💅 Fixed
- Assorted attribute handling bugs in DBD::Proxy — cleaned all the way up, no crumbs.
croak()in DBD::NullP — huge thanks to Sergey Skvortsov 🫶- Handling of
take_imp_data()and thedbi_imp_dataattribute — fixed, fr fr. - Bugs in DBD::DBM — thank you Jeff Zucker 🌸
- A bug in DBI::ProfileDumper — thank you Sam Tregar ✨
pingin DBD::Proxy — thank you George Campbell 💖- A dangling ref in
$sthafter the parent$dbhgot destroyed 😭 shoutout toil@rol.rufor the bug report #13151. - Prerequisites now include Storable — thanks Michael Schwern 🦋
take_imp_datanow actually practical, which is the vibe we were going for.
🌈 Changed
- Now requires perl 5.6.1 (which, bestie, was already advertised back in 2003) — not 5.6.0.
- Internals got more strictly coded — thanks Andy Lester 👑
- The warning about multiple copies of
Driver.xstfound in@INCnow ignores duplicated directories — thanks Ed Avis. Driver.xstnow lets drivers define adbd_st_prepare_svfunction where the statement parameter is anSV. This means compiled drivers can support SQL strings that are UTF-8 🔥use DBInow only sets$DBI::connect_viaif it isn't already set.- Docs clarified on the pre-method clearing of err values.
⭐ Added
- DBI::ProfileData can now edit the profile path on loading 💫 which means you can aggregate different SQL statements into the same profile node — very handy when you're not using placeholders, or when you're working with multiple separate tables for the same thing (like
logtable_2005_11_28). $sth->{ParamTypes}specification — thanks Dean Arnold 🫶- The
$h->{Callbacks}attribute, which lets you hook code in when certain methods get called. For example:
$dbh->{Callbacks}->{prepare} = sub { ... };
With thanks to David Wheeler for the kick start 🌸
$h->{ChildHandles}(using weakrefs) — thanks Sam Tregar. It's been recoded in C so there's no significant performance impact, periodt 👑$h->{Type}docs (it returns'dr','db', or'st') 💖- A trace message in
DESTROYif InactiveDestroy is enabled. %drhs = DBI->installed_drivers();✨- DBI::ProfileDumper::Apache ported to mod_perl2 RC5+ — thanks Philip M. Golluci 🦋
Changes in DBI 1.48 (svn rev 928) - 14 Mar 2005 🍓
- Fixed DBI::DBD::Metadata generation of
type_info_all— thanks Steffen Goeldner. (Driver authors who have used it should rerun it, no cap 👀) - Updated docs for NULL Value placeholders — thanks Brian Campbell 💜
- Added multi-keyfield nested hash fetching to
fetchall_hashref()— thanks Zhuang (John) Li for polishing up my draft ✨ - Added registered driver prefixes:
amzn_for DBD::Amazon andyaswi_for DBD::Yaswi.
Changes in DBI 1.47 (svn rev 854) - 02 Feb 2005 🧚
- Fixed DBI::ProxyServer so it does not create pid files by default.
- References: Ubuntu Security Notice USN-70-1, CAN-2005-0077
- Thanks to Javier Fernández-Sanguino Peña from the Debian Security Audit Project, and Jonathan Leffler 🫶
- Fixed some tests so they work with older Test::More versions.
- Fixed setting
$DBI::err/errstrin DBI::PurePerl. - Fixed a potential undef warning from
connect_cached(). - Fixed
$DBI::lasthhandling forDESTROY, solasthpoints to the parent even ifDESTROYcalled other methods. - Fixed DBD::Proxy method calls so they don't alter
$@. - Fixed a DBD::File problem with the
encodingpragma — thanks Erik Rijkers. - Changed error handling so an undef
errstrdoesn't cause a warning. - Changed DBI::DBD docs to use
=head3/=head4pod — thanks Jonathan Leffler. Heads up: this may generate warnings for perl 5.6 ⚠️ - Changed DBI::PurePerl to set
autoflushon the trace filehandle. - Changed DBD::Proxy to treat Username as a local attribute, so a recent DBI version can be used with an old DBI::ProxyServer.
- Changed driver handle caching in DBD::File.
- Added
$GetInfoType{SQL_DATABASE_NAME}— thanks Steffen Goeldner 💖 - Updated docs to recommend some common DSN string attributes.
- Updated
connect_cached()docs with issues and suggestions. - Updated docs for NULL Value placeholders — thanks Brian Campbell.
- Updated docs for
primary_key_infoandprimary_keys. - Updated docs to clarify that the default
fetchrow_hashrefbehaviour — returning a ref to a new hash for each row — will not change. Iconic, staying exactly as it is 💅 - Updated
err/errstr/statedocs for DBD authors — thanks Steffen Goeldner. - Updated handle/attribute docs for DBD authors — thanks Steffen Goeldner.
- Corrected and updated LongReadLen docs — thanks Bart Lateur.
- Added DBD::JDBC as a registered driver 🌈
Changes in DBI 1.46 (svn rev 584) - 16 Nov 2004 🌸
- Fixed parsing bugs in DBI::SQL::Nano — thanks Jeff Zucker.
- Fixed a couple of bad links in docs — thanks Graham Barr.
- Fixed
test.plWin32 undef warning — thanks H.Merijn Brand & David Repko. - Fixed minor issues in DBI::DBD::Metadata — thanks Steffen Goeldner.
- Fixed DBI::PurePerl
neat()to use double quotes for utf8. - Changed the
execute_array()definition, and the default implementation, so it does not consider scalar values for execute tuple count. See docs 📖 - Changed DBD::File to enable ShowErrorStatement by default, which affects DBD::File subclasses such as DBD::CSV and DBD::DBM.
- Changed the
use DBI qw(:utils)tag to include$neat_maxlen. - Updated Roadmap and ToDo.
- Added
data_string_diff()data_string_desc()anddata_diff()utility functions to help diagnose Unicode issues. All of them can be imported via theuse DBI qw(:utils)tag ✨
Changes in DBI 1.45 (svn rev 480) - 06 Oct 2004 🦋
- Fixed DBI::DBD code for drivers that were broken in 1.44.
- Fixed
"Free to wrong pool"/"Attempt to free unreferenced scalar"inFETCH.
Changes in DBI 1.44 (svn rev 478) - 05 Oct 2004 💜
- Fixed build issues on VMS — thanks Jakob Snoer.
- Fixed the DBD::File
finish()method so it returns1— thanks Jan Dubois. - Fixed a rare core dump during global destruction — thanks Mark Jason Dominus 😭
- Fixed the risk of the utf8 flag persisting from one row to the next.
- Changed
bind_param_array()so it doesn't require all bind arrays to have the same number of elements. - Changed
bind_param_array()to error if the placeholder number is<= 0. - Changed the
execute_array()definition, and default implementation, to effectively NULL-pad shorter bind arrays. - Changed
execute_array()to return"0E0"for0, as per the docs. - Changed the
execute_for_fetch()definition, and default implementation, to return"0E0"for0— just likeexecute()andexecute_array(). - Changed the Test::More prerequisite to Test::Simple (which is also the name of the distribution both are packaged in) to work around ppm behaviour.
- Corrected docs to say that get/set of an unknown attribute generates a warning and is no longer fatal. Thanks to Vadim.
- Corrected the
fetchall_arrayref()docs example — thanks Drew Broadley. - Added
$h1->swap_inner_handle($h2)sponsored by BizRate.com 👑
Changes in DBI 1.43 (svn rev 377) - 02 Jul 2004 🎀
- Fixed
connect()andconnect_cached()RaiseError/PrintError, which would sometimes show"(no error string)"as the error 💀 - Fixed a compiler warning — thanks Paul Marquess.
- Fixed the
"trace level set to"trace message — thanks H.Merijn Brand. - Fixed DBD::DBM
$dbh->{dbm_tables}->{...}to be keyed by the table name, not the file name — thanks Jeff Zucker. - Fixed
last_insert_id(...)— thanks Rudy Lippan. - Fixed the propagation of scalar/list context into proxied methods.
- Fixed DBI::Profile::DESTROY to not alter
$@. - Fixed DBI::ProfileDumper
new()docs — thanks Michael Schwern. - Fixed
_load_classto propagate$@— thanks Drew Taylor. - Fixed compile warnings on Win32 — thanks Robert Baron.
- Fixed a problem building with recent versions of MakeMaker.
- Fixed DBD::Sponge so it doesn't generate a warning with threads.
- Fixed DBI_AUTOPROXY to work more than once — thanks Steven Hirsch.
- Changed TraceLevel 1 to not show recursive/nested calls.
- Changed getting or setting an invalid attribute so it's no longer a fatal error — it generates a warning instead.
- Changed
selectall_arrayref()to callfinish()if$attr->{MaxRows}is defined. - Changed all tests to use Test::More and enhanced the tests — thanks to Stevan Little and Andy Lester. See
http://qa.perl.org/phalanx/ - Changed the Test::More minimum prerequisite version to
0.40(2001). - Changed the DBI::Profile header to include the date and time.
- Added the
DBI->parse_dsn($dsn)method. - Added a warning if the build directory path contains white space.
- Added docs for
parse_trace_flags()andparse_trace_flag(). - Removed the
"may change"warnings from the docs fortable_info(),primary_key_info(), andforeign_key_info()methods — those are settled now, bestie 💅
Changes in DBI 1.42 (svn rev 222) - 12 Mar 2004 🌈
- Fixed
$sth->{NUM_OF_FIELDS}of a non-executed statement handle to beundef, as per the docs (it used to be0). - Fixed
t/41prof_dump.tto work with perl5.9.1. - Fixed the
DBD_ATTRIB_DELETEmacro — thanks Marco Paskamp. - Fixed DBI::PurePerl
looks_like_number()and$DBI::rows. - Fixed
ref($h)->can("foo")so it doesn't croak. - Changed the attributes (
NAME,TYPEetc) of a non-executed statement handle to beundefinstead of triggering an error. - Changed ShowErrorStatement to apply to more
$dbhmethods. - Changed the DBI_TRACE env var so it just does this at load time:
DBI->trace(split '=', $ENV{DBI_TRACE}, 2);
- Improved the
"invalid number of parameters"error message. - Added DBI::common as a base class for DBI::db, DBD::st etc.
- Moved methods common to all handles into DBI::common.
🔥 Major tracing enhancement:
- Added
$h->parse_trace_flags("foo|SQL|7")to map a group of trace flags into the corresponding trace flag bits. - Added automatic calling of
parse_trace_flags()if you set the trace level to a non-numeric value:
$h->{TraceLevel}="foo|SQL|7"; $h->trace("foo|SQL|7");
DBI->connect("dbi:Driver(TraceLevel=SQL|foo):...", ...);
Currently no trace flags have been defined 👀
- Added to, and reworked, the trace documentation.
- Added
dbivport.hfor driver authors to use.
👑 Major driver additions that Jeff Zucker and I have been working on:
- Added DBI::SQL::Nano, a 'smaller than micro' SQL parser with an SQL::Statement compatible API. If SQL::Statement is installed then DBI::SQL::Nano becomes an empty subclass of SQL::Statement, unless the DBI_SQL_NANO env var is true.
- Added DBD::File, modified to use DBI::SQL::Nano.
- Added DBD::DBM, an SQL interface to DBM files using DBD::File.
📖 Documentation changes:
- Corrected typos in docs — thanks Steffen Goeldner.
- Corrected the
execute_for_fetchexample — thanks Dean Arnold.
✨ Changes in DBI 1.41 (svn rev 130) - 22 Feb 2004 ✨
okay bestie, buckle up, this one's a whole ✨era✨ — svn rev 130, 22 Feb 2004, and it's stacked. 💖
💅 the fixes (aka we cleaned house)
execute_for_array()got fixed so thetuple_statusparameter is optional — as per the docs, tyvm, shoutout to Ed Avis for the catch. 🫶- Also fixed the
execute_for_array()docs to actually say the thing: it returnsundefif any of theexecute()calls fail. docs matching reality, we love to see it. take_imp_data()test was busted on m68k — reported by Christian Hammers. fixed!<lavender>write_typeinfo_pm</lavender>had inconsistencies inDBI::DBD::Metadata— thanks to Andy Hassall for sorting that out. ✨$h->{TraceLevel}was lowkey messy and used to return theDBI->tracetrace level if that one was set higher — no more, it returns its own now. 💅
🦋 the changes
set_err()now appends toerrstr, and iferrstrisn't empty it sticks a leading"\n"in there first — so multiple error/warning messages all get recorded properly instead of clobbering each other. iconic behaviour.- Trace got better at not flooding: when a method returns an array reference, the number of elements dumped is capped at
max(40, $DBI::neat_maxlen/10)— sofetchall_arrayref(), for example, doesn't drown your trace in output. 😭 - Trace level is now a four bit integer (levels 0 thru 15) plus a set of topic flags (and no topics have been assigned yet, so don't ask).
column_info()now checks its argument count. rude not to check, honestly.bind_param()'s TYPE attribute spec got extended so it implies standard formating of the value — like,SQL_DATEimplies'YYYY-MM-DD'. go off.
🌈 the additions
- Drivers can now signal 'success with info' or 'warning' by setting
errto"0"for warning and""for information. Both values are false, so they don't triggerRaiseErroretc. Huge thanks to Steffen Goeldner for the original idea. 🧚 - New:
$h->{HandleSetErr} = sub { ... }gets called right at the point an error, warn, or info state is recorded. The code can alter theerr,errstr, andstatevalues (like, promote an error to a warning, or flip it the other way). so much power bestie. - New:
$h->{PrintWarn}attribute, which enables printing of warnings recorded by the driver. Defaults to the same value as$^W(a.k.a.perl -w). - New:
$h->{ErrCount}attribute — incremented every time an error is recorded by the driver viaset_err(). - New:
$h->{Executed}attribute — set ifdo()/execute()was called. foreign_key_info()method got a new\%attrparameter. slay.- The
"DESTROY ignored for outer"message now includes a ref count of the inner handle. receipts! - Win32 build config checks got added to
DBI::DBD— thanks Andy Hassall. 🦋 bind_colwas added toDriver.xstso drivers can define their own.- The TYPE attribute was added to
bind_col, and the expected driver behaviour was specified alongside it.
📚 the docs glow-up
- Major update to the signal handling docs — thanks to Lincoln Baxter. 🔥
- Corrected the
dbiproxyusage doc — thanks to Christian Hammers. - Corrected the
type_info_allindex hash docs — thanks to Steffen Goeldner. - Corrected
type_infoCOLUMN_SIZEto be chars, not bytes — thanks to Dean Arnold. get_info()docs now include details ofDBI::Const::GetInfoType.- Clarified that
$sth->{PRECISION}isOCTET_LENGTHfor char types.
💜 Changes in DBI 1.40 - 07 Jan 2004 💜
the fixes
- Handling of
CachedKidswhenDESTROYing threaded handles got fixed. 🙂↕️ sql_user_name()inDBI::DBD::Metadata(used bywrite_getinfo_pm) was fixed to use$dbh->{Username}. Driver authors please update your code — not optional, bestie, fr fr.
the changes
connect_cached()when running underApache::DBInow routes calls toApache::DBI::connect().
the additions
CLONE()was added toDBD::SpongeandDBD::ExampleP.- New warning when starting a new thread about any loaded driver which does not have a
CLONE()function. (a heads-up about the missing thing, so u know) - New
prepare_cache($sql, \%attr, 3)option to manage Active handles. SCALEandNULLABLEsupport added toDBD::Sponge.- Missing
execute()added tofetchall_hashrefdocs — thanks to Iain Truskett. - A
CONTRIBUTINGsection was added to the docs with notes on creating patches. 🫶
🌸 Changes in DBI 1.39 - 27 Nov 2003 🌸
the fixes
STOREfixed to not clear error during nested DBI call — again/better, thanks to Tony Bowden for the report and the helpful test case. 💀- DBI dispatch fixed to not try to use
AUTOLOADfor driver methods unless the method has been declared (as methods should be when usingAUTOLOAD). This fixes a problem when theAttribute::Handlersmodule is loaded. - The
cwdcheck code fixed to use$Config{path_sep}— thanks to Steve Hay. - Unqualified
croak()calls fixed — thanks to Steffen Goeldner. DBD::ExamplePTYPEandPRECISIONattributes fixed — thanks to Tom Lowery.- Tracing of methods that only get traced at high trace levels got fixed.
the changes/updates
- Level 1 trace no longer includes nested method calls, so it generally just shows the methods the application explicitly calls.
- Added a line to the trace log (level>=4) when
err/errstris cleared. - Updated docs for
InactiveDestroy, and pointed out where and when the trace includes the process id. DBI::DBDdocs updated — thanks to Steffen Goeldner.- Removed docs saying that the
DBI->data_sourcesmethod could be passed a$dbh. The$dbh->data_sourcesmethod should be used instead. - Added a link to 'DBI recipes' — thanks to Giuseppe Maxia:
http://gmax.oltrelinux.com/dbirecipes.html(note that this is not an endorsement that the recipies are 'optimal').
⚠️ Note: There is a bug in perl 5.8.2 when configured with threads and debugging enabled (bug #24463) which causes a DBI test to fail. 💀
🌈 Changes in DBI 1.38 - 21 Aug 2003 🌈
💖 NOTE: The DBI now requires perl version 5.6.0 or later. (As per notice in DBI 1.33 released 27th February 2003)
the fixes
- Spurious
t/03handlesfailure on 64bit perls fixed — reported by H.Merijn Brand. - Spurious
t/15arrayfailure on some perl versions fixed — thanks to Ed Avis. - Build using
dmakeon windows fixed — thanks to Steffen Goeldner. - Build on using some shells fixed — thanks to Gurusamy Sarathy.
ParamValuesfixed to only be appended toShowErrorStatementif not empty.$dbh->{Statement}fixed for the case where it wasn't writable by drivers in some cases.- Occasional undef warnings on connect failures fixed — thanks to Ed Avis.
- Small memory leak when using
$sth->{NAME..._hash}fixed. - 64bit warnings fixed — thanks to Marian Jancar.
DBD::Proxy::db::DESTROYfixed to not alter$@— thanks to Keith Chapman.Makefile.PLstatus fromWriteMakefile()fixed — thanks to Leon Brocard.
the changes
"Can't set ...->{Foo}: unrecognised attribute"changed from an error to a warning when running withDBI::ProxyServer, to simplify upgrades.execute_array()no longer requires theArrayTupleStatusattribute.DBI->available_driverschanged to not hideDBD::Sponge.- Placeholder docs updated/moved to a better place — thanks to Johan Vromans.
dbd_db_do4api inDriver.xstchanged to matchdbd_st_execute(return int, not bool) — relevant only to driver authors.neat(), and thustrace(), changed so strings marked as utf8 are presented in double quotes instead of single quotes, and are not sanitized.
the additions
- Added
$dbh->data_sourcesmethod. - Added
$dbh->last_insert_idmethod. - Added
$sth->execute_for_fetch($fetch_tuple_sub, \@tuple_status)method. - Added
DBI->installed_versions— thanks to Jeff Zucker. - Added
$DBI::Profile::ON_DESTROY_DUMPvariable. - Added docs for
DBD::Sponge— thanks to Mark Stosberg.
🦋 Changes in DBI 1.37 - 15 May 2003 🦋
- Fixed the
"Can't get dbh->{Statement}: unrecognised attribute"error in a test, caused by a change to perl internals in 5.8.0. - Fixed to build with the latest development perl (
5.8.1@19525). - C code fixed to use all ANSI declarations — thanks to Steven Lembark.
💅 Changes in DBI 1.36 - 11 May 2003 💅
the fixes
DBI->connectfixed tocarpinstead ofcroakon 'old-style' usage.connect(,,, { RootClass => $foo })fixed to notcroakif module not found.- Code generated by
DBI::DBD::Metadatafixed — thanks toDARREN@cpan.org(#2270). DBI::PurePerlfixed to not reset$@during method dispatch.- VMS build fixed — thanks to Michael Schwern.
- Proxy disconnect fixed — thanks to Steven Hirsch.
- An error in the
DBI::DBDdocs fixed — thanks to Andy Hassall.
the changes
t/40profile.tchanged to not requireTime::HiRes.DBI::ProxyServerchanged to load DBI only on first request, which helps threaded server mode — thanks to Bob Showalter.execute_array()return value changed from row count to executed tuple count, and now theArrayTupleStatusattribute is mandatory. NOTE: That is an API definition change that may affect your code. ⚠️CompatModeattribute changed to also disable the attribute 'quick FETCH'.- Attribute
FETCHchanged to be slightly faster — thanks to Stas Bekman.
the additions
- Workaround added for perl bug #17575, tied hash nested
FETCH— thanks to Silvio Wanka. UsernameandPasswordattributes added toconnect(..., \%attr), and so also embedded in a DSN like"dbi:Driver(Username=user,Password=pass):...".UsernameandPasswordcan't contain")",",", or"="characters. The order of precedence is: DSN first, then\%attr, then the$user&$passparameters, and finally theDBI_USER&DBI_PASSenvironment variables. TheUsernameattribute is stored in the$dbhbut thePasswordis not. 🙈ProxyServerHOWTO configure restrictions docs added — thanks to Jochen Wiedmann.MaxRowsattribute added toselectcol_arrayref— prompted by Wojciech Pietron.dump_handleadded as a method, not just aDBI::utility function.- On-demand by-row data feed added into
execute_array()using code ref, or statement handle. For example, to insert from a select:
$insert_sth->execute_array( { ArrayTupleFetch => $select_sth, ... } )
- Warning added to the trace log when
$h->{foo}=...is ignored due to an invalid prefix (e.g., not'private_').
🎀 Changes in DBI 1.35 - 07 Mar 2003 🎀
- Memory leak in
fetchrow_hashrefintroduced in DBI 1.33 — fixed. 😮💨 - Various
DBD::Proxyerrors introduced in DBI 1.33 — fixed. - Fixed to ANSI C in
dbd_dr_data_sources— thanks to Jonathan Leffler. $h->can($method_name)fixed to return the correct code ref.DBI::Formatremoved from the distribution, as it's now part of the separateDBI::Shelldistribution by Tom Lowery.DBI::DBDdocs updated with a note about theCLONEmethod.DBI::DBDdocs updated — thanks to Jonathan Leffler.DBI::DBD::Metadataupdated for perl 5.5.3 — thanks to Jonathan Leffler.- Added a note to
install_methoddocs about thesetup_driver()method.
⭐ Changes in DBI 1.34 - 28 Feb 2003 ⭐
DBI::DBDdocs fixed to refer toDBI::DBD::Metadata— thanks to Jonathan Leffler.dbi_time()compile usingBorlandCon Windows fixed — thanks to Steffen Goeldner.- Profile tests fixed to do enough work to measure on Windows.
disconnect_all()fixed to not be required by drivers.- Added
$okay = $h->can($method_name)to check if a method exists. ✨ - Added
DBD::*::*->install_method($method_name, \%attr)so driver private methods can be 'installed' into the DBI dispatcher and no longer need to be called using$h->func(..., $method_name). glow-up fr. - Enhanced
$dbh->clone()and its documentation. - Docs enhanced to note that
dbi_time(), and thus profiling, is limited to only millisecond (seconds/1000) resolution on Windows. - Removed the old
DBI::Shellfrom the distribution and added Tom Lowery's improved version to theBundle::DBIfile. - Updated the minimum version numbers for modules in
Bundle::DBI.
✨ Changes in DBI 1.33 - 27 Feb 2003 ✨
NOTE: future versions of the DBI will not support perl 5.6.0 or earlier, bestie, i'm so serious. perl 5.6.1 is gonna be ✨the minimum supported version✨. plan accordingly.
NOTE: the "old-style" connect —
DBI->connect($database, $user, $pass, $driver);
— has been deprecated for several years and it now generates a warning 😭. It's getting removed in a later release, fr. Please change any old connect() calls before that happens. This one's your sign.
- Adding
$dbh2 = $dbh1->clone— it makes a brand new connection to the database that's identical to the original one. And the tea? you can callclone()even after the original handle has been disconnected 👑. More deets live in the docs. - Fixed merging of profile data so it does not sum
DBIprof_FIRST_TIMEvalues anymore. - Fixed unescaping of newlines in
DBI::ProfileData, ty Sam Tregar 🫶. - Fixed a Taint bug with
fetchrow_hashref, with help from Bradley Baetz. - Fixed
$dbh->{Active}forDBD::Proxy, reported by Bob Showalter. - Fixed
STOREto not clear the error during a nested DBI call — thanks to Tony Bowden for the report and the helpful test case 💖. - Fixed
DBI::PurePerlerror clearing behaviour. - Fixed
dbi_time()and thereforeDBI::Profileon Windows, thanks to Smejkal Petr. - Fixed the problem that meant
ShowErrorStatementcould show the wrong statement — shoutout Ron Savage for the report and test case. - Changed the
Apache::DBIhook to check for$ENV{MOD_PERL}instead of$ENV{GATEWAY_INTERFACE}, thanks to Ask Bjoern Hansen. - No longer tries to dup the trace
logfpwhen an interpreter is being cloned. we simply don't do that anymore 💅. - Database handles no longer inherit shared
$h->err/errstr/statestorage from their drivers, so each$dbhhas its own$h->erretc. values and is no longer affected by calls made on other$dbh's. And now when a$dbhis destroyed, itserr/errstr/statevalues get copied up to the driver, so checking$DBI::errstrstill works as expected. iconic behaviour honestly 🌈.
🔧 Build / portability fixes:
- Fixed
t/40profile.tso it doesn't useTime::HiRes. - Fixed
t/06attrs.tso it isn't locale sensitive — reported by Christian Hammers. - Fixed sgi compiler warnings, reported by Paul Blake.
- Fixed building with
make -j4, reported by Jonathan Leffler. - Fixed build and tests under VMS, thanks to Craig A. Berry.
📚 Documentation changes:
- Documented the
$high_resolution_time = dbi_time()function. - Documented that
bind_col()can take an attribute hash. - Clarified the docs for the
ParamValuesattribute hash keys. - Many good DBI documentation tweaks from Jonathan Leffler, including a major update to the
DBI::DBDdriver author guide. king behaviour fr 👑. - Clarified that
execute()should itself callfinish()if it's called on a statement handle that's still active. - Clarified
$sth->{ParamValues}. Driver authors, please note 📝. - Removed the
"NEW"markers on some methods and attributes, and added text to each one giving the DBI version it was added in — but only if it was added after DBI 1.21 (Feb 2002).
🧚 Changes of note for authors of all drivers:
- Added
SQL_DATA_TYPE,SQL_DATETIME_SUB,NUM_PREC_RADIX, andINTERVAL_PRECISIONfields to the docs fortype_info_all. They were already intype_info(), buttype_info_all()never specified the index values. Please check and update yourtype_info_all()code 🙏. - Added the
DBI::DBD::Metadatamodule, which auto-generates your driver'sget_infoandtype_info_alldata and code — thanks mainly to Jonathan Leffler and Steffen Goeldner. If you've not implementedget_infoandtype_info_allmethods and your database has an ODBC driver available, then this will do all the hard work for you. literally free labour bestie 💅. - Drivers should no longer pass
Err,Errstr, orStateto_new_drhor_new_dbhfunctions. - Please check that you support the slightly modified behaviour of
$sth->{ParamValues}— e.g. always return a hash with keys if possible.
⚙️ Changes of note for authors of compiled drivers:
- Added
dbd_db_login6&dbd_st_finish3prototypes, thanks to Jonathan Leffler. - All
dbd_*_*()functions implemented by drivers must have a corresponding#define dbd_*_* <driver_prefix>_*_*— otherwise the driver may not work with a future release of the DBI. no cap, this one matters 😤.
🌀 Changes of note for authors of drivers which use Driver.xst:
Some new method hooks have been added and are enabled by defining the corresponding macros:
$drh->data_sources() - dbd_dr_data_sources
$dbh->do() - dbd_db_do4
The following methods won't be compiled into the driver unless the corresponding macro has been #defined:
$drh->disconnect_all() - dbd_discon_all
🌟 Changes in DBI 1.32 - 01 Dec 2002 🌟
- Fixed to work with 5.005_03, thanks to Tatsuhiko Miyagawa (and the author notes they've not tested it 🫣).
- Reenabled the taint tests (which had been accidentally left disabled), spotted by Bradley Baetz.
- Improved the docs for the
FetchHashKeyNameattribute, thanks to Ian Barwick. - Fixed a core dump when
fetchrow_hashrefwas given a bad argument (the name of an attribute with a value that wasn't an array reference) — spotted by Ian Barwick. 💀 - Fixed some compiler warnings, thanks to David Wheeler.
- Updated Steven Hirsch's enhanced proxy work (the author apparently left out a bit, oops).
- Made
t/40profile.ttests more reliable, reported by Randy, who is part of the excellent CPAN testers team:http://testers.cpan.org/— and the note says please visit, see the valuable work they do and, ideally, join in! 🫶
💫 Changes in DBI 1.31 - 29 Nov 2002 💫
- The
fetchall_arrayrefmethod, when called with a$maxrowsparameter, no longer errors out if called again after all rows have been fetched. This simplifies application logic when fetching in batches, which is lowkey a glow-up for everyone. Also added a batch-fetchwhile()loop example to the docs. - The proxy now supports non-lazy (synchronous)
prepare, positioned updates (for selects containing'for update'),PlRPCconfig set via attributes, and accurate propagation of errors — all thanks to Steven Hirsch (plus a minor fix from Sean McMurray and doc tweaks from Michael A Chase). - The
DBI_AUTOPROXYenv var can now hold the full dsn of the proxy driver plus attributes, like"dbi:Proxy(proxy_foo=>1):host=...". - Added
TaintIn&TaintOutattributes to give finer control over tainting, thanks to Bradley Baetz. - The
RootClassattribute no longer ignores failure to load a module, but it also doesn't try to load a module if the class already exists — with thanks to James FitzGibbon. HandleErrorattribute works for connect failures, thanks to David Wheeler.- The
connect()RaiseError/PrintErrormessage now includes the username. - Changed the
"last handle unknown or destroyed"warning to be a trace message instead. - Removed the undocumented
$h->event()method. gone, bye 👋. - Further enhancements to
DBD::PurePerlaccuracy. - The
CursorNameattribute now defaults toundefand not an error.
📈 DBI::Profile changes:
- New
DBI::ProfileDumper,DBI::ProfileDumper::Apache, andDBI::ProfileDatamodules (to manage the storage and processing of profile data), plus thedbiprofprogram for analyzing profile data — with many thanks to Sam Tregar 💖. - Added
$DBI::err(etc) tied variable lookup time to the profile. - Added the time for the
DESTROYmethod into parent handles' profile (it used to be ignored).
📚 Documentation changes:
- Documented the
$dbh = $sth->{Database}attribute. - Documented
$dbh->connected(...)as a post-connection call when subclassing. - Updated some minor doc issues thanks to H.Merijn Brand.
- Updated the
Makefile.PLexample inDBI::DBD, thanks to KAWAI,Takanori. - Fixed the
execute_array()example, thanks to Peter van Hardenberg.
🛠 Changes for driver authors, not required but strongly recommended:
- Change
DBIStoDBIc_DBISTATE(imp_xxh)[orimp_dbh,imp_sthetc] - Change
DBILOGFPtoDBIc_LOGPIO(imp_xxh)[orimp_dbh,imp_sthetc] - Any function from which all instances of
DBISandDBILOGFPare removed can also havedPERLINTERPremoved (a good thing, apparently). - All use of the
DBIh_EVENT*macros should be removed. - Major update to the
DBI::DBDdocs, thanks largely to Jonathan Leffler. - Add these key values:
'Err' => \my $err, 'Errstr' => \my $errstr,to the hash passed toDBI::_new_dbh()in your driver source code. That will make each$dbhhave its own$h->errand$h->errstrvalues, separate from other$dbhbelonging to the same driver. - If you have
::dbor::stDESTROYmethods that do nothing, you can now remove them — which speeds up handle destruction. speedrun strats fr ⚡.
🌈 Changes in DBI 1.30 - 18 Jul 2002 🌈
- Fixed problems with
selectrow_array,selectrow_arrayref, andselectall_arrayrefintroduced in DBI 1.29. classic regression era, we don't talk about it 💀. - Fixed
FETCHing a handle attribute to not clear$DBI::erretc (this was broken in 1.29). - Fixed a core dump at trace level 9 or above.
- Fixed compilation with perl 5.6.1 + ithreads (i.e. Windows).
- Changed the definition of behaviour of
selectrow_arraywhen called in a scalar context, so it matchesfetchrow_array. - Corrected the
selectrow_arrayrefdocs, which showedselectrow_array— thanks to Paul DuBois.
🦋 Changes in DBI 1.29 - 15 Jul 2002 🦋
NOTE: this release changes the specified behaviour for thefetchrow_arraymethod when called in a scalar context. The DBI spec used to say that it would return the FIRST field. Which field it returns (i.e., the first or the last) is now undefined. This does not affect statements that only select one column, which is usually the case whenfetchrow_arrayis called in a scalar context. FYI, this change was triggered by discovering that thefetchrow_arrayimplementation inDriver.xst(used by most compiled drivers) didn't match the DBI specification. Rather than change the code to match, and risk breaking existing applications, the spec got changed instead (that part was always of dubious value anyway).
NOTE: future versions of the DBI may not support perl 5.5 much longer. If you're still using perl 5.005_03 you should be making plans to upgrade to at least perl 5.6.1, or 5.8.0. Perl 5.8.0 is due to be released in the next week or so. (And even though it's a "point 0" release, it is the most thoroughly tested release ever ✨.)
- Added XS/C implementations of
selectrow_array,selectrow_arrayref, andselectall_arrayreftoDriver.xst. PeepDBI 1.26 Changesfor the tea. ✨ - Removed support for the old (fatally flawed) "5005" threading model. Yeah bestie, that one was not it. 💀
- Added support for new perl 5.8 iThreads thanks to Gerald Richter. (Threading support and safety should still be regarded as beta quality until further notice. But it's much better than it was, fr fr.) 🦋
- Updated the "Threads and Thread Safety" section of the docs. 🎀
- The trace output can be sent to
STDOUTinstead ofSTDERRby using"STDOUT"as the name of the file, i.e.,$h->trace(..., "STDOUT"). slay, no more 2>&1 shenanigans 🫶 - Added pointer to
perlreftut,perldsc,perllol, andperlbootmanuals into the intro section of the docs, suggested by Brian McCain. 📚 - Fixed
DBI::Const::GetInfo::*pod docs thanks to Zack Weinberg. 🩹 - Some changes to how
$dbhmethod calls are treated byDBI::Profile:- Meta-data methods now clear
$dbh->{Statement}on entry. 🧹 - Some
$dbhmethods are now profiled as if$dbh->{Statement}was empty (because thet're unlikely to actually relate to its contents). 💅
- Meta-data methods now clear
- Updated
dbiport.htopport.hfrom perl 5.8.0. ⭐ - Tested with perl
5.5.3(vanilla, Solaris),5.6.1(vanilla, Solaris), and perl5.8.0(RC3@17527with iThreads & Multiplicity on Solaris and FreeBSD). we love a testing era 👑
✨ Changes in DBI 1.28 - 14 Jun 2002 ✨
- Added
$sth->{ParamValues}to return a hash of the most recent values bound to placeholders viabind_param()orexecute(). Individual drivers need to be updated to support it, so don't come for the core if your driver's not there yet bestie 🙈 - Enhanced
ShowErrorStatementto includeParamValuesif available:
"DBD::foo::st execute failed: errstr [for statement ``...'' with params: 1='foo']"
- Further enhancements to
DBD::PurePerlaccuracy. 🧚
✨ Changes in DBI 1.27 - 13 Jun 2002 ✨
- Fixed missing column in C implementation of
fetchall_arrayref()— thanks to Philip Molter for the prompt reporting of the problem. prompt reporting is main character energy fr 🫶
✨ Changes in DBI 1.26 - 13 Jun 2002 ✨
- Fixed
t/40profile.tto work on Windows thanks to Smejkal Petr. 🪟 - Fixed
$h->{Profile}to returnundef, not error, if not set. (yes,undefis a valid vibe check result 💜) - Fixed
DBI->available_driversin scalar context thanks to Michael Schwern. ✨ - Added C implementations of
selectrow_arrayref()andfetchall_arrayref()inDriver.xst. All compiled drivers usingDriver.xstwill now be faster making those calls. Most noticeable withfetchall_arrayreffor many rows orselectrow_arrayrefwith a fast query. For example, usingDBD::mysqlaselectrow_arrayreffor a single row using a primary key is ~20% faster, andfetchall_arrayreffor 20000 rows is twice as fast! 🔥 Drivers just need to be recompiled and reinstalled to enable it. Thefetchall_arrayrefspeed up only applies if$sliceparameter is not used. (iykyk) - Added
$max_rowsparameter tofetchall_arrayref()to optionally limit the number of rows returned. Can now fetch batches of rows. 🍓 - Added
MaxRowsattribute toselectall_arrayref()which then passes it tofetchall_arrayref(). 🎀 - Changed
selectrow_arrayto make use ofselectrow_arrayref. recycling code, iconic 💅 - Trace level
1now shows first two parameters of all methods (used to only do that for some, likeprepare,execute,doetc). 👀 - Trace indicator for recursive calls (first char on trace lines) now starts at
1not2. ⭐ - Documented that
$h->func()does not triggerRaiseErroretc so applications must explicitly check for errors. so like, check ur errors pls 😭 DBI::ProfilewithDBI_PROFILEnow shows percentage time inside DBI. 📊HandleErrordocs updated to show that handler can edit error message. ✏️HandleErrorsubroutine interface is now regarded as stable. 👑
✨ Changes in DBI 1.25 - 05 Jun 2002 ✨
- Fixed build problem on Windows and some compiler warnings. 🛠️
- Fixed
$dbh->{Driver}and$sth->{Statement}for driver internals — these are 'inner' handles as per behaviour prior to DBI 1.16. 🧠 - Further minor improvements to
DBI::PurePerlaccuracy. 🌸
✨ Changes in DBI 1.24 - 04 Jun 2002 ✨
- Fixed reference loop causing a handle/memory leak that was introduced in DBI 1.16. 💀 (the leak era is OVER)
- Fixed
DBI::Formatto work with 'filehandles' fromIO::Scalarand similar modules thanks to report by Jeff Boes. 🫶 - Fixed
$h->funcforDBI::PurePerlthanks to Jeff Zucker. 🧚 - Fixed
$dbh->{Name}forDBI::PurePerlthanks to Dean Arnold. ✨ - Added DBI method call profiling and benchmarking. This is a major new addition to the DBI. See
$h->{Profile}attribute andDBI::Profilemodule. For a quick trial, set theDBI_PROFILEenvironment variable and run your favourite DBI script. Try it withDBI_PROFILEset to1, then try2,4,8,10, and-10. Have fun! 🎉 literally go do this rn - Added
execute_array()andbind_param_array()documentation with thanks to Dean Arnold. 📖 - Added notes about the DBI having not yet been tested with iThreads (testing and patches for
SvLOCKetc welcome). 🙈 contributions open bestie - Removed undocumented
Handlersattribute (replaced byHandleError). 🗑️ - Tested with
5.5.3and5.8.0 RC1. 🌈
✨ Changes in DBI 1.23 - 25 May 2002 ✨
- Greatly improved
DBI::PurePerlin performance and accuracy. 🚀 - Added more detail to
DBI::PurePerldocs about what's not supported. 📝 - Fixed
undefwarnings fromt/15array.tandDBD::Sponge. 🧽
✨ Changes in DBI 1.22 - 22 May 2002 ✨
- Added
execute_array()andbind_param_array()with special thanks to Dean Arnold. Not yet documented. Seet/15array.tfor examples. All drivers now automatically support these methods. 👑 - Added
DBI::PurePerl, a transparent DBI emulation for pure-perl drivers with special thanks to Jeff Zucker.perldoc DBI::PurePerlfor details. 🧚 - Added
DBI::Const::GetInfo*modules thanks to Steffen Goeldner. ✨ - Added
write_getinfo_pmutility toDBI::DBDthanks to Steffen Goeldner. 🛠️ - Added
$allow_active==2mode forprepare_cached()thanks to Stephen Clouse. 💅 - Updated
DBI::Formatto Revision 11.4 thanks to Tom Lowery. 🎀 - Use
File::SpecinMakefile.PL(helps VMS etc) thanks to Craig Berry. 🗂️ - Extend
$h->{Warn}to commit/rollback ineffective warning thanks to Jeff Baker. ⚠️ - Extended
t/preparse.tand removed"use Devel::Peek"thanks to Scott Hildreth. 🔍 - Only copy
Changestoblib/lib/Changes.pmonce thanks to Jonathan Leffler. 📄 - Updated internals for modern perls thanks to Jonathan Leffler and Jeff Urlwin. ⭐
- Tested with perl
5.7.3(just using default perl config). 🌈
Documentation changes:
- Added 'Catalog Methods' section to docs thanks to Steffen Goeldner. 🗂️
- Updated
READMEthanks to Michael Schwern. 📖 - Clarified that driver may choose not to start new transaction until next use of
$dbhafter commit/rollback. 🧠 - Clarified docs for
finishmethod. 🏁 - Clarified potentials problems with
prepare_cached()thanks to Stephen Clouse. 💅
✨ Changes in DBI 1.21 - 07 Feb 2002 ✨
- The minimum supported perl version is now
5.005_03. 👑 - Fixed
DBD::Proxysupport forAutoCommitthanks to Jochen Wiedmann. 🫶 - Fixed
DBI::ProxyServerbind_param(_inout)handing thanks to Oleg Mechtcheriakov. 🔧 - Fixed
DBI::ProxyServerfetch loop thanks to nobull@mail.com. 🔁 - Fixed
install_driverdo-the-right-thing with$@on error. It, andconnect(), will leave$@empty on success and holding the error message on error. Thanks to Jay Lawrence, Gavin Sherlock and others for the bug report. 🙌 - Fixed
fetchrow_hashrefto assign columns to the hash left-to-right so later fields with the same name overwrite earlier ones as per DBI < 1.15, thanks to Kay Roepke. 🎀 - Changed
tables()to usequote_indentifier()if the driver returns a true value for$dbh->get_info(29)#SQL_IDENTIFIER_QUOTE_CHAR. 🔤 - Changed
ping()so it no longer triggersRaiseError/PrintError. 🩺 - Changed
connect()to not call$class->install_driverunless needed. 🦋 - Changed
DESTROYto catch fatal exceptions and append to$@. 💀 - Added ISO SQL/CLI & ODBCv3 data type definitions thanks to Steffen Goeldner. 📚
- Removed the definition of
SQL_BIGINTdata type constant as the value is inconsistent between standards (ODBC=-5, SQL/CLI=25). inconsistent queen, we had to let her go 😭 - Added
$dbh->column_info(...)thanks to Steffen Goeldner. 🔍 - Added
$dbh->foreign_key_info(...)thanks to Steffen Goeldner. 🔑 - Added
$dbh->quote_identifier(...)insipred by Simon Oliver. ✨ - Added
$dbh->set_err(...)for DBD authors and DBI subclasses (actually been there for a while, now expanded and documented). 🛠️ - Added
$h->{HandleError} = sub { ... }addition and/or alternative toRaiseError/PrintError. See the docs for more info. 🫶 - Added
$h->{TraceLevel} = Nattribute to set/get trace level of handle thus can set trace level via an (eg externally specified) DSN using the embedded attribute syntax:
$dsn = 'dbi:DB2(PrintError=1,TraceLevel=2):dbname';
Plus, you can also now do: local($h->{TraceLevel}) = N; (but that leaks a little memory in some versions of perl). 💀
- Added some call tree information to trace output if trace level >=
3. With thanks to Graham Barr for the stack walking code. 🌳 - Added experimental undocumented
$dbh->preparse(), seet/preparse.t. With thanks to Scott T. Hildreth for much of the work. 🔬 - Added Fowler/Noll/Vo hash type as an option to
DBI::hash(). #️⃣
Documentation changes:
- Added
DBI::Changesso now you can"perldoc DBI::Changes", yeah! 🎉 (that's literally this page bestie, hi 👋) - Added
selectrow_arrayref&selectrow_hashrefdocs thanks to Doug Wilson. 📖 - Added 'Standards Reference Information' section to docs to gather together all references to relevant on-line standards. 🌐
- Added link to
poop.sourceforge.netinto the docs thanks to Dave Rolsky. 💀 iconic name ngl - Added link to hyperlinked BNF for SQL92 thanks to Jeff Zucker. 🔗
- Added 'Subclassing the DBI' docs thanks to Stephen Clouse, and then changed some of them to reflect the new approach to subclassing. 👑
- Added stronger wording to description of
$h->{private_*}attributes. 🔒 - Added docs for
DBI::hash. 📝
Driver API changes:
- Now a COPY of the
DBI->connect()attributes is passed to the driverconnect()method, so it can process and delete any elements it wants. Deleting elements reduces/avoids the explicit
$dbh->{$_} = $attr->{$_} foreach keys %$attr;
that DBI->connect does after the driver connect() method returns. 🫶
✨ Changes in DBI 1.20 - 24 Aug 2001 ✨
WARNING: This release contains two changes that may affect your code.
Any code usingselectall_hashref(), which was added in March 2001, WILL need to be changed. Any code usingfetchall_arrayref()with a non-empty hash slice parameter may, in a few rare cases, need to be changed. See the change list below for more information about the changes. See the DBI documentation for a description of current behaviour.
okay so like... this one's real, bestie, read the warning twice 😭
- Fixed a memory leak, all thanks to Toni Andjelkovic 🎀 lowkey a hero fr.
- Changed the
fetchall_arrayref({ foo=>1, ...})spec again (sorry bestie 😭): the key names of the returned hashes now match the letter case of the names in the parameter hash, no matter what theFetchHashKeyNameattribute says. Letter case is still ignored for matching, tho. - Changed the
fetchall_arrayref([...])array slice syntax spec to make it clear that the numbers in the array slice are perl index numbers (which start at0), not column numbers (which start at1). Important distinction, don't mix them up 💅. - Added
{ Columns=>... }and{ Slice =>... }attributes toselectall_arrayref(), which get passed on tofetchall_arrayref()so it can fetch hashes now 🦋. - Added a
{ Columns => [...] }attribute toselectcol_arrayref()so the list it hands back can be built from more than one column per row. Why, you ask? Consider:
my %hash = @{$dbh->selectcol_arrayref($sql,{ Columns=>[1,2]})}
to return id-value pairs which can be used directly to build a hash ✨.
- Added
$hash_ref = $sth->fetchall_hashref( $key_field ), which returns a ref to a hash with, typically, one element per row.$key_fieldis the name of the field to get the key for each row from. The value of the hash for each row is a hash returned byfetchrow_hashref. - Changed
selectall_hashrefto return a hash ref (fromfetchall_hashref) and not an array of hashes like it has since DBI 1.15 (end March 2001).
🚨 WARNING: THIS CHANGE WILL BREAK ANY CODE USINGselectall_hashref()! Sorry bestie, but I think this is an important regularization of the API. To get the previousselectall_hashref()behaviour (an array of hash refs), change:perl $ary_ref = $dbh->selectall_hashref( $statement, undef, @bind);to:perl $ary_ref = $dbh->selectall_arrayref($statement, { Columns=>{} }, @bind);
- Added
NAME_lc_hash,NAME_uc_hash,NAME_hashstatement handle attributes, which return a ref to a hash offield_name => field_index(0..n-1) pairs 👑. - Fixed the
select_hash()example, thanks to Doug Wilson 💖. - Removed (unbundled)
DBD::ADOandDBD::Multiplexfrom the DBI distribution. The latest versions of those modules are available from CPAN sites, go get 'em. - Added
$dbh->begin_work. This method causesAutoCommitto be turned off just until the nextcommit()orrollback().
Driver authors: if the DBIcf_BegunWork flag is set when your commit or rollback method is called, then please turn AutoCommit on and clear the DBIcf_BegunWork flag. If you don't, then the DBI will, but it'll be much less efficient and won't handle error conditions very cleanly 🙈.
- Retested on perl 5.4.4, but the DBI won't support 5.4.x much longer. Tick tock ⏰.
- Added this text to the SUPPORT section of the docs:
For direct DBI and DBD::Oracle support, enhancement, and related work I am available for consultancy on standard commercial terms.
- Added this text to the ACKNOWLEDGEMENTS section of the docs:
Much of the DBI and DBD::Oracle was developed while I was Technical Director (CTO) of the Paul Ingram Group (www.ig.co.uk). So I'd especially like to thank Paul for his generosity and vision in supporting this work for many years.
🌸 Changes in DBI 1.19 — 20 Jul 2001 🌸
- Made
fetchall_arrayref({ foo=>1, ...})be more strict to the specification in relation to wanting hash slice keys to be lowercase names.
⚠️ WARNING: If you've used fetchall_arrayref({...}) with a hash slice that contains keys with uppercase letters, then your code will break. (As far as I recall, the spec has always said don't do that.)
- Fixed
$sth->execute()to update$dbh->{Statement}to$sth->{Statement}. - Added row number to trace output for fetch method calls 👀.
- Trace level 1 no longer shows fetches with row>1 (to reduce output volume — she's keeping it concise, iconic).
- Added
$h->{FetchHashKeyName} = 'NAME_lc'or'NAME_uc'to alter the behaviour of thefetchrow_hashref()method. See docs. - Added type_info quote caching to the
quote()method, thanks to Dean Kopesky. Makes usingquote()with the second data type param much much faster 🔥. - Added
type_into_all()caching totype_info(), spotted by Dean Kopesky. - Added a new API definition for
table_info()andtables()— driver authors please note! - Added
primary_key_info()to the DBI API, thanks to Steffen Goeldner. - Added
primary_key()to the DBI API as a simpler interface toprimary_key_info(). - Indent and other fixes for the DBI::DBD doc, thanks to H.Merijn Brand.
- Added a
prepare_cached()insert_hash()example, thanks to Doug Wilson. - Removed the false docs for
fetchall_hashref()— usefetchall_arrayref({})instead 💅.
🌈 Changes in DBI 1.18 — 04 Jun 2001 🌈
- Fixed that altering
ShowErrorStatementalso alteredAutoCommit! Thanks to Jeff Boes for spotting that clanger 😭. - Fixed
DBD::Proxyto handlecommit()androllback(). Long overdue, sorry. - Fixed incompatibility with perl 5.004 (but no one's using that right? :).
- Fixed
connect_cachedandprepare_cachedto not be affected by the order of elements in the attribute hash. Spotted by Mitch Helle-Morrissey. - Fixed the version number of
DBI::Shell, reported by Stuhlpfarrer Gerhard and others. - Defined and documented
table_info()attribute semantics (ODBC compatible), thanks to Olga Voronova, who also implemented them inDBD::Oracle🫶. - Updated
Win32::DBIODBC(Win32::ODBCemulation), thanks to Roy Lee.
⭐ Changes in DBI 1.16 — 30 May 2001 ⭐
- Reimplemented
fetchrow_hashrefin C — now fetches about 25% faster! Ate, no crumbs 🔥. - Changed behaviour if both
PrintErrorandRaiseErrorare enabled, to simply do both (in that order, obviously :). - Slight reduction in DBI handle creation overhead.
- Fixed
$dbh->{Driver}&$sth->{Database}to return 'outer' handles. - Fixed execute param count check to honour
RaiseError, spotted by Belinda Giardie. - Fixed build for perl5.6.1 with PERLIO, thanks to H.Merijn Brand.
- Fixed client sql restrictions in
ProxyServer.pm, thanks to Jochen Wiedmann. - Fixed batch mode command parsing in Shell, thanks to Christian Lemburg.
- Fixed typo in
selectcol_arrayrefdocs, thanks to Jonathan Leffler. - Fixed
selectrow_hashrefto be available to callers, thanks to T.J.Mather. - Fixed core dump if the statement handle didn't define the
Statementattribute 💀. - Added
bind_param_inoutdocs to DBI::DBD, thanks to Jonathan Leffler. - Added a note to the
data_sources()method docs that some drivers may require a connected database handle to be supplied as an attribute. - Trace of the
install_drivermethod now shows the path of the driver file loaded 👀. - Changed many
'||'to'or'in the docs, thanks to H.Merijn Brand. - Updated
DBD::ADOagain (improvements in error handling) from Tom Lowery. - Updated
Win32::DBIODBC(Win32::ODBCemulation), thanks to Roy Lee. - Updated email and web addresses in the DBI::FAQ, thanks to Michael A Chase.
🎀 Changes in DBI 1.15 — 28 Mar 2001 🎀
- Added
selectrow_arrayref. - Added
selectrow_hashref. - Added
selectall_hashref, thanks to Leon Brocard ✨. - Added
DBI->connect(..., { dbi_connect_method => 'method' }). - Added
$dbh->{Statement}aliased to the most recent child$sth->{Statement}. - Added
$h->{ShowErrorStatement}=1to cause the appending of the relevantStatementtext to theRaiseError/PrintErrortext. - Modified
type_infoto always return hash keys in uppercase, and to not require an uppercase'DATA_TYPE'key fromtype_info_all. Thanks to Jennifer Tong and Rob Douglas. - Added the
\%attrparam totables()andtable_info()methods. - The
Tracemethod useswarn()if it can't open the new file. - Trace shows source line and filename during global destruction.
- Updated packages:
- Updated
Win32::DBIODBC(Win32::ODBCemulation), thanks to Roy Lee. - Updated
DBD::ADOto the much improved version 0.4 from Tom Lowery. - Updated
DBD::Spongeto include$sth->{PRECISION}, thanks to Tom Lowery. - Changed
DBD::ExamplePto uselstat()instead ofstat().
- Updated
- Documentation:
- Documented
$DBI::lasth(which has been there since day 1). - Documented
SQL_*names. - Clarified and extended docs for
$h->state, thanks to Masaaki Hirose. - Clarified
fetchall_arrayref({})docs (thanks to, er, someone!). - Clarified
type_info_allre lettercase and index values. - Updated DBI::FAQ to 0.38, thanks to Alligator Descartes.
- Added a cute
bind_columnsexample, thanks to H.Merijn Brand 💖. - Extended docs on the
\%attrarg to thedata_sourcesmethod.
- Documented
Makefile.PL:- Removed obscure potential
rm -rf /(thanks to Ulrich Pfeifer) 😭. - Removed use of
globandfind(thanks to Michael A. Chase).
- Removed obscure potential
- Proxy:
- Removed debug messages from
DBD::ProxyAUTOLOAD, thanks to Brian McCauley. - Added fix for a problem using
table_info, thanks to Tom Lowery. - Added better determination of where to put the pid file, and...
- Added
KNOWN ISSUESsection to DBD::Proxy docs, thanks to Jochen Wiedmann.
- Removed debug messages from
- Shell:
- Updated
DBI::Formatto includeDBI::Format::String, thanks to Tom Lowery. - Added
describecommand, thanks to Tom Lowery. - Added
columnseparatoroption, thanks to Tom Lowery (I think). - Added
'raw'format, thanks to, er, someone, maybe Tom again.
- Updated
- Known issues:
- Perl 5.005 and 5.006 both leak memory doing
local($handle->{Foo}). Perl 5.004 doesn't. The leak is not a DBI or driver bug 🫶.
- Perl 5.005 and 5.006 both leak memory doing
🦋 Changes in DBI 1.14 — 14 Jun 2000 🦋
- NOTE: This version is the one the DBI book is based on 📚.
- NOTE: This version requires at least Perl 5.004.
- Perl 5.6 ithreads changes, with thanks to Doug MacEachern.
- Changed trace output to use PerlIO, thanks to Paul Moore.
- Fixed bug in
RaiseError/PrintErrorhandling. (%chars in the error string could cause a core dump 💀.) - Fixed Win32 PerlEx IIS concurrency bugs, thanks to Murray Nesbitt.
- Major documentation polishing, thanks to Linda Mui at O'Reilly ✨.
- Password parameter now shown as
****in trace output 🔒. - Added two fields to
type_infoandtype_info_all. - Added
$dsnto thePrintError/RaiseErrormessage fromDBI->connect(). - Changed
prepare_cached()croak to carp ifsthstill Active. - Added a
prepare_cached()example to the docs. - Added further
DBD::ADOenhancements from Thomas Lowery.
💜 Changes in DBI 1.13 — 11 Jul 1999 💜
- Fixed Win32 PerlEx IIS concurrency bugs, thanks to Murray Nesbitt.
- Fixed problems with the
DBD::ExamplePlong_listtest mode. - Added
SQL_WCHARSQL_WVARCHARSQL_WLONGVARCHARandSQL_BITto the list of known and exportable SQL types. - Improved data fetch performance of
DBD::ADO. - Added
GetTypeInfotoDBD::ADO, thanks to Thomas Lowery. - Actually documented
connect_cached, thanks to Michael Schwern. - Fixed user/key/cipher bug in
ProxyServer, thanks to Joshua Pincus.
🌈 Changes in DBI 1.12 — 29 Jun 1999 🌈
- Fixed a significant
DBD::ADObug (fetch skipped the first row) 😭. - Fixed a
ProxyServerbug handling non-select statements. - Fixed a VMS problem with
t/examp.t, thanks to Craig Berry. - Trace only shows calls to
trace_msgand_set_fbavat high levels. - Modified
t/examp.tto workaround a Cygwin buffering bug.
💖 Changes in DBI 1.11 — 17 Jun 1999 💖
- Fixed the
bind_columnsargument checking so a single arg is allowed. slay. - Fixed issues with the internal
default_usermethod. - Fixed the broken
DBD::ADO. - Made the default
$DBI::rowsway more robust for some truly obscure little cases.
🌸 Changes in DBI 1.10 — 14 Jun 1999 🌸
- Fixed that
trace_msg....alerror you'd hit when running under Apache. - Fixed the
dbd_st_finishenhancement insideDriver.xst(that's internals btw, don't worry about it bestie). - Enabled drivers to define a default username and password, and temporarily disabled the warning that got added back in 1.09.
- Thread safety got optimised for the single-thread case. efficient queen 💅
✨ Changes in DBI 1.09 — 09 Jun 1999 ✨
- Added an optional minimum trace level parameter to
trace_msg(). - Added a warning in
Makefile.PLthat DBI will require 5.004 soon. heads up!! - Added the
$dbh->selectcol_arrayref($statement)method. - Fixed the
fetchall_arrayrefhash-slice mode undefNAMEproblem. - Fixed a problem with tainted parameter checking and
t/examp.t. - Fixed a problem with the thread safety code, including on 64 bit machines.
- Thread safety is now enabled by default for threaded perls.
- Enhanced the code for MULTIPLICITY/PERL_OBJECT from ActiveState.
- Enhanced the
prepare_cached()method. - Minor changes to trace levels (less internal info at level 2 now).
- The trace log now shows
"!! ERROR..."before the"<- method"line. DBI->connect()now warns if user / password is undefined and theDBI_USER/DBI_PASSenvironment variables are not defined.- The
t/proxy.ttest now ignores any/etc/dbiproxy.conffile. - Added portability fixes for MacOS from Chris Nandor.
- Updated the mailing list address from
fugue.comtoisc.org.
🦋 Changes in DBI 1.08 — 12 May 1999 🦋
- Much improved
DBD::ADOdriver, thanks to Phlip Plumlee and others. Connectnow lets you specify attribute settings right inside the DSN. for real:
"dbi:Driver(RaiseError=>1,Taint=>1,AutoCommit=>0):dbname"
- The
$h->{Taint}attribute now also enables taint checking of arguments to almost all DBI methods. - Improved trace output in various ways.
- Fixed a bug where
$sth->{NAME_xx}was undef in some situations. - Fixed the code for MULTIPLICITY/PERL_OBJECT, thanks to Alex Smishlajev.
- Fixed and documented
DBI->connect_cached. - Workaround for the Cygwin32 build problem, with help from Jong-Pork Park.
bind_columnsno longer needs an undef or hash ref as the first parameter.
🎀 Changes in DBI 1.07 — 06 May 1999 🎀
- Trace output now shows the contents of array refs returned by DBI.
- Changed the names of some result columns from
type_info,type_info_all,tablesandtable_infoto match ODBC 3.5 / ISO/IEC standards. - Many fixes for
DBD::ProxyandProxyServer. - Fixed error reporting in
install_driver. - Major enhancement to
DBI::W32ODBCfrom Patrick Hollins. - Added
$h->{Taint}to taint fetched data if tainting (perl -T). - Added code for MULTIPLICITY/PERL_OBJECT contributed by ActiveState.
- Added
$sth->more_results(undocumented for now, secret little thing 🙈).
💜 Changes in DBI 1.06 — 06 Jan 1999 💜
- Fixed the Win32
Makefile.PLproblem from 1.04 and 1.05. - Significant
DBD::Proxyenhancements and fixes, including support forbind_param_inout(Jochen and I 🫶). - Added the experimental
DBI->connect_cachedmethod. - Added
$sth->{NAME_uc}and$sth->{NAME_lc}attributes. - Enhanced
fetchrow_hashrefto take an attribute name arg.
🌈 Changes in DBI 1.05 — 04 Jan 1999 🌈
- Improved
DBD::ADOconnect (thanks to Phlip Plumlee). - Improved thread safety (thanks to Jochen Wiedmann).
[Quick release prompted by truncation of copies on CPAN]— icon behaviour honestly.
⭐ Changes in DBI 1.04 — 03 Jan 1999 ⭐
- Fixed an error in
Driver.xst. The DBI build now testsDriver.xst. - Removed unused variable compiler warnings in
Driver.xst. - The
DBI::DBDmodule is now tested during the DBI build. - Further clarification in the
DBI::DBDdriver writers manual. - Added an optional name parameter to
$sth->fetchrow_hashref.
👑 Changes in DBI 1.03 — 01 Jan 1999 👑
- Now builds with
Perl>=5.005_54(PERL_POLLUTEinDBIXS.h). - DBI trace trims the path from
"at yourfile.pl line nnn". - Trace level 1 now shows the statement passed to prepare.
- Assorted improvements to the DBI manual.
- Assorted improvements to the
DBI::DBDdriver writers manual. - Fixed the
$dbh->quoteprototype to include the optional$data_type. - Fixed
$dbh->prepare_cachedproblems. $dbh->selectrow_arraybehaves better in scalar context.- Added a (very) experimental
DBD::ADOdriver for Win32 ADO. - Added experimental thread support (
perl Makefile.PL -thread). - Updated the
DBI::FAQ— thanks to Alligator Descartes. - The following changes were implemented and/or packaged by Jochen Wiedmann — thanks Jochen:
- Added a Bundle for CPAN installation of DBI, the DBI proxy server and prerequisites (
lib/Bundle/DBI.pm). DBI->available_driversusesFile::Spec, if available. This makes it work on MacOS. (DBI.pm)- Modified
type_infoto work with read-only values returned bytype_info_all. (DBI.pm) - Added handling of magic values in
$sth->execute,$sth->bind_paramand other methods (Driver.xst). - Added Perl's CORE directory to the linkers path on Win32, required by recent versions of ActiveState Perl.
- Fixed
DBD::Spongeto work with empty result sets. - Complete rewrite of
DBI::ProxyServerandDBD::Proxy.
- Added a Bundle for CPAN installation of DBI, the DBI proxy server and prerequisites (
🍓 Changes in DBI 1.02 — 02 Sep 1998 🍓
- Fixed
DBI::Shellincluding@ARGVand/current. - Added a basic
DBI::Shelltest. - Renamed
DBI::Shell/displayto/format.
🧚 Changes in DBI 1.01 — 02 Sep 1998 🧚
- Many enhancements to Shell (with many contributions from Jochen Wiedmann, Tom Lowery and Adam Marks).
- Assorted fixes to
DBD::ProxyandDBI::ProxyServer. - Tidied up trace messages —
trace(2)is much cleaner now. - Added
$dbh->{RowCacheSize}and$sth->{RowsInCache}. - Added experimental
DBI::Format(mainly forDBI::Shell). - Fixed
fetchall_arrayref($slice_hash). DBI->connectnow honoursPrintError=1if connect fails.- Assorted clarifications to the docs.
🔥 Changes in DBI 1.00 — 14 Aug 1998 🔥
- The DBI is no longer 'alpha' software! periodt 💅
- Added
$dbh->tablesand$dbh->table_info. - Documented the
\%attrarg to thedata_sourcesmethod. - Added
$sth->{TYPE},$sth->{PRECISION}and$sth->{SCALE}. - Added
$sth->{Statement}. DBI::Shellnow usesneat_listto print results.- It also escapes
"'"chars and converts newlines to spaces.
💀 Changes in DBI 0.95 — 10 Aug 1998 💀
WARNING: THIS IS AN EXPERIMENTAL RELEASE! 😭
- Fixed the 0.94 slip so it will build on pre-5.005 again.
- Added the
DBI_AUTOPROXYenvironment variable. - The array ref returned from
fetch/fetchrow_arrayrefis now readonly. - Improved connect error reporting by
DBD::Proxy. - All trace/debug messages from DBI now go to the trace file.
🌸 Changes in DBI 0.94 — 09 Aug 1998 🌸
WARNING: THIS IS AN EXPERIMENTAL RELEASE! 😭
- Added
DBD::Shellanddbishinteractive DBI shell. Try it! - Any database attribs can be set via
DBI->connect(,,, \%attr). - Added
_get_fbavand_set_fbavmethods for Perl driver developers (see theExamplePdriver for perl usage). Drivers which don't use one of these methods (either via XS or Perl) are not compliant. no cap. - DBI trace now shows — adds
" at yourfile.pl line nnn"! PrintErrorandRaiseErrornow prepend the driver and method name.- The
available_driversmethod no longer returnsNullPorSponge. - Added
$dbh->{Name}. - Added
$dbh->quote($value, $data_type). - Added more hints to the
install_driverfailure message. - Added
DBD::ProxyandDBI::ProxyServer(from Jochen Wiedmann). - Added
$DBI::neat_maxlento control truncation of trace output. - Added
$dbh->selectall_arrayrefand$dbh->selectrow_arraymethods. - Added
$dbh->tables. - Added
$dbh->type_infoand$dbh->type_info_all. - Added
$h->trace_msg($msg)to write to the trace log. - Added
@bool = DBI::looks_like_number(@ary). - Many assorted improvements to the DBI docs.
🎀 Changes in DBI 0.93 — 13 Feb 1998 🎀
- Fixed a
DBI::DBD::dbd_postamblebug causing'Driver.xsi not found'errors. - Changes to handling of 'magic' values in
neatsvpv(used by trace). execute(inDriver.xst) stops binding after the first bind error.- This release requires drivers to be rebuilt. (yes, for real, rebuild them 🫶)
✨ Changes in DBI 0.92 — 03 Feb 1998 ✨
- Fixed a per-handle memory leak (with many thanks to Irving Reid).
- Added
$dbh->prepare_cached()caching variant of$dbh->prepare. - Added some attributes:
$h->{Active}— is the handle 'Active' (vague concept) (boolean)$h->{Kids}— e.g. number of sth's associated with a dbh$h->{ActiveKids}— number of the above which are 'Active'$dbh->{CachedKids}— ref toprepare_cachedsth cache
- Added support for general-purpose
private_attributes. - Added experimental support for subclassing the DBI: see
t/subclass.t. - Added
SQL_ALL_TYPESto exported:sql_types. - Added
dbd_dbi_dir()anddbd_dbi_arch_dir()to theDBI::DBDmodule so that DBDMakefile.PLs can work with the DBI installed in non-standard locations. - Fixed the
'Undefined value'warning and&sv_nooutput fromneatsvpv/trace. - Fixed a small 'once per interpreter' leak.
- Assorted minor documentation fixes.
💜 Changes in DBI 0.91 — 10 Dec 1997 💜
NOTE: This fix may break some existing scripts 😬
DBI->connect("dbi:...",$user,$pass)was not settingAutoCommitandPrintError!DBI->connect(..., { ... })no longer setsAutoCommitorPrintErrortwice.DBI->connect(..., { RaiseError=>1 })now croaks if connect fails.- Fixed the
$fhparameter of$sth->dump_results; - Added a default statement
DESTROYmethod which carps. - Added a default driver
DESTROYmethod to silenceAUTOLOAD/__DIE__/CGI::Carp. - Added more
SQL_*types to%EXPORT_TAGSand@EXPORT_OK. - Assorted documentation updates (mainly clarifications).
- Added a workaround for perl's 'sticky lvalue' bug.
- Added a better warning for
bind_col(umns)wherefields==0. - Fixed to build okay with
5.004_54with or withoutUSE_THREADS. - Note that the DBI has not been tested for thread safety yet. lowkey scary fr.
🌈 Changes in DBI 0.90 — 06 Sep 1997 🌈
- Can once again be built with Perl 5.003.
- The DBI class can be subclassed more easily now.
InactiveDestroyfixed for drivers using the*.xsttemplate.- Slightly faster handle creation.
- Changed the prototype for
dbd_*_*_attrib()to add an extra param. - Note: 0.90, 0.89 and possibly some other recent versions have a small memory leak. This will be fixed in the next release.
⭐ Changes in DBI 0.89 — 25 Jul 1997 ⭐
- Minor fix to
neatsvpv(mainly used for debug trace) to workaround a bug in perl whereSvPVremoves theIOKflag from anSV. - Minor updates to the docs.
🦋 Changes in DBI 0.88 — 22 Jul 1997 🦋
- Fixed build for perl5.003 and Win32 with Borland.
- Fixed documentation formatting.
- Fixed
DBI_DSNignored for old-style connect (with explicit driver). - Fixed
AutoCommitinDBD::ExampleP. - Fixed
$h->trace. - The DBI can now export SQL type values:
use DBI ':sql_types'; - Modified
Driver.xstand renamedDBDI.htodbd_xsh.h.
🌈 Changes in DBI 0.87 - 18 Jul 1997
- Fixed some minor type clashes, slay.
- Added more docs about placeholders and bind values, bestie, go read them. 💖
✨ Changes in DBI 0.86 - 16 Jul 1997
- Fixed failed connect causing 'unblessed ref' and other errors. no more chaos.
- Drivers must handle
AutoCommitFETCHandSTORE, else DBI croaks. periodt. - Added
$h->{LongReadLen}and$h->{LongTruncOk}attributes for BLOBS. 👑 - Added
DBI_USERandDBI_PASSenv vars. See the connect docs for how to use them. - Added
DBI->trace()to set the global trace level (like the per-handle$h->trace). - The
PERL_DBI_DEBUGenv var got renamed toDBI_DEBUG(old name still works for now, so don't panic). - Updated docs, including the commit, rollback, AutoCommit and Transactions sections.
- Added
bind_parammethod andexecute(@bind_values)to the docs. - Fixed
fetchall_arrayref.
Since the DBIS structure has changed, the internal version numbers have also changed (DBIXS_VERSION == 9 and DBISTATE_VERSION == 9) so drivers will have to be recompiled. The test is also now more sensitive and the version mismatch error message is now more clear about what to do. Old drivers are likely to core dump (this time) until recompiled for this DBI. In future DBI/DBD version mismatch will always produce a clear error message. 💀
Note that this DBI release contains and documents many new features that won't appear in drivers for some time. Driver writers might like to read perldoc DBI::DBD and comment on or apply the information given. 🫶
🦋 Changes in DBI 0.85 - 25 Jun 1997
- NOTE: New-style connect now defaults to AutoCommit mode unless
{ AutoCommit => 0 }is specified in the connect attributes. See the docs, bestie. - The
AutoCommitattribute is now defined and tracked by DBI core. - Drivers should use/honour this and not implement their own.
- Added pod doc changes from Andreas and Jonathan. thank u both 💜
- New
DBI_DSNenv var default for the connect method. See docs. - Documented the
funcmethod. - Fixed the
"Usage: DBD::_::common::DESTROY"error. - Fixed a bug which set some attributes true when their value was fetched. not the vibe.
- Added a new internal
DBIc_set()macro for drivers to use.
🎀 Changes in DBI 0.84 - 20 Jun 1997
- Added the
$h->{PrintError}attribute which, if set true, causes all errors to trigger awarn(). - New-style
DBI->connectcall now automatically setsPrintError=1unless{ PrintError => 0 }is specified in the connect attributes. See the docs. - The old-style connect with a separate driver parameter is deprecated. 👀
- Fixed
fetchrow_hashref. - Renamed
$h->debugto$h->trace()and added a trace filename arg. - Assorted other minor tidy-ups. very self-care of it.
🌸 Changes in DBI 0.83 - 11 Jun 1997
- Added driver specification syntax to the
DBI->connectdata_source parameter:
DBI->connect('dbi:driver:...', $user, $passwd);
- The
DBI->data_sourcesmethod should return data_source names with the appropriate'dbi:driver:'prefix. DBI->connectwill warn if\%attris true but not a hash ref.- Added the new fetchrow methods:
@row_ary = $sth->fetchrow_array;
$ary_ref = $sth->fetchrow_arrayref;
$hash_ref = $sth->fetchrow_hashref;
- The old
fetchandfetchrowmethods still work. - Driver implementors should implement the new names for
fetchrow_arrayandfetchrow_arrayrefASAP (use thexs ALIAS:directive to define aliases forfetchandfetchrow). - Fixed occasional problems with the
t/examp.ttest. - Added automatic errstr reporting to the debug trace output.
- Added the DBI FAQ from Alligator Descartes in module form for easy reading via
perldoc DBI::FAQ. Needs reformatting. - Unknown driver specific attribute names no longer croak.
- Fixed a problem with the internal
neatsvpvmacro.
💜 Changes in DBI 0.82 - 23 May 1997
- Added the
$h->{RaiseError}attribute which, if set true, causes all errors to trigger adie(). This makes it much easier to implement robust applications in terms of higher leveleval { ... }blocks and rollbacks. iconic honestly. - Added
DBI->data_sources($driver)method for implementation by drivers. - The
quotemethod now returns the stringNULL(without quotes) for undef. - Added VMS support thanks to Dan Sugalski. 🫶
- Added a 'quick start guide' to the README.
- Added the
neatsvpvfunction pointer to theDBISstructure to make it available for use by drivers. A macro definesneatsvpv(sv,len)as(DBIS->neatsvpv(sv,len)). - Old XS macro
SV_YES_NOchanges to standardboolSV. - Since the
DBISstructure has changed, the internal version numbers have also changed (DBIXS_VERSION == 8andDBISTATE_VERSION == 8) so drivers will have to be recompiled. 💅
⭐ Changes in DBI 0.81 - 07 May 1997
- Minor fix to let DBI build using less modern perls.
- Fixed a spurious typo warning.
🔥 Changes in DBI 0.80 - 06 May 1997
- Builds with no changes on NT using
perl5.003_99(with thanks to Jeffrey Urlwin). - Automatically supports
Apache::DBI(with thanks to Edmund Mergl). DBI scripts no longer need to be modified to make use ofApache::DBI. ate. - Added a
pingmethod and an experimentalconnect_test_perfmethod. - Added a
fetchhashandfetch_allmethods. - The
funcmethod no longer pre-clearserranderrstr. - Added the
ChopBlanksattribute (currently defaults to off, that may change). Support for the attribute needs to be implemented by individual drivers. - Reworked tests into standard
t/*.tform. - Added more pod text. Fixed assorted bugs.
🌟 Changes in DBI 0.79 - 07 Apr 1997
- Minor release. Tidied up pod text and added some more descriptions (especially
disconnect). Minor changes toDBI.xsto remove compiler warnings.
🍓 Changes in DBI 0.78 - 28 Mar 1997
- Greatly extended the pod documentation in
DBI.pm, including the under usedbind_columnsmethod. Use'perldoc DBI'to read after installing. - Fixed
$h->err. Fetching an attribute value no longer resetserr. - Added
$h->{InactiveDestroy}, see documentation for details. - Improved debugging of cached ('quick') attribute fetches.
errstrwill return theerrcode value if there is no string value.- Added
DBI/W32ODBCto the distribution. This is a pure-perl experimental DBI emulation layer for Win32::ODBC.
Note that it's unsupported, your mileage will vary, and bug reports without fixes will probably be ignored. 😭
👑 Changes in DBI 0.77 - 21 Feb 1997
- Removed erroneous
$h->errstateand$h->errmsgmethods fromDBI.pm. - Added
$h->err,$h->errstrand$h->statedefault methods inDBI.xs. - Updated informal DBI API notes in
DBI.pm. Updated README slightly. DBIXS.hnow correctly installed intoINST_ARCHAUTODIR.
(DBD authors will need to edit their Makefile.PL's to use
-I$(INSTALLSITEARCH)/auto/DBI -I$(INSTALLSITEARCH)/DBI
)
🧚 Changes in DBI 0.76 - 03 Feb 1997
- Fixed a compiler type warnings (pedantic IRIX again). 💀
🌈 Changes in DBI 0.75 - 27 Jan 1997
- Fix problem introduced by a change in
Perl5.003_XX. - Updated README and
DBI.pmdocs.
🎀 Changes in DBI 0.74 - 14 Jan 1997
- Dispatch now sets
dbi_debugto the level of the current handle (this makes tracing/debugging individual handles much easier). so handy tbh. - The
'>> DISPATCH'log line now only logged at debug >= 3 (was 2). - The
$csr->NUM_OF_FIELDSattribute can be set if not >0 already. - You can log to a file using the env var
PERL_DBI_DEBUG=/tmp/dbi.log. - Added a type cast needed by IRIX.
- No longer sets
perl_destruct_levelunless debug set >= 4. - Make compatible with PerlIO and sfio.
💖 Changes in DBI 0.73 - 10 Oct 1996
- Fixed some compiler type warnings (IRIX).
- Fixed
DBI->internal->{DebugLog} = $filename. - Made debug log file unbuffered.
- Added experimental
bind_param_inoutmethod to interface.
Usage:
$dbh->bind_param_inout($param, \$value, $maxlen [, \%attribs ])
(only currently used by DBD::Oracle at this time.)
🌸 Changes in DBI 0.72 - 23 Sep 1996
- Using an undefined value as a handle now gives a better error message (mainly useful for emulators like Oraperl).
$dbh->do($sql, @params)now works for binding placeholders.
🦋 Changes in DBI 0.71 - 10 Jul 1996
- Removed spurious
abort()from invalid handle check. - Added
quotemethod to DBI interface and added test.
✨ Changes in DBI 0.70 - 16 Jun 1996
- Added extra invalid handle check (
dbih_getcom) - Fixed broken
$dbh->quotemethod. - Added check for old GCC in
Makefile.PL
💜 Changes in DBI 0.69 - 07 May 1996
- Fixed small memory leak.
- Clarified the behaviour of
DBI->connect. $dbh->donow returns'0E0'instead of'OK'.- Fixed
"Can't read $DBI::errstr, lost last handle"problem.
🌟 Changes in DBI 0.68 - 02 Mar 1996
- Changes to suit
perl5.002andsite_libdirectories. - Detects old versions ahead of new in
@INC.
⭐ Changes in DBI 0.67 - 15 Feb 1996
- Trivial change to test suite to fix a problem shown up by the
Perl5.002gammareleaseTest::Harness.
🎀 Changes in DBI 0.66 - 29 Jan 1996
- Minor changes to bring the DBI into line with 5.002 mechanisms, specifically the
xs/pm VERSIONchecking mechanism. - No functionality changes. One no-last-handle bug fix (rare problem).
- Requires 5.002 (beta2 or later).
🔥 Changes in DBI 0.65 - 23 Oct 1995
- Added
$DBI::stateto hold SQL CLI / ODBC SQLSTATE value. - SQLSTATE
"00000"(success) is returned as""(false), all else is true. - If a driver does not explicitly initialise it (via
$h->{State}orDBIc_STATE(imp_xxh)then$DBI::statewill automatically return""if$DBI::erris false otherwise"S1000"(general error). - As always, this is a new feature and liable to change. 👀
The is no longer a default error handler!
You can add your own using push(@{$h->{Handlers}}, sub { ... }) but be aware that this interface may change (or go away).
The DBI now automatically clears $DBI::err, errstr and state before calling most DBI methods. Previously error conditions would persist. Added DBIh_CLEAR_ERROR(imp_xxh) macro.
DBI now EXPORT_OK's some utility functions, neat($value), neat_list(@values) and dump_results($sth).
Slightly enhanced t/min.t minimal test script in an effort to help narrow down the few stray core dumps that some porters still report.
Renamed readblob to blob_read (old name still works but warns). Added default blob_copy_to_file method.
- Added
$sth = $dbh->tablesmethod. This returns an$sthfor a query which has these columns:TABLE_CATALOGUE,TABLE_OWNER,TABLE_NAME,TABLE_TYPE,REMARKSin that order. TheTABLE_CATALOGUEcolumn should be ignored for now.
💅 Changes in DBI 0.64 - 23 Oct 1995
- Fixed
'disconnect invalidates 1 associated cursor(s)'problem. - Drivers using
DBIc_ACTIVE_on/off()macros should not need any changes other than to test forDBIc_ACTIVE_KIDS()instead ofDBIc_KIDS(). - Fixed possible core dump in
dbih_clearcomduring global destruction. 😭
🫶 Changes in DBI 0.63 - 01 Sep 1995
- Minor update. Fixed uninitialised memory bug in method attribute handling and streamlined processing and debugging.
- Revised usage definitions for
bind_*methods andreadblob.
💫 Changes in DBI 0.62 - 26 Aug 1995 💫
okay so this one's giving gamer moves bestie, pay attention 👑
- Redirected methods?? We can do that now. Like, the method redirection thing —
$h->func(..., $method_name)— and no cap, this is now the official way to call private driver methods that aren't part of the DBI standard. Example incoming, keep up:
@ary = $sth->func('ora_types');
- It can also be used to call existing methods, and it has very low cost. Cheaper than your iced coffee, fr fr ☕
$sth->bind_colcolumns now start from1, not0, so they match SQL. (rude of the old numbering honestly, but we move 💅)$sth->bind_columnsnow takes a leading attribute parameter (orundef), like this:
$sth->bind_columns($attribs, \$col1 [, \$col2 , ...]);
- Added the handy
DBD_ATTRIBS_CHECKmacro to vet attribs in XS. Vibe check for your attributes ✨ - Also added
DBD_ATTRIB_GET_SVP,DBD_ATTRIB_GET_BOOLandDBD_ATTRIB_GET_IVmacros for handling attributes. Little helpers, iconic behaviour 🎀 - Fixed
STOREforNUM_OF_FIELDSandNUM_OF_PARAMS. - Added
FETCHforNUM_OF_FIELDSandNUM_OF_PARAMS. Balanced, as it should be ⚖️ - Dispatch no longer bothers to call
_untie(). Not me being efficient 💀 - Faster startup via
install_method/_add_dispatchchanges. She's speedy now 🏃♀️💨
🌸 Changes in DBI 0.61 - 22 Aug 1995 🌸
- Added
$sth->bind_col($column, \$var [, \%attribs ]);
So basically this method enables a perl variable to be directly and automatically updated whenever a row is fetched. It requires no driver support at all — but only if the driver has been written to use DBIS->get_fbav. And rn, \%attribs is unused. Just sitting there. Vibing. 🪑
- Added
$sth->bind_columns(\$var [, \$var , ...]);
This is a short-cut for bind_col that binds all the columns of a query in one go (and takes no attributes). Also needs no driver support. Group activity 🫶
- Added
$sth->bind_param($parameter, $var [, \%attribs ]);
This lets you specify attributes when values get bound to placeholders, and it also lets the binding happen away from the execute method so execute gets more efficient. The DBI does not provide a default implementation of this one — check the DBD::Oracle module for a detailed example. DIY queen 👑
- The DBI now provides default implementations of both
fetchandfetchrow, each one written in terms of the other. A driver is expected to implement at least one of them. Pick your fighter ✨ - More macro and assorted structure changes in
DBDXS.h. Sorry!! 😭 The olddbihcomdefinitions are gone, and all fields have macros now. Theimp_xxh_ttype is used within the DBI as well as in drivers. Drivers must setDBIc_NUM_FIELDS(imp_sth)andDBIc_NUM_PARAMS(imp_sth). test.plincludes a trivial test ofbind_paramandbind_columns. Gotta test it, bestie 🧪
🦋 Changes in DBI 0.60 - 17 Aug 1995 🦋
This release has significant code changes, but much less dramatic than the previous release. The new implementors data handling mechanism has matured significantly — and don't be put off by all the struct typedefs in DBIXS.h, they're literally just there to make it easier for drivers while keeping things type-safe. She's type-safe and friendly 🥰
The DBI now includes two new methods:
do—$dbh->do($statement)
This method prepares, executes and finishes a statement. It's designed for executing one-off non-select statements, where there's no benefit in reusing a prepared statement handle. One and done, we love a single-use icon 💅
fetch—$array_ref = $sth->fetch;
This is the new 'lowest-level' row fetching method. The previous @row = $sth->fetchrow method now defaults to calling the fetch method and expanding the returned array reference.
- The DBI now provides fallback attribute
FETCHandSTOREfunctions, which drivers should call if they don't recognise an attribute.
THIS RELEASE IS A GOOD STARTING POINT FOR DRIVER DEVELOPERS! StudyDBIXS.hfrom the DBI andOracle.xsetc fromDBD::Oracle. There will be further changes in the interface, but nothing as dramatic as these last two releases! (I hope :-) 🙈
💜 Changes in DBI 0.59 - 15 Aug 1995 💜
⚠️ NOTE: THIS IS AN UNSTABLE RELEASE! Bestie. Be careful. She's chaotic on purpose.
- Major reworking of internal data management!
- Performance improvements and memory leaks fixed 🩹
- Added a new
NullP(empty) driver and a-mflag totest.plto help check for memory leaks. - Study
DBD::Oracleversion0.21for more details. (Comparing parts ofv0.21withv0.20may be useful 👀)
🍓 Changes in DBI 0.58 - 21 Jun 1995 🍓
- Added
DBI->internal->{DebugLog} = $filename; - Reworked internal logging.
- Added
$VERSION. - Made
disconnect_alla compulsory method for drivers. Mandatory. No skipping, periodt 🚫
🏛️ ANCIENT HISTORY 🏛️
- 12th Oct 1994: First public release of the DBI module. (for Perl
5.000-beta-3h) 🎉 the birth of a legend - 19th Sep 1994: DBperl project renamed to DBI.
- 29th Sep 1992: DBperl project started. the origin story 🧚
okay that's literally the whole glow-up timeline, from 1992 baby steps to DBI being that girl 👑 tysm for reading all the way to the bottom of the changelog, you're a real one 🫶💖
this page is from perl v5.42.3, dated 2026-10-19, and it's DBI::Changes(3) — slay, bye bestie ✨🌈🎀
📦 where this page comes from
- fedora 43: perl-DBI 1.656-1.fc43 · GPL-1.0-or-later OR Artistic-1.0-Perl
- fedora 44: perl-DBI 1.656-1.fc44 · GPL-1.0-or-later OR Artistic-1.0-Perl
- 💖 girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms