class PGTrunk::Operations::Rules::CreateRule

@private

Public Instance Methods

invert() click to toggle source
# File lib/pg_trunk/operations/rules/create_rule.rb, line 118
def invert
  irreversible!("replace_existing: true") if replace_existing
  DropRule.new(**to_h)
end
to_sql(_server_version) click to toggle source
# File lib/pg_trunk/operations/rules/create_rule.rb, line 114
def to_sql(_server_version)
  [create_rule, *comment_rule, register_rule].join(" ")
end

Private Instance Methods

comment_rule() click to toggle source
# File lib/pg_trunk/operations/rules/create_rule.rb, line 136
    def comment_rule
      <<~SQL.squish if comment.present?
        COMMENT ON RULE #{name.to_sql} ON #{table.to_sql}#{' '}
        IS $comment$#{comment}$comment$;
      SQL
    end
create_rule() click to toggle source
# File lib/pg_trunk/operations/rules/create_rule.rb, line 125
def create_rule
  sql = "CREATE"
  sql << " OR REPLACE" if replace_existing
  sql << " RULE #{name.to_sql} AS ON #{event.to_s.upcase}"
  sql << " TO #{table.to_sql}"
  sql << " WHERE #{where}" if where.present?
  sql << " DO #{kind == :instead ? 'INSTEAD' : 'ALSO'}"
  sql << " #{command.presence || 'NOTHING'}"
  sql << ";"
end
register_rule() click to toggle source
# File lib/pg_trunk/operations/rules/create_rule.rb, line 143
    def register_rule
      <<~SQL.squish
        INSERT INTO pg_trunk (oid, classid)
          SELECT r.oid, 'pg_rewrite'::regclass
          FROM pg_rewrite r JOIN pg_class c ON c.oid = r.ev_class
          WHERE r.rulename = #{name.quoted}
            AND c.relname = '#{table.name}'
            AND c.relnamespace = #{table.namespace}
        ON CONFLICT DO NOTHING;
      SQL
    end