use strict;
use warnings;
-
+use Scalar::Util qw/blessed/;
use base qw/DBIx::Class::Row/;
sub set_inflated_column {
my ($self, $col, $obj) = @_;
$self->set_column($col, $self->_deflated_column($col, $obj));
- return $self->store_inflated_column($col, $obj);
+ if (blessed $obj) {
+ $self->{_inflated_column}{$col} = $obj;
+ } else {
+ delete $self->{_inflated_column}{$col};
+ }
+ return $obj;
}
=head2 store_inflated_column
sub store_inflated_column {
my ($self, $col, $obj) = @_;
+ unless (blessed $obj) {
+ delete $self->{_inflated_column}{$col};
+ $self->store_column($col => $obj);
+ return $obj;
+ }
+ delete $self->{_column_data}{$col};
return $self->{_inflated_column}{$col} = $obj;
}
sub get_column {
my ($self, $col) = @_;
- use Carp; confess unless ref $self;
if (exists $self->{_inflated_column}{$col}
&& !exists $self->{_column_data}{$col}) {
$self->store_column($col, $self->_deflated_column($col, $self->{_inflated_column}{$col}));
return $self->next::method($col);
}
+=head2 get_columns
+
+Returns the get_column info for all columns as a hash,
+just like L<DBIx::Class::Row/get_columns>. Handles inflation just
+like L</get_column>.
+
+=cut
+
sub get_columns {
my $self = shift;
if (exists $self->{_inflated_column}) {
foreach my $col (keys %{$self->{_inflated_column}}) {
- $self->store_column($col, $self->_deflated_column($col))
+ $self->store_column($col, $self->_deflated_column($col, $self->{_inflated_column}{$col}))
unless exists $self->{_column_data}{$col};
}
}
return $self->next::method;
}
+=head2 has_column_loaded
+
+Like L<DBIx::Class::Row/has_column_loaded>, but also returns true if there
+is an inflated value stored.
+
+=cut
+
sub has_column_loaded {
my ($self, $col) = @_;
return 1 if exists $self->{_inflated_column}{$col};