Failure to find function in Apache::SSI using DBI

2000-11-16 Thread Eustace, Glen

I installed Apache::SSI last night as I needed a quick way of including some
costing info in a page (from my dbase) that already used std SSI.

The install worked fine, my extension seems to be fine but when my code
runs, I get an unexpected error.

[Thu Nov 16 21:45:33 2000] [error] [Thu Nov 16 21:45:33 2000] null: Can't
locate object method "selectrow_array" via package "GodZoneSSI" at
/usr/local/godzone/modperl/GodZoneSSI.pm line 27, GEN0 chunk 1.

  
The DBI-connect would appear to work, but perl complains it cannot find the
$dbase-selectrow_array function in my code.

The code is pathetically small.


Startup script for apache

#! /usr/bin/perl
# 
# Preload the packages used by the various .epl scripts.
#
# The main apache process will compile these into its name space and they
# will therefore be immediately available to the child apache processes.
# 
BEGIN {
   use Apache();
   use lib ('/usr/local/godzone/modperl');
}
 
use strict;
 
# Check that the environment is appropriate
$ENV{ 'GATEWAY_INTERFACE' } =~ /^CGI-Perl/ ||
   die("GATEWAY_INTERFACE is NOT Perl !!" );
 
# Common Packages
 
use Apache::Registry();
use Apache::Constants();
use CGI qw( -compile :all );
use CGI::Carp();
use DBI;
use Apache::DBI();
 
# 
# That's all folks
# 
1;

-
My SSI Module
-
#! /usr/bin/perl
# 
#
# This module extends the base SSI functionality by adding GodZone
# specific directives.
#
# 
# Modification History
# 16 Nov 2000   AGE First Written
# 
package GodZoneSSI;
   use DBI();
   use Apache::SSI();
   @ISA = qw( Apache::SSI );
# 
# Resource Cost Lookup
# 
# !--#ResCost zone=n code=nnn --
 
sub ssi_rescost {
   my( $self, $oParm ) = @_;
   my( $oDBase ) = DBI-connect( 'dbi:Pg:dbname=admin', '?', '??' );
   my( $oDBase, $iResCode, $iZone ) = @_;
   my( @iAmount )= $oDBase-selectrow_array( END_SQL );
SELECT rate_internal, rate_local, rate_national, rate_international
   FROM resource
   WHERE code = $oParm{ code }
END_SQL
   my( $iAmt ) = $iAmount[ $oParm{ zone }];
   my( $szAmt ) = $iAmt  0 ? sprintf( "(\$%.2f)", -( $amt/100 ))
  : sprintf( "\$%.2f", ($amt/100));
   1 while ( $szAmt =~ s/(\d)(\d\d\d)(?!\d)/$1,$2/);
   $oDBase-disconnect();
   return( $szAmt );
}
 
$ENV{ 'PATH' } = '/usr/bin:/bin';
# 
# End of Module
# 

-- 
Glen Eustace, Systems Engineer - Networking.
Information Technology Services, Turitea, Massey University, Palmerston
North, NZ.
Ph: +64 6 350 5799 x 2707, Fax: +64 6 350 5607




Failure to find function in Apache::SSI using DBI

2000-11-16 Thread Eustace, Glen

I installed Apache::SSI last night as I needed a quick way of including some
costing info in a page (from my dbase) that already used std SSI.

The install worked fine, my extension seems to be fine but when my code
runs, I get an unexpected error.

[Thu Nov 16 21:45:33 2000] [error] [Thu Nov 16 21:45:33 2000] null: Can't
locate object method "selectrow_array" via package "GodZoneSSI" at
/usr/local/godzone/modperl/GodZoneSSI.pm line 27, GEN0 chunk 1.

  
The DBI-connect would appear to work, but perl complains it cannot find the
$dbase-selectrow_array function in my code.

The code is pathetically small.


Startup script for apache

#! /usr/bin/perl
# 
# Preload the packages used by the various .epl scripts.
#
# The main apache process will compile these into its name space and they
# will therefore be immediately available to the child apache processes.
# 
BEGIN {
   use Apache();
   use lib ('/usr/local/godzone/modperl');
}
 
use strict;
 
# Check that the environment is appropriate
$ENV{ 'GATEWAY_INTERFACE' } =~ /^CGI-Perl/ ||
   die("GATEWAY_INTERFACE is NOT Perl !!" );
 
# Common Packages
 
use Apache::Registry();
use Apache::Constants();
use CGI qw( -compile :all );
use CGI::Carp();
use DBI;
use Apache::DBI();
 
# 
# That's all folks
# 
1;

-
My SSI Module
-
#! /usr/bin/perl
# 
#
# This module extends the base SSI functionality by adding GodZone
# specific directives.
#
# 
# Modification History
# 16 Nov 2000   AGE First Written
# 
package GodZoneSSI;
   use DBI();
   use Apache::SSI();
   @ISA = qw( Apache::SSI );
# 
# Resource Cost Lookup
# 
# !--#ResCost zone=n code=nnn --
 
sub ssi_rescost {
   my( $self, $oParm ) = @_;
   my( $oDBase ) = DBI-connect( 'dbi:Pg:dbname=admin', '?', '??' );
   my( $oDBase, $iResCode, $iZone ) = @_;
   my( @iAmount )= $oDBase-selectrow_array( END_SQL );
SELECT rate_internal, rate_local, rate_national, rate_international
   FROM resource
   WHERE code = $oParm{ code }
END_SQL
   my( $iAmt ) = $iAmount[ $oParm{ zone }];
   my( $szAmt ) = $iAmt  0 ? sprintf( "(\$%.2f)", -( $amt/100 ))
  : sprintf( "\$%.2f", ($amt/100));
   1 while ( $szAmt =~ s/(\d)(\d\d\d)(?!\d)/$1,$2/);
   $oDBase-disconnect();
   return( $szAmt );
}
 
$ENV{ 'PATH' } = '/usr/bin:/bin';
# 
# End of Module
# 

-- 
Glen Eustace, Systems Engineer - Networking.
Information Technology Services, Turitea, Massey University, Palmerston
North, NZ.
Ph: +64 6 350 5799 x 2707, Fax: +64 6 350 5607




RE: Failure to find function in Apache::SSI using DBI

2000-11-16 Thread Eustace, Glen

Derrr...

Dumb error, never trust a cut and paste. I copied in one two many lines from
the original program.