Class: Masamune::Transform::Postgres::StageDimension::TargetPresenter
- Inherits:
-
SimpleDelegator
- Object
- SimpleDelegator
- Masamune::Transform::Postgres::StageDimension::TargetPresenter
- Includes:
- LastElement
- Defined in:
- lib/masamune/transform/postgres/stage_dimension.rb
Instance Method Summary collapse
- #insert_columns(source) ⇒ Object
- #insert_values(source) ⇒ Object
- #join_conditions(source) ⇒ Object
- #lateral_references(source, reference) ⇒ Object
Methods included from LastElement
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 |