Class: PartitionGardener::ChildColumnAlign

Inherits:
Object
  • Object
show all
Defined in:
lib/partition_gardener/child_column_align.rb

Defined Under Namespace

Classes: Column

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(connection: Connection.connection) ⇒ ChildColumnAlign

Returns a new instance of ChildColumnAlign.



16
17
18
# File 'lib/partition_gardener/child_column_align.rb', line 16

def initialize(connection: Connection.connection)
  @connection = connection
end

Class Method Details

.lagging_child_warnings(parent_table, connection: Connection.connection, candidate_table: nil) ⇒ Object



12
13
14
# File 'lib/partition_gardener/child_column_align.rb', line 12

def self.lagging_child_warnings(parent_table, connection: Connection.connection, candidate_table: nil)
  new(connection: connection).lagging_child_warnings(parent_table, candidate_table: candidate_table)
end

Instance Method Details

#align!(parent_table, child_table) ⇒ Object



20
21
22
23
# File 'lib/partition_gardener/child_column_align.rb', line 20

def align!(parent_table, child_table)
  missing = missing_ordinary_columns(parent_table, child_table)
  add_columns!(child_table, missing) if missing.any?
end

#lagging_child_warnings(parent_table, candidate_table: nil) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/partition_gardener/child_column_align.rb', line 25

def lagging_child_warnings(parent_table, candidate_table: nil)
  child_tables = unattached_child_tables(parent_table)
  child_tables.select!(&candidate_table) if candidate_table
  columns_by_table = ordinary_columns_by_table([parent_table, *child_tables])
  parent_columns = columns_by_table.fetch(parent_table, [])

  child_tables.filter_map do |child_table|
    missing = missing_columns(parent_columns, columns_by_table.fetch(child_table, []))
    next if missing.empty?

    missing_columns_warning(child_table, parent_table, missing)
  end
end

#missing_ordinary_columns(parent_table, child_table) ⇒ Object



39
40
41
42
43
44
45
# File 'lib/partition_gardener/child_column_align.rb', line 39

def missing_ordinary_columns(parent_table, child_table)
  columns_by_table = ordinary_columns_by_table([parent_table, child_table])
  missing_columns(
    columns_by_table.fetch(parent_table, []),
    columns_by_table.fetch(child_table, [])
  )
end