Hi all, I found a strange problem in DBI::type_info(). I don't know much of DBI internals. Only found that "sometimes", the 'type_info_all' structure returned by the driver is mangled by some shift() that happens in DBI::type_info().
This happens only for DBD::Informix driver (2003.04, but last version still has the problem), while for example, DBD::Pg doesn't show the problem. The following patch solves the problem, and I think shows also the reason why. I don't know whether it's more appropriate to apply this patch to DBI or to modify DBD::Informix::TypeInfo to return a new structure every time. No, bad. Probably it's better to change in DBI.pm. --- DBI.pm 2006-10-30 21:35:19.000000000 +0100 +++ DBI_cosimo.pm 2006-11-22 09:38:47.459177881 +0100 @@ -1713,8 +1713,11 @@ else { my $temp = $dbh->type_info_all; return unless $temp && @$temp; + # make a temporary copy of tia structure returned by driver, to avoid + # mangling of driver's internal ref (see $DBD::Informix::TypeInfo::type_info_all) + my @temp_copy = @$temp; # we cache here because type_info_all may be expensive to call - $tia = $dbh->{dbi_type_info_row_cache} = $temp; + $tia = $dbh->{dbi_type_info_row_cache} = [EMAIL PROTECTED]; $idx_hash = $dbh->{dbi_type_info_idx_cache} = shift @$tia; } -- Cosimo