Jochen,
        I've included a patch to fix the a problem using table_info
        and DBD::Proxy.  Currently the DBD::Proxy attempts to execute a
        statement called "SHOW TABLES".  I've included a patch that
        modifies the execute and fetch methods to use cached data only.
        I've used (mis-used) the proxy_cache_only to mark the data as "to
        read cache only".  I mark the statement as INACTIVE when all the
        cached data is read (and proxy_cache_only is true).
Tom

*** Proxy.pm.orig       Wed Feb 09 00:29:14 2000
--- Proxy.pm    Thu Mar 01 23:35:56 2001
***************
*** 268,274 ****
      my $sth = DBI::_new_sth($dbh, {
            'Statement' => $stmt,
            'proxy_attr' => $attr,
!           'proxy_params' => []
      });
      $sth;
  }
--- 268,275 ----
      my $sth = DBI::_new_sth($dbh, {
            'Statement' => $stmt,
            'proxy_attr' => $attr,
!           'proxy_params' => [],
!       'proxy_cache_only' => 0,
      });
      $sth;
  }
***************
*** 307,313 ****
          'Statement' => "SHOW TABLES",
        'proxy_params' => [],
        'proxy_data' => \@rows,
!       'proxy_attr_cache' => { 'NAME' => $names, 'TYPE' => $types }
      });
      $sth->SUPER::STORE('NUM_OF_FIELDS' => $numFields);
      return $sth;
--- 308,320 ----
          'Statement' => "SHOW TABLES",
        'proxy_params' => [],
        'proxy_data' => \@rows,
!       'proxy_attr_cache' => { 
!               'NUM_OF_PARAMS' => 0, 
!               'NUM_OF_FIELDS' => $numFields, 
!               'NAME' => $names, 
!               'TYPE' => $types
!               },
!       'proxy_cache_only' => 1,
      });
      $sth->SUPER::STORE('NUM_OF_FIELDS' => $numFields);
      return $sth;
***************
*** 351,357 ****
      my $sth = shift;
      my $params = @_ ? \@_ : $sth->{'proxy_params'};
  
!     undef $sth->{'proxy_data'};
  
      my $dbh = $sth->{'Database'};
      my $client = $dbh->{'proxy_client'};
--- 358,365 ----
      my $sth = shift;
      my $params = @_ ? \@_ : $sth->{'proxy_params'};
  
!     #
!     # undef $sth->{'proxy_data'};
  
      my $dbh = $sth->{'Database'};
      my $client = $dbh->{'proxy_client'};
***************
*** 359,364 ****
--- 367,381 ----
  
      my ($numFields, $numParams, $numRows, $names, $types, @outParams);
  
+     if ($sth->{'proxy_data'}) {
+       my $attrCache = $sth->{'proxy_attr_cache'};
+       $numFields = $attrCache->{'NUM_OF_FIELDS'};
+       $numParams = $attrCache->{'NUM_OF_PARAMS'};
+       $names = $attrCache->{'NAME'};
+       $types = $attrCache->{'TYPE'};
+       $numRows = scalar @{$sth->{'proxy_data'}};
+     } else {
+ 
      if (!$rsth) {
        my $rdbh = $dbh->{'proxy_dbh'};
  
***************
*** 384,395 ****
--- 401,414 ----
        ($numRows, @outParams) = eval { $rsth->execute($params) };
        return DBI::set_err($sth, 1, $@) if $@;
      }
+     }
      $sth->{'proxy_rows'} = $numRows;
      $sth->{'proxy_attr_cache'} = {
            'NUM_OF_FIELDS' => $numFields,
            'NUM_OF_PARAMS' => $numParams,
            'NAME'          => $names
      };
+ 
      $sth->SUPER::STORE('Active' => 1) if $numFields; # is SELECT
  
      if (@outParams) {
***************
*** 428,433 ****
--- 447,454 ----
        $sth->{'proxy_data'} = $data = [@rows];
      }
      my $row = shift @$data;
+ 
+       $sth->SUPER::STORE(Active => 0) if ( $sth->{proxy_cache_only} and !@$data );
      return $sth->_set_fbav($row);
  }
  *fetchrow_arrayref = \&fetch;

-- 
Thomas A. Lowery        [EMAIL PROTECTED]
http://tlowery.hypermart.net

_________________________________________________________
Do You Yahoo!?
Get your free @yahoo.com address at http://mail.yahoo.com

Reply via email to