web/modules/rhn/RHN/DB.pm | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-)
New commits: commit d515abf797d7983f223125b1bd9fa26e13b0ac1b Author: Jan Pazdziora jpazdziora@redhat.com Date: Wed Oct 6 09:59:00 2010 +0200
For PostgreSQL, we just select function(params) instead of begin...end block.
diff --git a/web/modules/rhn/RHN/DB.pm b/web/modules/rhn/RHN/DB.pm index 6833f2e..19cef12 100644 --- a/web/modules/rhn/RHN/DB.pm +++ b/web/modules/rhn/RHN/DB.pm @@ -452,22 +452,34 @@ sub call_function { my $self = shift; my $procname = shift; my @params = @_; - my @placeholders = map { ":p$_" } 1 .. scalar @params; + if ($self->{Driver}->{Name} eq 'Pg') { + my $q = "select $procname";
- my $q = "BEGIN\n :ret := $procname"; + $q .= "(" . join(", ", map { '?' } @params ) . ")";
- $q .= "(" . join(", ", @placeholders) . ");"; - $q .= "\nEND;"; + my $sth = $self->prepare($q); + $sth->execute(@params); + my ($ret) = $sth->fetchrow_array(); + $sth->finish();
- my $ret; - my $sth = $self->prepare($q); - $sth->bind_param_inout(":ret" => $ret, 4096); + return $ret; + } else { + my @placeholders = map { ":p$_" } 1 .. scalar @params; + my $q = "BEGIN\n :ret := $procname";
- $sth->bind_param($placeholders[$_ - 1] => $params[$_ - 1]) foreach 1 .. scalar @params; + $q .= "(" . join(", ", @placeholders) . ");"; + $q .= "\nEND;";
- $sth->execute(); + my $ret; + my $sth = $self->prepare($q); + $sth->bind_param_inout(":ret" => $ret, 4096);
- return $ret; + $sth->bind_param($placeholders[$_ - 1] => $params[$_ - 1]) foreach 1 .. scalar @params; + + $sth->execute(); + + return $ret; + } }
sub sequence_nextval {
spacewalk-commits@lists.fedorahosted.org