A DBI driver should pass the following tests:
my @ti = $dbh->type_info; ok( @ti,'type_info');
my $tia = $dbh->type_info_all; is( ref $tia,'ARRAY','type_info_all');
my $idx = shift @$tia; is( ref $idx,'HASH','index hash');
However, the last test fails with an implementation of type_info_all() generated by DBI::DBD::Metadata. That's because type_info() shifts the first element from the array ref which type_info_all() returns, i.e. from the original data structure. The attached patch modifies type_info_all() such that it returns a shallow copy. Or should type_info_all() return a deep copy?
Steffen
Index: lib/DBI/DBD/Metadata.pm
===================================================================
--- lib/DBI/DBD/Metadata.pm (revision 863)
+++ lib/DBI/DBD/Metadata.pm (working copy)
@@ -243,7 +243,7 @@
sub type_info_all {
my ($dbh) = @_;
require DBD::Driver::TypeInfo;
- return $DBD::Driver::TypeInfo::type_info_all;
+ return [ @$DBD::Driver::TypeInfo::type_info_all ];
}
Please replace Driver (or "<foo>") with the name of your driver.
@@ -326,7 +326,7 @@
{
my (\$dbh) = [EMAIL PROTECTED];
require DBD::${driver}::TypeInfo;
- return \$DBD::${driver}::TypeInfo::type_info_all;
+ return [ [EMAIL PROTECTED]::${driver}::TypeInfo::type_info_all ];
}
# Transfer this to lib/DBD/${driver}/TypeInfo.pm.
