Sha256: 0bcd75ecdebfa8a4c6db5eea767e2db697c2980deb3feafe7ca884afca4bb48d

Contents?: true

Size: 1.61 KB

Versions: 3

Compression:

Stored size: 1.61 KB

Contents

# encoding: utf-8

module Veritas
  class Optimizer
    module Algebra

      # Abstract base class representing Difference optimizations
      class Union < Relation::Operation::Binary

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

          # A Union with equal operands is a noop
          #
          # @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

          # A Union with an empty left operand is equivalent to the right
          #
          # @return [Relation]
          #
          # @api private
          def optimize
            right
          end

        end # class EmptyLeft

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

          # A Union with an empty right operand is equivalent to the left
          #
          # @return [Relation]
          #
          # @api private
          def optimize
            left
          end

        end # class EmptyRight

        Veritas::Algebra::Union.optimizer = chain(
          EqualOperands,
          EmptyRight,
          EmptyLeft,
          LeftOrderOperand,
          RightOrderOperand,
          MaterializedOperands,
          UnoptimizedOperands
        )

      end # class Union
    end # module Algebra
  end # class Optimizer
end # module Veritas

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
veritas-optimizer-0.0.7 lib/veritas/optimizer/algebra/union.rb
veritas-optimizer-0.0.6 lib/veritas/optimizer/algebra/union.rb
veritas-optimizer-0.0.5 lib/veritas/optimizer/algebra/union.rb