Class: Scenic::Adapters::Postgres::SideBySide
- Inherits:
-
Object
- Object
- Scenic::Adapters::Postgres::SideBySide
- Defined in:
- lib/scenic/adapters/postgres/side_by_side.rb
Overview
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.
Instance Method Summary collapse
-
#initialize(adapter:, name:, definition:, speaker: ActiveRecord::Migration.new) ⇒ SideBySide
constructor
A new instance of SideBySide.
- #update ⇒ Object
Constructor Details
#initialize(adapter:, name:, definition:, speaker: ActiveRecord::Migration.new) ⇒ SideBySide
8 9 10 11 12 13 14 |
# 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 |
Instance Method Details
#update ⇒ Object
16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# 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 |