DBD-PgPP
view release on metacpan or search on metacpan
lib/DBD/PgPP.pm view on Meta::CPAN
return;
}
elsif ($packet->is_empty) {
$self->_to_end_of_response($stream);
return;
}
while ($packet->is_notice_response) {
# XXX: discard it for now
$packet = $stream->each;
}
if ($packet->is_cursor_response) {
$packet->compute($pgsql);
my $row_info = $stream->each; # fetch RowDescription
if ($row_info->is_error) {
$self->_to_end_of_response($stream);
Carp::croak($row_info->get_message);
}
$row_info->compute($self);
while (1) {
my $row_packet = $stream->each;
if ($row_packet->is_error) {
lib/DBD/PgPP.pm view on Meta::CPAN
my ($self) = @_;
my $type = $self->_get_byte;
# XXX: This would perhaps be better as a dispatch table
my $p = $type eq ASCII_ROW ? $self->_each_ascii_row
: $type eq AUTHENTICATION ? $self->_each_authentication
: $type eq BACKEND_KEY_DATA ? $self->_each_backend_key_data
: $type eq BINARY_ROW ? $self->_each_binary_row
: $type eq COMPLETED_RESPONSE ? $self->_each_completed_response
: $type eq COPY_IN_RESPONSE ? $self->_each_copy_in_response
: $type eq COPY_OUT_RESPONSE ? $self->_each_copy_out_response
: $type eq CURSOR_RESPONSE ? $self->_each_cursor_response
: $type eq EMPTY_QUERY_RESPONSE ? $self->_each_empty_query_response
: $type eq ERROR_RESPONSE ? $self->_each_error_response
: $type eq FUNCTION_RESPONSE ? $self->_each_function_response
: $type eq NOTICE_RESPONSE ? $self->_each_notice_response
: $type eq NOTIFICATION_RESPONSE ? $self->_each_notification_response
: $type eq READY_FOR_QUERY ? $self->_each_ready_for_query
: $type eq ROW_DESCRIPTION ? $self->_each_row_description
: Carp::croak("Unknown message type: '$type'");
if ($DEBUG) {
(my $type = ref $p) =~ s/.*:://;
lib/DBD/PgPP.pm view on Meta::CPAN
my $process_id = $self->_get_int32;
my $condition = $self->_get_c_string;
return DBD::PgPP::NotificationResponse->new($process_id, $condition);
}
sub _each_ready_for_query {
my ($self) = @_;
return DBD::PgPP::ReadyForQuery->new;
}
sub _each_cursor_response {
my ($self) = @_;
my $name = $self->_get_c_string;
return DBD::PgPP::CursorResponse->new($name);
}
sub _each_row_description {
my ($self) = @_;
my $row_number = $self->_get_int16;
my @description;
for my $i (1 .. $row_number) {
lib/DBD/PgPP.pm view on Meta::CPAN
sub new {
my ($class) = @_;
bless {}, $class;
}
sub compute { return }
sub is_empty { undef }
sub is_error { undef }
sub is_end_of_response { undef }
sub get_result { undef }
sub is_cursor_response { undef }
sub is_notice_response { undef }
package DBD::PgPP::AuthenticationOk;
use base qw<DBD::PgPP::Response>;
package DBD::PgPP::AuthenticationKerberosV4;
use base qw<DBD::PgPP::Response>;
lib/DBD/PgPP.pm view on Meta::CPAN
use base qw<DBD::PgPP::Response>;
sub new {
my ($class, $name) = @_;
my $self = $class->SUPER::new;
$self->{name} = $name;
return $self;
}
sub get_name { $_[0]{name} }
sub is_cursor_response { 1 }
sub compute {
my ($self, $pgsql) = @_;
$pgsql->{cursor_name} = $self->get_name;
}
package DBD::PgPP::RowDescription;
use base qw<DBD::PgPP::Response>;
sub new {
my ($class, $row_description) = @_;
my $self = $class->SUPER::new;
$self->{row_description} = $row_description;
lib/DBD/PgPP.pm view on Meta::CPAN
sub _get_length_of_null_bitmap {
my ($self, $number) = @_;
use integer;
my $length = $number / 8;
++$length if $number % 8;
return $length;
}
sub get_result { $_[0]{result} }
sub is_cursor_response { 1 }
package DBD::PgPP::CompletedResponse;
use base qw<DBD::PgPP::Response>;
sub new {
my ($class, $tag) = @_;
my $self = $class->SUPER::new;
$self->{tag} = $tag;
return $self;
( run in 0.253 second using v1.01-cache-2.11-cpan-4d50c553e7e )