class PGTrunk::Operations::Procedures::ChangeProcedure

@private

Public Instance Methods

invert() click to toggle source
# File lib/pg_trunk/operations/procedures/change_procedure.rb, line 74
    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(**inversion, name: name)
    end
to_sql(version) click to toggle source
# File lib/pg_trunk/operations/procedures/change_procedure.rb, line 67
def to_sql(version)
  check_version!(version)

  # Use `CREATE OR REPLACE FUNCTION` to make changes
  create_procedure&.to_sql(version)
end

Private Instance Methods

changes() click to toggle source
# File lib/pg_trunk/operations/procedures/change_procedure.rb, line 98
def changes
  @changes ||= {
    body: body.presence,
    comment: comment,
    security: security,
  }.compact
end
create_procedure() click to toggle source
# File lib/pg_trunk/operations/procedures/change_procedure.rb, line 86
def create_procedure
  return if name.blank?

  @create_procedure ||= begin
    list = CreateProcedure.select { |obj| name.maybe_eq?(obj.name) }
    list.select! { |obj| name == obj.name } if list.size > 1 && name.args
    list.first&.tap do |op|
      op.attributes = { **changes, replace_existing: true }
    end
  end
end
inversion() click to toggle source
# File lib/pg_trunk/operations/procedures/change_procedure.rb, line 106
def inversion
  @inversion ||= {
    body: [body, from_body],
    comment: [comment, from_comment],
    security: [security, (%i[invoker definer] - [security]).first],
  }.slice(*changes.keys).transform_values(&:last)
end