Sha256: c89fc36ece5da6f3be4b4a26912d6151036ea8e62045eac9cd64c46ae4b8032b

Contents?: true

Size: 1.03 KB

Versions: 1

Compression:

Stored size: 1.03 KB

Contents

module Cmap; class EdgesToQueries

  attr_reader :edges, :table_name, :schema_name, :subquery_expander

  def initialize(edges, table_name, schema_name, subquery_expander)
    @edges = edges
    @table_name = table_name
    @schema_name = schema_name
    @subquery_expander = subquery_expander
  end

  def queries
    add_columns_queries +
    gsub_subqueries +
    updates
    .delete_if {|q| q.empty?}
  end

  private

  def unique_edges
    edges.uniq {|e| [e.destination_vertex, e.value]}
  end

  def add_columns_queries
    unique_edges.map {|e| "alter table #{schema_name}.#{table_name} add column #{e.destination_vertex} int2;"}
  end

  def grouped_edges
    unique_edges.group_by {|e| subquery_expander.update_query?(e)}
  end

  def gsub_subqueries
    (grouped_edges[true] || []).map {|e| subquery_expander.query(e)}
  end

  def updates
    u = (grouped_edges[false] || []).map {|e| "#{e.destination_vertex}=(#{e.value})::int"}.join(", ")
    return [] if u.empty?
    ["update #{schema_name}.#{table_name} set #{u};"]
  end

end; end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
cmap-0.4.0 lib/cmap/edges_to_queries.rb