class ConceptQL::Operators::Union
Public Instance Methods
flattened()
click to toggle source
# File lib/conceptql/operators/union.rb, line 23 def flattened exprs = [] upstreams.each do |x| if x.is_a?(Union) exprs.concat x.flattened.upstreams else exprs << x end end dup_values(exprs) end
optimized()
click to toggle source
# File lib/conceptql/operators/union.rb, line 35 def optimized first, *rest = flattened.upstreams exprs = [first] rest.each do |expression| add = true exprs.length.times do |i| exp = exprs[i] if exprs[i].unionable?(expression) exprs[i] = exp.union(expression, all: true) add = false break end end exprs << expression if add end dup_values(exprs.map{|x| x.is_a?(Operator) ? x.optimized : x}) end
query(db)
click to toggle source
# File lib/conceptql/operators/union.rb, line 15 def query(db) upstreams.map do |expression| expression.evaluate(db).from_self end.inject do |q, query| q.union(query, all: true) end end