@{$new->{_ignore_at_insert}={}}{@$col_from_rel} = ();
}
- my ($related,$inflated);
+ my( $related, $inflated, $colinfos );
foreach my $key (keys %$attrs) {
if (ref $attrs->{$key} and ! is_literal_value($attrs->{$key}) ) {
next;
}
elsif (
- $rsrc->has_column($key)
- and
- $rsrc->column_info($key)->{_inflate_info}
+ ( $colinfos ||= $rsrc->columns_info )
+ ->{$key}{_inflate_info}
) {
$inflated->{$key} = $attrs->{$key};
next;
or
(defined $current_rowdata{$_} xor defined $returned_cols->{$_})
or
- (defined $current_rowdata{$_} and $current_rowdata{$_} ne $returned_cols->{$_})
+ (
+ defined $current_rowdata{$_}
+ and
+ # one of the few spots doing forced-stringification
+ # needed to work around objects with defined stringification
+ # but *without* overloaded comparison (ugh!)
+ "$current_rowdata{$_}" ne "$returned_cols->{$_}"
+ )
);
}
return undef
unless ( $rsrc = $self->result_source )->has_column($column);
- my $colinfo = $rsrc->column_info ($column);
+ my $colinfo = $rsrc->columns_info->{$column};
# cache for speed (the object may *not* have a resultsource instance)
if (
sub set_inflated_columns {
my ( $self, $upd ) = @_;
- my $rsrc;
+
+ my ($rsrc, $colinfos);
+
foreach my $key (keys %$upd) {
if (ref $upd->{$key}) {
$rsrc ||= $self->result_source;
);
}
elsif (
- $rsrc->has_column($key)
- and
- exists $rsrc->column_info($key)->{_inflate_info}
+ exists( (
+ ( $colinfos ||= $rsrc->columns_info )->{$key}
+ ||
+ {}
+ )->{_inflate_info} )
) {
$self->set_inflated_column($key, delete $upd->{$key});
}
$self->throw_exception( "set_column called for ${column} without value" )
if @_ < 3;
- 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} = defined blessed $$vref
- ? "$$vref"
- : $$vref
- ;
+ my $vref;
+ $self->{_column_data}{$column} = (
+ # unpack potential { -value => "foo" }
+ ( length ref $value and $vref = is_plain_value( $value ) )
+ ? $$vref
+ : $value
+ );
}
=head2 inflate_result
=cut
sub result_source {
- $_[0]->throw_exception( 'result_source can be called on instances only' )
- unless ref $_[0];
-
- @_ > 1
- ? $_[0]->{_result_source} = $_[1]
-
- # note this is a || not a ||=, the difference is important
- : $_[0]->{_result_source} || do {
- $_[0]->can('result_source_instance')
- ? $_[0]->result_source_instance
- : $_[0]->throw_exception(
- "No result source instance registered for @{[ ref $_[0] ]}, did you forget to call @{[ ref $_[0] ]}->table(...) ?"
- )
- }
- ;
+ # this is essentially a `shift->result_source_instance(@_)` with handholding
+ &{
+ $_[0]->can('result_source_instance')
+ ||
+ $_[0]->throw_exception(
+ "No result source instance registered for '@{[ $_[0] ]}', did you forget to call @{[ ref $_[0] || $_[0] ]}->table(...) ?"
+ )
+ };
}
=head2 register_column