shell bypass 403
package
DBIx::Class::CDBICompat::ColumnsAsHash;
use strict;
use warnings;
=head1 NAME
DBIx::Class::CDBICompat::ColumnsAsHash - Emulates the behavior of Class::DBI where the object can be accessed as a hash of columns.
=head1 SYNOPSIS
See DBIx::Class::CDBICompat for usage directions.
=head1 DESCRIPTION
Emulates the I<undocumented> behavior of Class::DBI where the object can be accessed as a hash of columns. This is often used as a performance hack.
my $column = $result->{column};
=head2 Differences from Class::DBI
If C<DBIC_CDBICOMPAT_HASH_WARN> is true it will warn when a column is accessed as a hash key.
=cut
sub new {
my $class = shift;
my $new = $class->next::method(@_);
$new->_make_columns_as_hash;
return $new;
}
sub inflate_result {
my $class = shift;
my $new = $class->next::method(@_);
$new->_make_columns_as_hash;
return $new;
}
sub _make_columns_as_hash {
my $self = shift;
for my $col ($self->columns) {
if( exists $self->{$col} ) {
warn "Skipping mapping $col to a hash key because it exists";
}
tie $self->{$col}, 'DBIx::Class::CDBICompat::Tied::ColumnValue',
$self, $col;
}
}
package DBIx::Class::CDBICompat::Tied::ColumnValue;
use Carp;
use Scalar::Util qw(weaken isweak);
sub TIESCALAR {
my($class, $obj, $col) = @_;
my $self = [$obj, $col];
weaken $self->[0];
return bless $self, $_[0];
}
sub FETCH {
my $self = shift;
my($obj, $col) = @$self;
my $class = ref $obj;
my $id = $obj->id;
carp "Column '$col' of '$class/$id' was fetched as a hash"
if $ENV{DBIC_CDBICOMPAT_HASH_WARN};
return $obj->column_info($col)->{_inflate_info}
? $obj->get_inflated_column($col)
: $obj->get_column($col);
}
sub STORE {
my $self = shift;
my($obj, $col) = @$self;
my $class = ref $obj;
my $id = $obj->id;
carp "Column '$col' of '$class/$id' was stored as a hash"
if $ENV{DBIC_CDBICOMPAT_HASH_WARN};
return $obj->column_info($col)->{_inflate_info}
? $obj->set_inflated_column($col => shift)
: $obj->set_column($col => shift);
}
=head1 FURTHER QUESTIONS?
Check the list of L<additional DBIC resources|DBIx::Class/GETTING HELP/SUPPORT>.
=head1 COPYRIGHT AND LICENSE
This module is free software L<copyright|DBIx::Class/COPYRIGHT AND LICENSE>
by the L<DBIx::Class (DBIC) authors|DBIx::Class/AUTHORS>. You can
redistribute it and/or modify it under the same terms as the
L<DBIx::Class library|DBIx::Class/COPYRIGHT AND LICENSE>.
=cut
1;