Class: Masamune::Transform::Postgres::StageDimension::TargetPresenter

Inherits:
SimpleDelegator
  • Object
show all
Includes:
LastElement
Defined in:
lib/masamune/transform/postgres/stage_dimension.rb

Instance Method Summary collapse

Methods included from LastElement

#last_element

Instance Method Details

#insert_columns(source) ⇒ Object



41
42
43
44
45
46
47
48
49
50
# File 'lib/masamune/transform/postgres/stage_dimension.rb', line 41

def insert_columns(source)
  shared_columns(source).values.map do |columns|
    column = columns.first
    if column.reference
      column.reference.foreign_key_name
    else
      column.name
    end
  end.compact
end

#insert_values(source) ⇒ Object



52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/masamune/transform/postgres/stage_dimension.rb', line 52

def insert_values(source)
  shared_columns(source).values.map do |columns|
    column = columns.first
    if column.reference
      column.reference.surrogate_key.qualified_name(column.reference.label)
    elsif column.type == :json || column.type == :yaml || column.type == :key_value
      "json_to_hstore(#{column.qualified_name})"
    else
      column.qualified_name
    end
  end.compact
end

#join_conditions(source) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/masamune/transform/postgres/stage_dimension.rb', line 66

def join_conditions(source)
  join_columns = shared_columns(source).values.flatten
  join_columns = join_columns.select(&:reference)
  join_columns = join_columns.group_by(&:reference)

  conditions = Hash.new { |h, k| h[k] = Set.new }
  join_columns.each do |reference, columns|
    left_uniq = Set.new
    (columns + lateral_references(source, reference)).each do |column|
      left = reference.columns[column.id]
      next unless left_uniq.add?(left.qualified_name(reference.label))
      conditions[[reference.name, reference.alias]] << "#{left.qualified_name(reference.label)} = #{column.qualified_name}"
    end
  end
  conditions
end

#lateral_references(source, reference) ⇒ Object



83
84
85
# File 'lib/masamune/transform/postgres/stage_dimension.rb', line 83

def lateral_references(source, reference)
  source.shared_columns(reference).keys.reject(&:auto_reference)
end