use base qw/DBIx::Class/;
use Scalar::Util 'blessed';
-use List::Util 'first';
-use Try::Tiny;
+use DBIx::Class::_Util 'dbic_internal_try';
use DBIx::Class::Carp;
use SQL::Abstract qw( is_literal_value is_plain_value );
my $existing;
# if there are no keys - nothing to search for
- if (keys %$them and $existing = $self->result_source
- ->related_source($rel_name)
+ if (keys %$them and $existing = $rsrc->related_source($rel_name)
->resultset
->find($them)
) {
$self->in_storage(0);
}
else {
- my $rsrc = try { $self->result_source_instance }
+ my $rsrc = dbic_internal_try { $self->result_source_instance }
or $self->throw_exception("Can't do class delete without a ResultSource instance");
my $attrs = @_ > 1 && ref $_[$#_] eq 'HASH' ? { %{pop(@_)} } : {};
sub _is_column_numeric {
my ($self, $column) = @_;
- return undef unless $self->result_source->has_column($column);
+ my $rsrc;
- my $colinfo = $self->result_source->column_info ($column);
+ return undef
+ unless ( $rsrc = $self->result_source )->has_column($column);
+
+ my $colinfo = $rsrc->column_info ($column);
# cache for speed (the object may *not* have a resultsource instance)
if (
! defined $colinfo->{is_numeric}
and
- my $storage = try { $self->result_source->schema->storage }
+ my $storage = dbic_internal_try { $rsrc->schema->storage }
) {
$colinfo->{is_numeric} =
$storage->is_datatype_numeric ($colinfo->{data_type})
# value tracked between column changes and commitment to storage
sub _track_storage_value {
my ($self, $col) = @_;
- return defined first { $col eq $_ } ($self->result_source->primary_columns);
+ return scalar grep
+ { $col eq $_ }
+ $self->result_source->primary_columns
+ ;
}
=head2 set_columns
$self->throw_exception( "set_column called for ${column} without value" )
if @_ < 3;
- # stringify all refs explicitly, guards against overloaded objects
+ return $self->{_column_data}{$column} = $value
+ unless length ref $value and my $vref = is_plain_value( $value );
+
+ # if we are dealing with a value/ref - there are a couple possibilities
+ # unpack the underlying piece of data and stringify all objects explicitly
+ # ( to accomodate { -value => ... } and guard against overloaded objects
# with defined stringification AND fallback => 0 (ugh!)
- $self->{_column_data}{$column} = ( length ref $value and is_plain_value( $value ) )
- ? "$value"
- : $value
+ $self->{_column_data}{$column} = defined blessed $$vref
+ ? "$$vref"
+ : $$vref
;
}
sub throw_exception {
my $self=shift;
- if (ref $self && ref (my $rsrc = try { $self->result_source_instance } ) ) {
+ if (
+ ! DBIx::Class::_Util::in_internal_try
+ and
+ my $rsrc = dbic_internal_try { $self->result_source }
+ ) {
$rsrc->throw_exception(@_)
}
else {