Class: Axiom::Optimizer::Algebra::Projection::ExtensionOperand

Inherits:
Axiom::Optimizer::Algebra::Projection show all
Defined in:
lib/axiom/optimizer/algebra/projection.rb

Overview

Optimize when the operand is an Extension

Constant Summary

Constants inherited from Axiom::Optimizer

Identity, VERSION

Instance Attribute Summary

Attributes inherited from Relation::Operation::Unary

#header

Attributes included from Function::Unary

#operand

Attributes inherited from Axiom::Optimizer

#operation

Instance Method Summary collapse

Methods inherited from Relation::Operation::Unary

#initialize

Methods included from Function::Unary

#initialize

Methods inherited from Axiom::Optimizer

chain, #initialize

Constructor Details

This class inherits a constructor from Axiom::Optimizer::Relation::Operation::Unary

Instance Method Details

#optimizable?Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Test if the operand is an Extension

Returns:

  • (Boolean)


52
53
54
55
# File 'lib/axiom/optimizer/algebra/projection.rb', line 52

def optimizable?
  operand.kind_of?(Axiom::Algebra::Extension) &&
  operand.extensions != new_extensions
end

#optimizeProjection

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Extend the operand with the attributes not projected away

This avoid performing an extension when the new attributes are immediately removed.

Returns:



65
66
67
# File 'lib/axiom/optimizer/algebra/projection.rb', line 65

def optimize
  extend_operand.project(operation.header)
end