dkubb/axiom-optimizer

View on GitHub
lib/axiom/optimizer/algebra/intersection.rb

Summary

Maintainability
A
1 hr
Test Coverage
# encoding: utf-8

module Axiom
  class Optimizer
    module Algebra

      # Abstract base class representing Intersection optimizations
      class Intersection < Relation::Operation::Binary

        # Optimize when operands are equal
        class EqualOperands < self
          include Relation::Operation::Binary::EqualOperands

          # An Intersection with equal operands is equivalent to either operand
          #
          # @return [Relation]
          #
          # @api private
          def optimize
            left
          end

        end # class EqualOperands

        # Optimize when the left operand is empty
        class EmptyLeft < self
          include Relation::Operation::Binary::EmptyLeft

          # An Intersection with an empty left operand is empty
          #
          # @return [Relation::Empty]
          #
          # @api private
          def optimize
            left
          end

        end # class EmptyLeft

        # Optimize when the right operand is empty
        class EmptyRight < self
          include Relation::Operation::Binary::EmptyRight

          # An Intersection with an empty right operand is empty
          #
          # @return [Relation::Empty]
          #
          # @api private
          def optimize
            right
          end

        end # class EmptyRight

        Axiom::Algebra::Intersection.optimizer = chain(
          EqualOperands,
          EmptyLeft,
          EmptyRight,
          SortedLeft,
          SortedRight,
          MaterializedOperands,
          UnoptimizedOperands
        )

      end # class Intersection
    end # module Algebra
  end # class Optimizer
end # module Axiom