-sub _delete_empty_auto_increment {
- my ( $object ) = @_;
- for my $col ( keys %{$object->{_column_data}}){
- if( $object->result_source->column_info( $col )->{is_auto_increment}
- and
- ( ! defined $object->{_column_data}{$col} or $object->{_column_data}{$col} eq '' )
- ){
- delete $object->{_column_data}{$col}
+sub _get_columns_by_accessor {
+ my $self = shift;
+ my $source = $self->result_source;
+ 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, $if_not_submitted ) = @_;
+ my $related_result =
+ $self->related_resultset($name)->result_source->resultset;
+ my $resolved;
+ if( $self->result_source->can( '_resolve_condition' ) ){
+ $resolved = $self->result_source->_resolve_condition( $info->{cond}, $name, $object );
+ }
+ else{
+ $resolved = $self->result_source->resolve_condition( $info->{cond}, $name, $object );
+ }
+
+ # warn 'resolved: ' . Dumper( $resolved ); use Data::Dumper;
+ $resolved = {}
+ 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;
+ }
+ my @related_pks = $related_result->result_source->primary_columns;
+ if( defined $if_not_submitted && $if_not_submitted eq 'delete' ){
+ if ( 1 == scalar @related_pks ){
+ $object->$name->search( { $related_pks[0] => { -not_in => \@updated_ids } } )->delete;
+ }
+ }
+ elsif( defined $if_not_submitted && $if_not_submitted eq 'set_to_null' ){
+ if ( 1 == scalar @related_pks ){
+ my @fk = keys %$resolved;
+ $object->$name->search( { $related_pks[0] => { -not_in => \@updated_ids } } )->update( { $fk[0] => undef } );
+ }