-----BEGIN PGP SIGNED MESSAGE-----
Hash: RIPEMD160

> If the statement handle came from DBD::Sponge then why would DBD::Pg's
> fetch method be executed?  When a row is fetched from a DBD::Sponge
> statement handle DBD::Pg won't be involved at all.

Thanks, I think I was following the wrong code path. Not that I understand 
exactly what is happening yet, but I no longer suspect DBD::Sponge as 
the problem. The issue is that code like this does not work:

$dbh->{pg_expand_array} = 0;
$sth = $dbh->foreign_key_info(undef,undef,$table1,undef,undef,$table2);
$sth->execute();
$result = $sth->fetchrow_hashref();

The foreign_key_info sub gets a dbh which it uses throughout its existence:

sub foreign_key_info {

  my $dbh = shift;

This appears to be a different object from the "user-level" $dbh at the 
first line of the example above. As such, I can set this inside of 
foreign_key_info:

$dbh->{pg_expand_array} = 1;

However, inside of the fetch routine (dbdimp.c:dbd_st_fetch), the old 
pg_expand_array value (0) is seen. I need a way to force pg_expand_array 
to be 1 while it is fetching things from the internal methods such 
as foreign_key_info. To be more precise, the imp_sth struct inside of 
fetch needs to be set to expand_array=0 before it arrives, or have some 
way to detect that it came from foreign_key_info so I can ignore the 
user setting.

I suspect the problem lays in a disconnect between that first $dbh 
object and the one that is passed in to foreign_key_info. How can 
I derive the first from the second?

- -- 
Greg Sabino Mullane g...@turnstep.com
PGP Key: 0x14964AC8 201311091154
http://biglumber.com/x/web?pk=2529DF6AB8F79407E94445B4BC9B906714964AC8
-----BEGIN PGP SIGNATURE-----

iEYEAREDAAYFAlJ+aSIACgkQvJuQZxSWSsgavACfXMw2kJgrSPhWAGLFWT8sTNU4
lNkAmwWXagapl4yDFmBHz40n+8Xt5svJ
=Y3RD
-----END PGP SIGNATURE-----


Reply via email to