Class: Scenic::Adapters::Postgres::SideBySide

Inherits:
Object
  • Object
show all
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

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

#updateObject



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