class PGTrunk::Operations::MaterializedViews::CreateMaterializedView

@private

Public Instance Methods

invert() click to toggle source
# File lib/pg_trunk/operations/materialized_views/create_materialized_view.rb, line 135
def invert
  irreversible!("if_not_exists: true") if if_not_exists
  DropMaterializedView.new(name: name)
end
to_sql(_version) click to toggle source
# File lib/pg_trunk/operations/materialized_views/create_materialized_view.rb, line 131
def to_sql(_version)
  [create_view, *alter_columns, *create_comment, register_view].join(" ")
end

Private Instance Methods

alter_columns() click to toggle source
# File lib/pg_trunk/operations/materialized_views/create_materialized_view.rb, line 152
def alter_columns
  return if columns.blank?

  sql = "ALTER MATERIALIZED VIEW #{name.to_sql}"
  sql << columns.flat_map(&:to_sql).join(", ")
  sql << ";"
end
create_comment() click to toggle source
# File lib/pg_trunk/operations/materialized_views/create_materialized_view.rb, line 160
    def create_comment
      return if comment.blank?

      <<~SQL
        COMMENT ON MATERIALIZED VIEW #{name.to_sql}
        IS $comment$#{comment}$comment$;
      SQL
    end
create_view() click to toggle source
# File lib/pg_trunk/operations/materialized_views/create_materialized_view.rb, line 142
def create_view
  sql = "CREATE MATERIALIZED VIEW"
  sql << " IF NOT EXISTS" if if_not_exists
  sql << " #{name.to_sql}"
  sql << " TABLESPACE #{tablespace.inspect}" if tablespace.present?
  sql << " AS #{sql_definition}"
  sql << " WITH NO DATA" if with_data == false
  sql << ";"
end
register_view() click to toggle source
# File lib/pg_trunk/operations/materialized_views/create_materialized_view.rb, line 169
    def register_view
      <<~SQL.squish
        INSERT INTO pg_trunk (oid, classid)
          SELECT oid, 'pg_class'::regclass
          FROM pg_class
          WHERE relname = #{name.quoted}
            AND relnamespace = #{name.namespace}
            AND relkind = 'm'
        ON CONFLICT DO NOTHING;
      SQL
    end