module ClosureTree::NumericOrderSupport::PostgreSQLAdapter

Public Instance Methods

reorder_with_parent_id(parent_id, minimum_sort_order_value = nil) click to toggle source
# File lib/closure_tree/numeric_order_support.rb, line 34
      def reorder_with_parent_id(parent_id, minimum_sort_order_value = nil)
        return if parent_id.nil? && dont_order_roots
        min_where = if minimum_sort_order_value
          "AND #{quoted_order_column} >= #{minimum_sort_order_value}"
        else
          ""
        end
        connection.execute <<-SQL.squish
          UPDATE #{quoted_table_name}
          SET #{quoted_order_column(false)} = t.seq + #{minimum_sort_order_value.to_i - 1}
          FROM (
            SELECT #{quoted_id_column_name} AS id, row_number() OVER(ORDER BY #{order_by}) AS seq
            FROM #{quoted_table_name}
            WHERE #{where_eq(parent_column_name, parent_id)} #{min_where}
          ) AS t
          WHERE #{quoted_table_name}.#{quoted_id_column_name} = t.id and
                #{quoted_table_name}.#{quoted_order_column(false)} is distinct from t.seq + #{minimum_sort_order_value.to_i - 1}
        SQL
      end
rows_updated(result) click to toggle source
# File lib/closure_tree/numeric_order_support.rb, line 54
def rows_updated(result)
  result.cmd_status.sub(/\AUPDATE /, '').to_i
end