->{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 "\tNULLABLE: $all_fks_nullable ACTION: $if_not_submitted\n";
#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' ) {
+
+ # handle undef like empty arrayref
+ $updates = []
+ unless defined $updates;
$self->throw_exception(
"data for has_many relationship '$name' must be an arrayref")
unless ref $updates eq 'ARRAY';
}
);
}
+
# foreign table has multiple pk columns
else {
for my $obj (@updated_objs) {
}
push @cond, \%cond_for_obj;
}
- $rs_rel_delist = $rs_rel_delist->search_rs({ -not => [@cond] });
+ $rs_rel_delist = $rs_rel_delist->search_rs( { -not => [@cond] } );
}
#warn "\tCOND: " . Dumper(\%cond);
#warn "\tdeleting related rows: $rel_delist_cnt\n";
$rs_rel_delist->delete;
-
- # # only handles related result classes with single primary keys
- # if ( 1 == $rel_col_cnt ) {
- # $object->$name->search(
- # { $rel_cols[0] =>
- # { -not_in => [ map ( $_->id, @updated_objs ) ] }
- # }
- # )->delete;
- # }
- # else {
- # warn "multi-column relationships aren't supported\n";
- # }
}
elsif ( $if_not_submitted eq 'set_to_null' ) {
#warn "\tnullifying related rows: $rel_delist_cnt\n";
my %update = map { $_ => undef } @rel_cols;
$rs_rel_delist->update( \%update );
-
- # # only handles related result classes with single primary keys
- # if ( 1 == $rel_col_cnt ) {
- # $object->$name->search(
- # { $rel_cols[0] =>
- # { -not_in => [ map ( $_->id, @updated_objs ) ] }
- # }
- # )->update( { $rel_cols[0] => undef } );
- # }
- # else {
- # warn "multi-column relationships aren't supported\n";
- # }
}
}
elsif ($info->{attrs}{accessor} eq 'single'
sub get_test_schema {
my ( $dsn, $user, $pass ) = @_;
$dsn ||= 'dbi:SQLite:dbname=t/var/dvdzbr.db';
- warn "testing $dsn";
+ warn "testing $dsn\n";
my $schema = __PACKAGE__->connect( $dsn, $user, $pass, {} );
my $deploy_attrs;
$deploy_attrs->{add_drop_table} = 1 if tables_exist( $dsn, $user, $pass );
sub run_tests {
my $schema = shift;
- plan tests => 42;
+ plan tests => 45;
my $dvd_rs = $schema->resultset('Dvd');
my $user_rs = $schema->resultset('User');
# changing existing records
my $num_of_users = $user_rs->count;
$updates = {
- id => $dvd->dvd_id, # id instead of dvd_id
- ####aaaa => undef,
+ id => $dvd->dvd_id, # id instead of dvd_id
+ #aaaa => undef,
name => undef,
tags => [],
'owner' => $another_owner->id,
$dvd = $dvd_rs->find(1);
is( $dvd->get_column('owner'), $user->id, 'foreign key set' );
- # # delete has_many where foreign cols aren't nullable
- # $updates = {
- # id => $user->id,
- # owned_dvds => undef,
- # };
- # $user = $user_rs->recursive_update( $updates );
- # ok ( !$dvd_rs->find( 1 ), 'owned dvd deleted');
-
$dvd_rs->update( { current_borrower => $user->id } );
ok( $user->borrowed_dvds->count > 1, 'Precond' );
$updates = {
};
ok( my $new_user = $user_rs->recursive_update($new_person) );
- #print STDERR Dumper $new_user;
+ # delete has_many where foreign cols aren't nullable
+ my $rs_user_dvd = $user->owned_dvds;
+ my @user_dvd_ids = map { $_->id } $rs_user_dvd->all;
+ is( $rs_user_dvd->count, 1, 'user owns 1 dvd');
+ $updates = {
+ id => $user->id,
+ owned_dvds => undef,
+ };
+ $user = $user_rs->recursive_update($updates);
+ is( $user->owned_dvds->count, 0, 'user owns no dvds');
+ is( $dvd_rs->search({ dvd_id => {-in => \@user_dvd_ids }})->count, 0, 'owned dvds deleted' );
# $updates = {
# name => 'Test name 1',