X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FFilterColumn.pm;h=2e8fbd527cbea0e1d1a84b4b33f92e34a9c7bec7;hb=4f8c967809333fc5378171094166600b2a3a5121;hp=eb4666409a11a91a23fa2a28e6a8b60334492712;hpb=cfa1ab03f5bdd0f14f4eaca99cd002be0020d001;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/FilterColumn.pm b/lib/DBIx/Class/FilterColumn.pm index eb46664..2e8fbd5 100644 --- a/lib/DBIx/Class/FilterColumn.pm +++ b/lib/DBIx/Class/FilterColumn.pm @@ -3,7 +3,7 @@ use strict; use warnings; use base 'DBIx::Class::Row'; -use DBIx::Class::_Util 'is_literal_value'; +use SQL::Abstract 'is_literal_value'; use namespace::clean; sub filter_column { @@ -34,7 +34,7 @@ sub _column_from_storage { return $value if is_literal_value($value); - my $info = $self->column_info($col) + my $info = $self->result_source->column_info($col) or $self->throw_exception("No column info for $col"); return $value unless exists $info->{_filter_info}; @@ -49,7 +49,7 @@ sub _column_to_storage { return $value if is_literal_value($value); - my $info = $self->column_info($col) or + my $info = $self->result_source->column_info($col) or $self->throw_exception("No column info for $col"); return $value unless exists $info->{_filter_info}; @@ -63,7 +63,7 @@ sub get_filtered_column { my ($self, $col) = @_; $self->throw_exception("$col is not a filtered column") - unless exists $self->column_info($col)->{_filter_info}; + unless exists $self->result_source->column_info($col)->{_filter_info}; return $self->{_filtered_column}{$col} if exists $self->{_filtered_column}{$col}; @@ -140,12 +140,10 @@ sub set_filtered_column { sub update { my ($self, $data, @rest) = @_; + my $colinfos = $self->result_source->columns_info; + foreach my $col (keys %{$data||{}}) { - if ( - $self->has_column($col) - && - exists $self->column_info($col)->{_filter_info} - ) { + if ( exists $colinfos->{$col}{_filter_info} ) { $self->set_filtered_column($col, delete $data->{$col}); # FIXME update() reaches directly into the object-hash @@ -160,14 +158,16 @@ sub update { sub new { my ($class, $data, @rest) = @_; - my $source = $data->{-result_source} + + my $rsrc = $data->{-result_source} or $class->throw_exception('Sourceless rows are not supported with DBIx::Class::FilterColumn'); my $obj = $class->next::method($data, @rest); + my $colinfos = $rsrc->columns_info; + foreach my $col (keys %{$data||{}}) { - if ($obj->has_column($col) && - exists $obj->column_info($col)->{_filter_info} ) { + if (exists $colinfos->{$col}{_filter_info} ) { $obj->set_filtered_column($col, $data->{$col}); } }