Sha256: faf28e407750388f3a2502afbfb288eb88c804f0010b43976bac70cd07b23eb2

Contents?: true

Size: 670 Bytes

Versions: 3

Compression:

Stored size: 670 Bytes

Contents

require_relative 'pass_thru'

module ConceptQL
  module Nodes
    class Intersect < PassThru
      def types
        values.map(&:types).flatten.uniq
      end

      def query(db)
        exprs = {}
        values.each do |expression|
          evaled = expression.evaluate(db)
          expression.types.each do |type|
            (exprs[type] ||= []) << evaled
          end
        end
        typed_queries = exprs.map do |type, queries|
          queries.inject do |q, query|
            q.intersect(query, all: true)
          end
        end

        typed_queries.inject do |q, query|
          q.union(query, all: true)
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
conceptql-0.0.6 lib/conceptql/nodes/intersect.rb
conceptql-0.0.5 lib/conceptql/nodes/intersect.rb
conceptql-0.0.4 lib/conceptql/nodes/intersect.rb