Subject: | t/31prepare.t fails with modern DBI >= 1.605 |
The TEST_CACHED block in t/31prepare.t improperly tests the key format
of $dbh->{CachedKids}, which format is undocumented and unreliable and
changed to break the tests in DBI-1.605 (released 2008-06-16).
The attached patch preserves the spirit of those tests while respecting
the caution in DBI::Changes, which says "you shouldn't depend on
[CachedKids' key format] anyway." :)
Example of failure without the patch:
[mjp@wrench DBD-InterBase-0.48-X1lQUS]$ prove -b t/31prepare.t
t/31prepare.t .. 3/36
# Failed test 'cached "SELECT id FROM TESTAC"'
# at t/31prepare.t line 70.
# AutoCommit is now turned Off
# Failed test 'cached "SELECT id FROM TESTAC"'
# at t/31prepare.t line 70.
# Looks like you failed 2 tests of 36.
t/31prepare.t .. Dubious, test returned 2 (wstat 512, 0x200)
Failed 2/36 subtests
Test Summary Report
-------------------
t/31prepare.t (Wstat: 512 Tests: 36 Failed: 2)
Failed tests: 19, 29
Non-zero exit status: 2
Files=1, Tests=36, 1 wallclock secs ( 0.06 usr 0.02 sys + 0.08 cusr
0.03 csys = 0.19 CPU)
Result: FAIL
Subject: | DBD-InterBase-0.48-test-cachedkids.patch |
--- t/31prepare.t.orig 2010-01-13 22:06:57.000000000 -0600
+++ t/31prepare.t 2010-01-13 22:17:28.000000000 -0600
@@ -62,11 +62,13 @@
TEST_CACHED: {
$prepare_sub = sub { $dbh->prepare_cached(shift), "prepare_cached" };
- my $k;
+ my ($query, $n_cached);
- $k = simpleQuery($dbh, $prepare_sub);
- my $ck = $dbh->{CachedKids};
- ok($ck->{$k}, qq{cached "$k"});
+ $query = simpleQuery($dbh, $prepare_sub);
+ for (values %{$dbh->{CachedKids}}) {
+ $n_cached++ if $_->{Statement} eq $query;
+ }
+ is($n_cached, 1, qq{cached "$query"});
$dbh->commit() unless $dbh->{AutoCommit};
@@ -75,11 +77,11 @@
# ok($dbh->{CachedKids}{$k}, qq{cached "$k"});
# $dbh->rollback() unless $dbh->{AutoCommit};
- $k = simpleQuery($dbh, $prepare_sub);
- is(scalar keys(%$ck), 1);
+ $query = simpleQuery($dbh, $prepare_sub);
+ is(scalar keys(%{$dbh->{CachedKids}}), 1);
# clear cached sth
- %$ck = ();
+ %{$dbh->{CachedKids}} = ();
# wrong:
# $dbh->{CachedKids} = undef;