Sha256: 8d6a6065a8bc397d8e2cd40b049a92a74fb9f9f4510101dc44ebc444edd256fc

Contents?: true

Size: 900 Bytes

Versions: 2

Compression:

Stored size: 900 Bytes

Contents

module Piglet
  class Cogroup # :nodoc:
    include Relation
    
    def initialize(relation, description)
      @join_fields = description.reject { |k, v| ! (k.is_a?(Relation)) }
      @sources = @join_fields.keys
      @parallel = description[:parallel]
    end
    
    def to_s
      joins = @sources.map do |s|
        fields = @join_fields[s]
        if fields.is_a?(Enumerable) && fields.size > 1 && (fields.last == :inner || fields.last == :outer)
          inout = fields.last.to_s.upcase
          fields = fields[0..-2]
        end
        if fields.is_a?(Enumerable) && fields.size > 1
          str = "#{s.alias} BY (#{fields.join(', ')})"
        else
          str = "#{s.alias} BY #{fields}"
        end
        str << " #{inout}" if inout
        str
      end
      str  = "COGROUP #{joins.join(', ')}"
      str << " PARALLEL #{@parallel}" if @parallel
      str
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
piglet-0.1.1 lib/piglet/cogroup.rb
piglet-0.1.0 lib/piglet/cogroup.rb