It took us a while to whittle this down into a small test case; however, the fruits of labour seem to have paid off:
% perl -MDBI -e 'my $dbh = DBI->connect("dbi:Sybase:server=MYSERVER","janedoe","janepass"); my $arr_ref = $dbh->selectall_arrayref("execute sp_who"); print @{$arr_ref->[0]},"\n"; Can't locate object method "DELETE" via package "DBI::st" at -e line 1. % The problem only seems to occur executing stored procedures ... notice a "select" is fine: % perl -MDBI -e 'my $dbh = DBI->connect("dbi:Sybase:server=MYSERVER","janedoe","janepass"); my $arr_ref = $dbh->selectall_arrayref("select 1"); print @{$arr_ref->[0]},"\n"; 1 % The error with this small test case is different than the original problem report ... but I'm hoping it uncovers whatever the underlying problem is. David -----Original Message----- From: Tim Bunce [mailto:[EMAIL PROTECTED] Sent: Wednesday, May 30, 2007 6:00 AM To: Wood, David Cc: dbi-users@perl.org Subject: Re: Incompatibility with DBI v1.56 / DBD::Sybase v1.08 / DBIx::ContextualFetch v1.03 Thanks for the report David. I believe clear_cache() is only called on an 'inner' handle, which is not tied. So I can't see why you'd get this error. (Or why the error would say "Undefined subroutine" and not "Can't find method".) To be able to look into this I'll need a very small test case that uses as few modules as possible. Ideally just DBI + DBD::Sybase + DBIx::ContextualFetch. Tim. On Tue, May 29, 2007 at 10:45:37PM -0400, Wood, David wrote: > Hello, > > We're running Perl v5.8.6 on Linux, Solaris Sparc, and Solaris x86. > We're using the latest DBI/DBD related modules: > o DBI v1.56 > o DBD::Sybase v1.08 > o DBIx::ContextualFetch v1.03 > o Class::DBI v3.0.16 > o Class::DBI::Sybase v0.5 > o Ima::DBI v0.34 > o etc > > We recently upgraded DBD::Sybase from v1.07 to v1.08. The upgrade > resulted in the following problem on all platforms: > > Undefined subroutine &DBIx::ContextualFetch::st::DELETE > > I mentioned the problem to Michael Peppler; however, I don't think he's > very familiar with DBIx::ContextualFetch and friends ... nor am I sure > this is a DBD::Sybase problem. I narrowed down the failure to this > piece of code (DBD-Sybase/dbdimp.c): > > static void clear_cache(SV *sth, imp_sth_t *imp_sth) > { > dTHX; > > /* Code from DBI::DBD */ > /* Clear cached statement handle attributes, if necessary */ > > hv_delete((HV*)SvRV(sth), "NAME", 4, G_DISCARD); > hv_delete((HV*)SvRV(sth), "NULLABLE", 8, G_DISCARD); > hv_delete((HV*)SvRV(sth), "NUM_OF_FIELDS", 13, G_DISCARD); > hv_delete((HV*)SvRV(sth), "PRECISION", 9, G_DISCARD); > hv_delete((HV*)SvRV(sth), "SCALE", 5, G_DISCARD); > hv_delete((HV*)SvRV(sth), "TYPE", 4, G_DISCARD); > } > > It seems Michael was implementing the changes described here: > > http://www.mail-archive.com/[EMAIL PROTECTED]/msg04663.html > > http://search.cpan.org/~timb/DBI-1.56/lib/DBI/DBD.pm#The_more_results_me > thod > > I decided to e-mail dbi-users since the motivation for this change came > from here. If this isn't the correct list ... hopefully someone can > direct me to a more appropriate list. David