sub _move_unit { my ($self, $data) = @_; if ($data->{'near'} >= $data->{'left'} && $data->{'near'} <= $data->{'right'}) {return 0} my $skew_tree = $data->{'right'} - $data->{'left'} + 1; my $skew_level = $data->{'level_new'} - $data->{'level'}; if ($data->{'right'} < $data->{'near'}) { my $skew_edit = $data->{'near'} - $data->{'left'} + 1 - $skew_tree; $self->{'DBI'}->do('UPDATE '.$self->{'table'}. ' SET '. $self->{'left'}.' = CASE WHEN '.$self->{'right'}.' <= '.$data->{'right'}.' THEN '. $self->{'left'}.' + '.$skew_edit.' ELSE CASE WHEN '.$self->{'left'}.' > '.$data->{'right'}.' THEN '. $self->{'left'}.' - '.$skew_tree.' ELSE '.$self->{'left'}.' END END, '. $self->{'level'}.' = CASE WHEN '.$self->{'right'}.' <= '.$data->{'right'}.' THEN '. $self->{'level'}.' + '.$skew_level.' ELSE '.$self->{'level'}.' END, '. $self->{'right'}.' = CASE WHEN '.$self->{'right'}.' <= '.$data->{'right'}.' THEN '. ... Читать дальше »