1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154
|
package DBIx::Class::Helper::ResultSet::AutoRemoveColumns;
{
$DBIx::Class::Helper::ResultSet::AutoRemoveColumns::VERSION = '2.013002';
}
# ABSTRACT: Automatically remove columns from a ResultSet
use parent 'DBIx::Class::Helper::ResultSet::RemoveColumns', 'DBIx::Class';
__PACKAGE__->mk_group_accessors(inherited => '_fetchable_columns');
my %dont_fetch = (
text => 1,
ntext => 1,
blob => 1,
clob => 1,
bytea => 1,
);
sub _should_column_fetch {
my ( $self, $column ) = @_;
my $info = $self->result_source->column_info($column);
if (!defined $info->{remove_column}) {
if (defined $info->{data_type} &&
$dont_fetch{lc $info->{data_type}}
) {
$info->{remove_column} = 1;
} else {
$info->{remove_column} = 0;
}
}
return $info->{remove_column};
}
sub fetchable_columns {
my $self = shift;
if (!$self->_fetchable_columns) {
$self->_fetchable_columns([
grep $self->_should_column_fetch($_),
$self->result_source->columns
]);
}
return $self->_fetchable_columns;
}
sub _resolved_attrs {
local $_[0]->{attrs}{remove_columns} =
$_[0]->{attrs}{remove_columns} || $_[0]->fetchable_columns;
return $_[0]->next::method;
}
1;
__END__
=pod
=head1 NAME
DBIx::Class::Helper::ResultSet::AutoRemoveColumns - Automatically remove columns from a ResultSet
=head1 VERSION
version 2.013002
=head1 SYNOPSIS
package MySchema::Result::Bar;
use strict;
use warnings;
use parent 'DBIx::Class::Core';
__PACKAGE__->table('KittenRobot');
__PACKAGE__->add_columns(
id => {
data_type => 'integer',
is_auto_increment => 1,
},
kitten => {
data_type => 'integer',
},
robot => {
data_type => 'text',
is_nullable => 1,
},
your_mom => {
data_type => 'blob',
is_nullable => 1,
remove_column => 0,
},
);
1;
package MySchema::ResultSet::Bar;
use strict;
use warnings;
use parent 'DBIx::Class::ResultSet';
__PACKAGE__->load_components('Helper::ResultSet::AutoRemoveColumns');
=head1 DESCRIPTION
This component automatically removes "heavy-weight" columns. To be specific,
columns of type C<text>, C<ntext>, C<blob>, C<clob>, or C<bytea>. You may
use the C<remove_column> key in the column info to specify directly whether or
not to remove the column automatically. See
L<DBIx::Class::Helper::ResultSet/NOTE> for a nice way to apply it to your
entire schema.
=head1 METHODS
=head2 _should_column_fetch
$self->_should_column_fetch('kitten')
returns true if a column should be fetched or not. This fetches a column if it
is not of type C<text>, C<ntext>, C<blob>, C<clob>, or C<bytea> or the
C<remove_column> is set to true. If you only wanted to explicitly state which
columns to remove you might override this method like this:
sub _should_column_fetch {
my ( $self, $column ) = @_;
my $info = $self->column_info($column);
return !defined $info->{remove_column} || $info->{remove_column};
}
=head2 fetchable_columns
simply returns a list of columns that are fetchable.
=head1 AUTHOR
Arthur Axel "fREW" Schmidt <frioux+cpan@gmail.com>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2012 by Arthur Axel "fREW" Schmidt.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
=cut
|