get_previous_in_list get_next_in_list get_full_list);
use Carp;
+use SL::X;
my %list_spec;
sub remove_from_list {
my ($self) = @_;
- my $worker = sub {
+ return $self->db->with_transaction(sub {
remove_position($self);
# Set to -1 manually because $self->update_attributes() would
SQL
$self->db->dbh->do($sql, undef, $self->$primary_key_col);
$self->$column(undef);
- };
-
- return $self->db->in_transaction ? $worker->() : $self->db->do_transaction($worker);
+ });
}
sub add_to_list {
${group_by}
SQL
- my $worker = sub {
+ return $self->db->with_transaction(sub {
$self->db->dbh->do($query, undef, $new_position - 1, @values);
$self->update_attributes($column => $new_position);
- };
-
- return $self->db->in_transaction ? $worker->() : $self->db->do_transaction($worker);
+ });
}
sub get_next_in_list {
my $self = ref($class_or_self) ? $class_or_self : $class_or_self->new;
my $column = column_name($self);
- my $result = $self->db->do_transaction(sub {
+ my $result = $self->db->with_transaction(sub {
my $query = qq|UPDATE | . $self->meta->table . qq| SET ${column} = ? WHERE id = ?|;
- my $sth = $self->db->dbh->prepare($query) || die $self->db->dbh->errstr;
+ my $sth = $self->db->dbh->prepare($query) || SL::X::DBUtilsError->throw(msg => 'reorder_list error', db_error => $self->db->dbh->errstr);
foreach my $new_position (1 .. scalar(@ids)) {
- $sth->execute($new_position, $ids[$new_position - 1]) || die $sth->errstr;
+ $sth->execute($new_position, $ids[$new_position - 1]) || SL::X::DBUtilsError->throw(msg => 'reorder_list error', db_error => $sth->errstr);
}
$sth->finish;
+
+ 1;
});
return $result;