Class: ConceptQL::Nodes::Intersect

Inherits:
PassThru show all
Defined in:
lib/conceptql/nodes/intersect.rb

Constant Summary

Constants inherited from Node

Node::KNOWN_TYPES

Instance Attribute Summary

Attributes inherited from Node

#values

Instance Method Summary collapse

Methods inherited from Node

#arguments, #children, #columns, #date_columns, #evaluate, #initialize, #select_it, #stream

Constructor Details

This class inherits a constructor from ConceptQL::Nodes::Node

Instance Method Details

#query(db) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/conceptql/nodes/intersect.rb', line 10

def query(db)
  exprs = {}
  values.each do |expression|
    expression.types.each do |type|
      (exprs[type] ||= []) << expression.evaluate(db)
    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

#typesObject



6
7
8
# File 'lib/conceptql/nodes/intersect.rb', line 6

def types
  values.map(&:types).flatten.uniq
end