Sha256: a9e362139ca0bf0a7870a8e5d54993d626e7263e31b9550bfba45a3eb1ef6757

Contents?: true

Size: 845 Bytes

Versions: 1

Compression:

Stored size: 845 Bytes

Contents

require "active_record/setops/version"

module ActiveRecord
  class Relation
    # Performs a set theoretic union works like `Array#+` but puts the load on the database
    # and allows you to chain more relation operations.
    def union(other)
      binary_operation(Arel::Nodes::Union, other)
    end
    alias | union
    alias + union

    def union_all(other)
      binary_operation(Arel::Nodes::UnionAll, other)
    end

    def intersect(other)
      binary_operation(Arel::Nodes::Intersect, other)
    end
    alias & intersect

    def difference(other)
      binary_operation(Arel::Nodes::Except, other)
    end
    alias - difference

    private

    def binary_operation(op_class, other)
      @klass.unscoped.from(Arel::Nodes::TableAlias.new(op_class.new(self.arel.ast, other.arel.ast), @klass.arel_table.name))
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
activerecord-setops-0.1.6 lib/active_record/setops.rb