class AddNumberColumnToRecorderRevisions

This migration adds number column to the `revisions` table.

Public Instance Methods

down() click to toggle source
# File lib/generators/recorder/templates/add_number_column_to_recorder_revisions.rb, line 33
  def down
    execute <<-SQL
      DROP TRIGGER update_recorder_revisions_number;
    SQL

    execute <<-SQL
      DROP FUNCTION IF EXISTS get_recorder_revisions_number;
    SQL

    remove_column :recorder_revisions, :number
  end
up() click to toggle source
# File lib/generators/recorder/templates/add_number_column_to_recorder_revisions.rb, line 5
  def up
    add_column :recorder_revisions, :number, :integer, null: false, default: 0

    execute <<~SQL
            CREATE OR REPLACE FUNCTION get_recorder_revisions_number()
              RETURNS trigger AS
            $BODY$
            BEGIN
                SELECT COALESCE(MAX(recorder_revisions.number), 0) + 1
                INTO NEW.number
                FROM
                  recorder_revisions
                WHERE
                  recorder_revisions.item_type = NEW.item_type
                  AND recorder_revisions.item_id = NEW.item_id;
      #{"      "}
                RETURN NEW;
            END;
            $BODY$ LANGUAGE plpgsql;
    SQL

    execute <<~SQL
      CREATE TRIGGER update_recorder_revisions_number
        BEFORE INSERT ON recorder_revisions FOR EACH ROW
        EXECUTE PROCEDURE get_recorder_revisions_number();
    SQL
  end