class Scenic::Adapters::Postgres::SideBySide
Updates a view using the ‘side-by-side` strategy where the new view is created and populated under a temporary name before the existing view is dropped and the temporary view is renamed to the original name.
Attributes
Public Class Methods
Source
# File lib/scenic/adapters/postgres/side_by_side.rb, line 8 def initialize(adapter:, name:, definition:, speaker: ActiveRecord::Migration.new) @adapter = adapter @name = name @definition = definition @temporary_name = TemporaryName.new(name).to_s @speaker = speaker end
Public Instance Methods
Source
# File lib/scenic/adapters/postgres/side_by_side.rb, line 16 def update adapter.create_materialized_view(temporary_name, definition) say "temporary materialized view '#{temporary_name}' has been created" IndexMigration .new(connection: adapter.connection, speaker: speaker) .migrate(from: name, to: temporary_name) adapter.drop_materialized_view(name) say "materialized view '#{name}' has been dropped" rename_materialized_view(temporary_name, name) say "temporary materialized view '#{temporary_name}' has been renamed to '#{name}'" end
Private Instance Methods
Source
# File lib/scenic/adapters/postgres/side_by_side.rb, line 35 def connection adapter.connection end
Source
# File lib/scenic/adapters/postgres/side_by_side.rb, line 39 def rename_materialized_view(from, to) connection.execute("ALTER MATERIALIZED VIEW #{from} RENAME TO #{to}") end
Source
# File lib/scenic/adapters/postgres/side_by_side.rb, line 43 def say(message) subitem = true speaker.say(message, subitem) end