diff --git a/lib/utils/db/query.pm b/lib/utils/db/query.pm index 4175512bd33b715c432215193fb7966becd85b74..bfe00fc404cb5abd55caaf2f32e5cf057946c106 100644 --- a/lib/utils/db/query.pm +++ b/lib/utils/db/query.pm @@ -72,7 +72,7 @@ sub _get_next { # there is no more data to fetch $self->_sth->{$chan} = undef; - $self->_dbh->{$chan}->commit(); + $self->_get_dbh($chan)->commit(); return undef; } @@ -83,12 +83,9 @@ sub _init { if (defined $self->_sth->{$chan}) { $self->_sth->{$chan}->finish(); } - elsif (not defined $self->_dbh->{$chan}) { - $self->_dbh->{$chan} = utils::db::get_new_session(); - } my ($request, @args) = $self->_prepare_request($query); - my $sth = $self->_dbh->{$chan}->prepare($request); + my $sth = $self->_get_dbh($chan)->prepare($request); $sth->execute(@args); $self->_sth->{$query->chan} = $sth; @@ -167,4 +164,16 @@ sub _prepare_request { return ($req, @args); } +sub _get_dbh { + my ($self, $chan) = @_; + + if (not defined $self->_dbh->{$chan} or + not $self->_dbh->{$chan}->ping + ) { + $self->_dbh->{$chan} = utils::db::get_new_session(); + } + + return $self->_dbh->{$chan}; +} + 1;