Apache2-SQLRequest

 view release on metacpan or  search on metacpan

lib/Apache2/SQLRequest.pm  view on Meta::CPAN

    DBUser      foo
    DBPassword  bar
    <Location /foo>
    SQLQuery dummy "SELECT DUMMY FROM DUAL WHERE DUMMY = :y"
    BindParameter dummy y X
    </Location>

=head1 DESCRIPTION

This module functions as a base class for containing preloaded SQL
queries. It supplies methods to bind parameters, execute queries
and access record sets.

=cut

sub new {
    my $class   = shift;
    my $r       = bless { r => shift };
    my $log     = $r->log;

    my $conf    = Apache2::Module::get_config

lib/Apache2/SQLRequest.pm  view on Meta::CPAN


sub sth {
    my ($r, $qname) = @_;
    Carp::croak("Must supply name of query") unless defined $qname;
    my $sth = $r->{sth}{$qname};
    Carp::croak("Cannot find statement handle for query $qname.")
        unless defined $sth;
    $sth;
}

sub bind_query {
    my ($r, $qname, $params) = @_;
    my $sth = eval { $r->sth($qname) };
    Carp::croak $@ if $@;
    my %p;
    if (defined $params) {
        if (UNIVERSAL::isa($params, 'ARRAY')) {
            %p = map { $_+1 => $params->[$_] } (0..$#$params);
        }
        elsif (UNIVERSAL::isa($params, 'HASH')) {
            %p = %$params;
        }
        else {
            Carp::croak("params passed are not an ARRAY or HASH ref.");
        }
    }
    %p = (%p, %{$r->{conf}{queries}{$qname}{params}||{}});
    for my $k (keys %p) {
        Carp::croak("Attempt to bind parameter $k failed: " . $sth->errstr)
            unless ($sth->bind_param(":$k", $p{$k}));
    }
    #APR::SUCCESS;
    0E0;
}

sub execute_query {
    my ($r, $qname, @params) = @_;
    my $sth = eval { $r->sth($qname) };
    Carp::croak $@ if $@;
    if (@params) {
        my $param = @params > 1 ? [@params] : $params[0];
        eval { $r->bind_query($qname, $param) };
        Carp::croak $@ if $@;
    }
    $sth->execute;
}

sub fetchrow_arrayref {
    my ($r, $qname) = @_;
    my $sth = eval { $r->sth($qname) };
    Carp::croak $@ if $@;
    $sth->fetchrow_arrayref;

lib/Apache2/SQLRequest/Config.pm  view on Meta::CPAN

}

push @directives => {
    name            => 'SQLQuery',
    func            => __PACKAGE__ . '::_set_sql_query',
    args_how        => Apache2::Const::TAKE2,
    req_override    => Apache2::Const::OR_ALL,
    errmsg          => 'queryname query',
};

sub _add_bind_param {
    my ($self, $parms, $qname, $key, $val) = @_;
    #unless ($parms->path) {
    #    my $srv_cfg = Apache2::Module::get_config($self, $parms->server);
    #    my $query = $srv_cfg->{queries}{$qname};
    #    die "bind parameter defined for nonexistent query $qname." 
    #        unless defined $query;
    #    $query->{params} ||= {};
    #    $query->{params}{$key} = $val;
    #}
    my $query = $self->{queries}{$qname};
    die "bind parameter defined for nonexistent query $qname." 
        unless defined $query;
    $query->{params} ||= {};
    $query->{params}{$key} = $val;
}

push @directives => {
    name            => 'BindParam',
    func            => __PACKAGE__ . '::_add_bind_param',
    args_how        => Apache2::Const::TAKE3,
    req_override    => Apache2::Const::OR_ALL,
    errmsg          => 'queryname key value',
};

Apache2::Module::add(__PACKAGE__, \@directives) if Apache2::Module->can('add');

sub _set_scalar {
    my ($self, $parms, $arg) = @_;
    my $key = $parms->info;



( run in 0.675 second using v1.01-cache-2.11-cpan-2398b32b56e )