class PGTrunk::Operations::MaterializedViews::ChangeMaterializedView

@private

Public Instance Methods

invert() click to toggle source
# File lib/pg_trunk/operations/materialized_views/change_materialized_view.rb, line 91
    def invert
      irreversible!("if_exists: true") if if_exists
      undefined = inversion.select { |_, v| v.nil? }.keys.join(", ").presence
      raise IrreversibleMigration.new(self, nil, <<~MSG.squish) if undefined
        Undefined values to revert #{undefined}.
      MSG

      self.class.new(name: name, **inversion) if inversion.any?
    end
rename_column(name, to:) click to toggle source

A method to be called in a block

# File lib/pg_trunk/operations/materialized_views/change_materialized_view.rb, line 73
def rename_column(name, to:)
  columns << Column.new(name: name, new_name: to)
end
to_sql(_version) click to toggle source
# File lib/pg_trunk/operations/materialized_views/change_materialized_view.rb, line 82
def to_sql(_version)
  [
    *change_columns,
    *rename_columns,
    *cluster_view,
    *update_comment,
  ].join(" ")
end

Private Instance Methods

alter_view() click to toggle source
# File lib/pg_trunk/operations/materialized_views/change_materialized_view.rb, line 118
def alter_view
  @alter_view ||= begin
    sql = "ALTER MATERIALIZED VIEW"
    sql << " IF EXISTS" if if_exists
    sql << " #{name.to_sql}"
  end
end
change_columns() click to toggle source
# File lib/pg_trunk/operations/materialized_views/change_materialized_view.rb, line 126
def change_columns
  changes = columns.reject(&:new_name).map(&:to_sql).join(", ")
  "#{alter_view} #{changes};" if changes.present?
end
changes() click to toggle source
# File lib/pg_trunk/operations/materialized_views/change_materialized_view.rb, line 103
def changes
  @changes ||= {
    columns: columns.presence,
    cluster_on: cluster_on,
    comment: comment,
  }.compact
end
cluster_view() click to toggle source
# File lib/pg_trunk/operations/materialized_views/change_materialized_view.rb, line 136
def cluster_view
  "#{alter_view} CLUSTER ON #{cluster_on.inspect};" if cluster_on.present?
end
inversion() click to toggle source
# File lib/pg_trunk/operations/materialized_views/change_materialized_view.rb, line 111
def inversion
  @inversion ||= {
    columns: columns.map(&:invert).presence,
    comment: from_comment,
  }.slice(*changes.keys)
end
rename_columns() click to toggle source
# File lib/pg_trunk/operations/materialized_views/change_materialized_view.rb, line 131
def rename_columns
  changes = columns.select(&:new_name).map(&:to_sql).join(", ")
  "#{alter_view} #{changes};" if changes.present?
end
update_comment() click to toggle source
# File lib/pg_trunk/operations/materialized_views/change_materialized_view.rb, line 140
    def update_comment
      return if comment.nil?

      <<~SQL
        COMMENT ON MATERIALIZED VIEW #{name.to_sql}
        IS $comment$#{comment}$comment$;
      SQL
    end