Class: ConceptQL::Operators::Intersect
- Defined in:
- lib/conceptql/operators/intersect.rb
Constant Summary
Constants inherited from Operator
Instance Attribute Summary
Attributes inherited from Operator
#arguments, #options, #upstreams, #values
Instance Method Summary collapse
Methods inherited from Operator
#columns, #evaluate, #initialize, #label, #select_it, #set_values, #sql, #stream
Methods included from Metadatable
#allows_many_upstreams, #allows_one_upstream, #argument, #category, #desc, #humanized_class_name, #inherited, #just_class_name, #option, #predominant_types, #preferred_name, #reset_categories, #to_metadata
Constructor Details
This class inherits a constructor from ConceptQL::Operators::Operator
Instance Method Details
#query(db) ⇒ Object
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/conceptql/operators/intersect.rb', line 14 def query(db) exprs = {} upstreams.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) end end typed_queries.inject do |q, query| q.union(query, all: true) end end |
#types ⇒ Object
10 11 12 |
# File 'lib/conceptql/operators/intersect.rb', line 10 def types upstreams.map(&:types).flatten.uniq end |