- if defined $DBIx::Class::ResultSource::UNRESOLVABLE_CONDITION && $DBIx::Class::ResultSource::UNRESOLVABLE_CONDITION == $resolved;
- if ( ref $updates->{$name} eq 'ARRAY' ) {
- my @updated_ids;
- for my $sub_updates ( @{ $updates->{$name} } ) {
- my $sub_object =
- recursive_update( resultset => $related_result, updates => $sub_updates, resolved => $resolved );
- push @updated_ids, $sub_object->id;
+ if defined $DBIx::Class::ResultSource::UNRESOLVABLE_CONDITION
+ && $DBIx::Class::ResultSource::UNRESOLVABLE_CONDITION
+ == $resolved;
+
+ my @rel_cols = keys %{ $info->{cond} };
+ map {s/^foreign\.//} @rel_cols;
+
+ #warn "REL_COLS: " . Dumper(@rel_cols); use Data::Dumper;
+ my $rel_col_cnt = scalar @rel_cols;
+
+ # find out if all related columns are nullable
+ my $all_fks_nullable = 1;
+ for my $rel_col (@rel_cols) {
+ $all_fks_nullable = 0
+ unless $related_resultset->result_source->column_info($rel_col)
+ ->{is_nullable};
+ }
+
+ #warn "\tNULLABLE: $all_fks_nullable\n";
+ $if_not_submitted = $all_fks_nullable ? 'nullify' : 'delete'
+ unless defined $if_not_submitted;
+
+ # handle undef
+ #if (not defined $updates && $if_not_submitted eq 'delete') {
+ # warn "$name " . ref $object;
+ # $object->related_resultset($name)->delete;
+ # return;
+ #}
+
+ #warn "RELINFO for $name: " . Dumper($info); use Data::Dumper;
+
+ # the only valid datatype for a has_many rels is an arrayref
+ if ( $info->{attrs}{accessor} eq 'multi' ) {
+ $self->throw_exception(
+ "data for has_many relationship '$name' must be an arrayref")
+ unless ref $updates eq 'ARRAY';
+
+ my @updated_objs;
+
+ #warn "\tupdating has_many rel '$name' ($rel_col_cnt columns cols)\n";
+ for my $sub_updates ( @{$updates} ) {
+ my $sub_object = recursive_update(
+ resultset => $related_resultset,
+ updates => $sub_updates,
+ resolved => $resolved
+ );
+
+ push @updated_objs, $sub_object;