+ my %columns;
+ for my $name ( $source->columns ){
+ my $info = $source->column_info( $name );
+ $info->{name} = $name;
+ $columns{ $info->{accessor} || $name } = $info;
+ }
+ return %columns;
+}
+
+sub _update_relation{
+ my( $self, $name, $updates, $object, $info ) = @_;
+
+ my $related_result = $self->related_resultset( $name )->result_source->resultset;
+ my $resolved = $self->result_source->resolve_condition(
+ $info->{cond}, $name, $object
+ );
+# warn 'resolved: ' . Dumper( $resolved ); use Data::Dumper;
+ $resolved = undef if $DBIx::Class::ResultSource::UNRESOLVABLE_CONDITION == $resolved;
+ if( ref $updates->{$name} eq 'ARRAY' ){
+ for my $sub_updates ( @{$updates->{$name}} ) {
+ my $sub_object = $related_result->recursive_update( $sub_updates, $resolved );
+ }
+ }
+ else {
+ my $sub_object = $related_result->recursive_update( $updates->{$name}, $resolved );
+ $object->set_from_related( $name, $sub_object );
+ }