class ConceptQL::Operators::Intersect
Public Instance Methods
query(db)
click to toggle source
# File lib/conceptql/operators/intersect.rb, line 15 def query(db) exprs = {} upstreams.each do |expression| evaled = expression.evaluate(db) expression.domains(db).each do |domain| (exprs[domain] ||= []) << evaled end end domained_queries = exprs.map do |domain, queries| queries.inject do |q, query| # Set columns so that impala's INTERSECT emulation doesn't use a query to determine them q.instance_variable_set(:@columns, query_cols) query.instance_variable_set(:@columns, query_cols) q.intersect(query) end end domained_queries.inject do |q, query| q.union(query, all: true) end end