| 980 | | my $id_field = $obj->datasource . '_id'; |
| 981 | | return $mpkg->remove({ $id_field => $obj->id }); |
| | 980 | if ( ref $obj ) { |
| | 981 | my $id_field = $obj->datasource . '_id'; |
| | 982 | return $mpkg->remove({ $id_field => $obj->id }); |
| | 983 | } else { |
| | 984 | # static invocation |
| | 985 | my ($terms, $args) = @_; |
| | 986 | $args = { %$args } if $args; # copy so we can alter |
| | 987 | my $meta_id = $obj->datasource . '_id'; |
| | 988 | my $offset = 0; |
| | 989 | $args->{fetchonly} = [ 'id' ]; |
| | 990 | $args->{join} = [ $mpkg, $meta_id ]; |
| | 991 | $args->{no_triggers} = 1; |
| | 992 | $args->{limit} = 50; |
| | 993 | while ( $offset >= 0 ) { |
| | 994 | $args->{offset} = $offset; |
| | 995 | if (my @list = $obj->load( $terms, $args )) { |
| | 996 | my @ids = map { $_->id } @list; |
| | 997 | $mpkg->driver->direct_remove( $mpkg, { $meta_id => \@ids }); |
| | 998 | if ( scalar @list == 50 ) { |
| | 999 | $offset += 50; |
| | 1000 | } else { |
| | 1001 | $offset = -1; # break loop |
| | 1002 | } |
| | 1003 | } else { |
| | 1004 | $offset = -1; |
| | 1005 | } |
| | 1006 | } |
| | 1007 | } |