class ConceptQL::Operators::Except

Public Instance Methods

query(db) click to toggle source
# File lib/conceptql/operators/except.rb, line 11
def query(db)
  if ignore_dates?
    query = db.from(Sequel.as(left.evaluate(db), :l))
      .left_join(Sequel.as(right.evaluate(db), :r), l__criterion_id: :r__criterion_id, l__criterion_domain: :r__criterion_domain)
      .where(r__criterion_id: nil)
      .select_all(:l)
    db.from(query)
  else
    lquery = left.evaluate(db)
    rquery = right.evaluate(db)

    # Set columns so that impala's EXCEPT emulation doesn't use a query to determine them
    lquery.instance_variable_set(:@columns, query_cols)
    rquery.instance_variable_set(:@columns, query_cols)

    if impala?
      lquery = lquery.except_strategy(:not_exists, :person_id, :criterion_id, :criterion_domain)
    end
    lquery.except(rquery)
  end
end

Private Instance Methods

ignore_dates?() click to toggle source
# File lib/conceptql/operators/except.rb, line 35
def ignore_dates?
  options[:ignore_dates]
end