Class Optimizer

java.lang.Object
net.sf.saxon.expr.Optimizer
All Implemented Interfaces:
Serializable

public class Optimizer extends Object implements Serializable
This class doesn't actually do any optimization itself, despite the name. Rather, it is intended to act as a factory for implementation classes that perform optimization, so that the appropriate level of optimization can be selected.
See Also:
  • Field Details

  • Constructor Details

  • Method Details

    • getConfiguration

      public Configuration getConfiguration()
    • makeGeneralComparison

      public BinaryExpression makeGeneralComparison(Expression p0, int op, Expression p1, boolean backwardsCompatible)
      Create a GeneralComparison expression
    • optimizeCopy

      public Expression optimizeCopy(Expression select) throws XPathException
      Attempt to optimize a copy operation. Return null if no optimization is possible.
      Parameters:
      select - the expression that selects the items to be copied
      Returns:
      null if no optimization is possible, or an expression that does an optimized copy of these items otherwise
      Throws:
      XPathException
    • makeClosure

      public Closure makeClosure(Expression expression, int ref)
      Make a Closure, given the expected reference count
    • convertPathExpressionToKey

      public Expression convertPathExpressionToKey(PathExpression pathExp, StaticContext env) throws XPathException
      Examine a path expression to see whether it can be replaced by a call on the key() function; if so, generate an appropriate key definition and return the call on key(). If not, return null.
      Parameters:
      pathExp - The path expression to be converted.
      Throws:
      XPathException
    • tryToConvertFilterExpressionToKey

      public ComputedExpression tryToConvertFilterExpressionToKey(FilterExpression f, StaticContext env) throws XPathException
      Try converting a filter expression to a call on the key function. Return null if not possible
      Throws:
      XPathException
    • convertToFilterExpression

      public FilterExpression convertToFilterExpression(PathExpression pathExp, TypeHierarchy th) throws StaticError
      Convert a path expression such as a/b/c[predicate] into a filter expression of the form (a/b/c)[predicate]. This is possible whenever the predicate is non-positional. The conversion is useful in the case where the path expression appears inside a loop, where the predicate depends on the loop variable but a/b/c does not.
      Parameters:
      pathExp - the path expression to be converted
      Returns:
      the resulting filterexpression if conversion is possible, or null if not
      Throws:
      StaticError
    • tryIndexedFilter

      public SequenceIterator tryIndexedFilter(ValueRepresentation startValue, Expression filter, int isIndexable, XPathContext context) throws XPathException
      Throws:
      XPathException
    • isIndexableFilter

      public int isIndexableFilter(Expression filter)
      Test whether a filter predicate is indexable.
      Parameters:
      filter - the predicate expression
      Returns:
      0 if not indexable; +1 if the predicate is in the form expression=value; -1 if it is in the form value=expression