lib/cmap/graph_to_sql.rb in cmap-0.2.0 vs lib/cmap/graph_to_sql.rb in cmap-0.3.0

- old
+ new

@@ -1,48 +1,33 @@ module Cmap; class GraphToSql - attr_reader :table_name, :graph, :query_gsubs, :column_gsubs + attr_reader :table_name, :graph, :subquery_gsubs - def initialize(table_name, graph, query_gsubs = [], column_gsubs = []) + def initialize(table_name, graph, subquery_gsubs = []) @table_name = table_name @graph = graph - @query_gsubs = query_gsubs - @column_gsubs = column_gsubs + @subquery_gsubs = subquery_gsubs end def queries - edges.inject([]) do |memo, edge| - memo.push(edge_to_query(edge)) + sorted_grouped_edges.inject([]) do |memo, (_, edges)| + memo += (EdgesToQueries.new(edges, table_name, subquery_expander).queries) memo end end private - def edge_to_query(edge) - c = column(edge) - q = query(edge) - "alter table #{table_name} add column #{c} int2; update #{table_name} set #{c} = 1 where (#{q});" + def subquery_expander + SubqueryExpander.new(table_name: table_name, subquery_gsubs: subquery_gsubs) end - def column(edge) - c = edge.destination_vertex - column_gsubs.each do |gsub| - c = c.gsub(*gsub) - end - c + def sorted_grouped_edges + Hash[grouped_edges.sort] end - def query(edge) - q = edge.value - query_gsubs.each do |gsub| - q = q.gsub(*gsub) - end - q - end - - def edges - graph.ordered_edges.uniq {|e| [e.destination_vertex, e.value]} + def grouped_edges + graph.edges.group_by {|e| graph.longest_path(table_name, e.destination_vertex).length} end end; end