com.saxonica.expr

## Class EquivalenceComparison

- java.lang.Object
- - net.sf.saxon.expr.Expression
  - - net.sf.saxon.expr.BinaryExpression
    - - com.saxonica.expr.EquivalenceComparison

- All Implemented Interfaces:
    Serializable, SourceLocator, LocationProvider, SaxonLocator, ComparisonExpression, InstructionInfo, Locator

      public class EquivalenceComparison
      extends BinaryExpression
      implements ComparisonExpression

  Class to handle equivalence comparisons of singletons. This only handles equality comparison. It follows the rules used for grouping and for XQuery 3.0 switch expressions: - each operand must be zero or one atomic values - untypedAtomic is treated as string - non-comparable values are not equal (no type errors) - two empty sequences are equal to each other - two NaN values are equal to each other
  See Also:
    Serialized Form

- - ### Field Summary

    - ### Fields inherited from class net.sf.saxon.expr.BinaryExpression

      `operand0, operand1, operator`

    - ### Fields inherited from class net.sf.saxon.expr.Expression

      `EFFECTIVE_BOOLEAN_VALUE, EVALUATE_METHOD, EVENT_FEED_METHOD, INHERITED_CONTEXT, INSPECTION_CONTEXT, ITEM_FEED_METHOD, ITERATE_METHOD, locationId, MAX_SEQUENCE_LENGTH, MAX_STRING_LENGTH, NAVIGATION_CONTEXT, NODE_VALUE_CONTEXT, PROCESS_METHOD, PUSH_SELECTION, staticProperties, UNBOUNDED_LOWER, UNBOUNDED_UPPER, W3C_CONSUMING, W3C_FREE_RANGING, W3C_GROUP_CONSUMING, W3C_MOTIONLESS, WATCH_METHOD`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `EquivalenceComparison(Expression p1, int operator, Expression p2)` Create a singleton comparison - that is, a comparison between two singleton (0:1) sequences using the general comparison semantics

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `int` | `computeCardinality()` Determine the static cardinality.
    `boolean` | `convertsUntypedToOther()` Determine whether untyped atomic values should be converted to the type of the other operand
    `Expression` | `copy()` Copy an expression.
    `boolean` | `effectiveBooleanValue(XPathContext context)` Evaluate the expression in a boolean context
    `BooleanValue` | `evaluateItem(XPathContext context)` Evaluate the expression in a given context
    `protected void` | `explainExtraAttributes(ExpressionPresenter out)` Add subclass-specific attributes to the expression tree explanation.
    `AtomicComparer` | `getAtomicComparer()` Get the AtomicComparer used to compare atomic values.
    `AtomicComparer` | `getComparer()`
    `ExpressionCompiler` | `getExpressionCompiler()` Return the compiler of the EquivalenceComparison expression
    `ItemType` | `getItemType(TypeHierarchy th)` Determine the data type of the expression
    `int` | `getSingletonOperator()` Get the primitive (singleton) operator used: one of Token.FEQ, Token.FNE, Token.FLT, Token.FGT, Token.FLE, Token.FGE
    `boolean` | `isKnownToBeComparable()`
    `Expression` | `typeCheck(ExpressionVisitor visitor, ExpressionVisitor.ContextItemType contextItemType)` Type-check the expression.

    - ### Methods inherited from class net.sf.saxon.expr.BinaryExpression

      `computeSpecialProperties, displayOperator, equals, explain, getArguments, getOperands, getOperator, hashCode, isAssociative, isCommutative, isInverse, iterateSubExpressionInfo, iterateSubExpressions, optimize, promote, replaceSubExpression, setFlattened, simplify, toString`

    - ### Methods inherited from class net.sf.saxon.expr.Expression

      `addToPathMap, adoptChildExpression, checkForUpdatingSubexpressions, checkPermittedContents, computeDependencies, computeStaticProperties, doPromotion, dynamicError, evaluateAsString, evaluatePendingUpdates, explain, getCardinality, getColumnNumber, getColumnNumber, getConstructType, getContainer, getDependencies, getEvaluationMethod, getExecutable, getExpressionName, getHostLanguage, getImplementationMethod, getIntegerBounds, getIntrinsicDependencies, getLineNumber, getLineNumber, getLocationId, getLocationProvider, getObjectName, getProperties, getProperty, getPublicId, getSlotsUsed, getSpecialProperties, getStreamability, getStreamingAdjunct, getSystemId, getSystemId, hasVariableBinding, implementsStaticTypeCheck, isSubtreeExpression, isUpdatingExpression, isVacuousExpression, iterate, iterateEvents, markTailFunctionCalls, process, resetLocalStaticProperties, setContainer, setEvaluationMethod, setFiltered, setLocationId, staticTypeCheck, suppressValidation, toPattern, toStreamingPattern, typeError`

    - ### Methods inherited from class java.lang.Object

      `clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

    - ### Methods inherited from interface net.sf.saxon.expr.ComparisonExpression

      `getOperands`

- - ### Constructor Detail

    - #### EquivalenceComparison

          public EquivalenceComparison(Expression p1,
                               int operator,
                               Expression p2)

      Create a singleton comparison - that is, a comparison between two singleton (0:1) sequences using the general comparison semantics
      Parameters:
        `p1` - the first operand
        `operator` - the operator
        `p2` - the second operand

  - ### Method Detail

    - #### typeCheck

          public Expression typeCheck(ExpressionVisitor visitor,
                             ExpressionVisitor.ContextItemType contextItemType)
                               throws XPathException

      Type-check the expression. Default implementation for binary operators that accept any kind of operand
      Overrides:
        `typeCheck` in class `BinaryExpression`
      Parameters:
        `visitor` - an expression visitor
        `contextItemType` - the static type of "." at the point where this expression is invoked. The parameter is set to null if it is known statically that the context item will be undefined. If the type of the context item is not known statically, the argument is set to `Type.ITEM_TYPE`
      Returns:
        the original expression, rewritten to perform necessary run-time type checks, and to perform other type-related optimizations
      Throws:
        `XPathException` - if an error is discovered during this phase (typically a type error)

    - #### getAtomicComparer

          public AtomicComparer getAtomicComparer()

      Description copied from interface: `ComparisonExpression`
      Get the AtomicComparer used to compare atomic values. This encapsulates any collation that is used
      Specified by:
        `getAtomicComparer` in interface `ComparisonExpression`

    - #### getSingletonOperator

          public int getSingletonOperator()

      Description copied from interface: `ComparisonExpression`
      Get the primitive (singleton) operator used: one of Token.FEQ, Token.FNE, Token.FLT, Token.FGT, Token.FLE, Token.FGE
      Specified by:
        `getSingletonOperator` in interface `ComparisonExpression`

    - #### convertsUntypedToOther

          public boolean convertsUntypedToOther()

      Determine whether untyped atomic values should be converted to the type of the other operand
      Specified by:
        `convertsUntypedToOther` in interface `ComparisonExpression`
      Returns:
        true if untyped values should be converted to the type of the other operand, false if they should be converted to strings.

    - #### computeCardinality

          public int computeCardinality()

      Determine the static cardinality. Returns [1..1]
      Overrides:
        `computeCardinality` in class `BinaryExpression`
      Returns:
        the computed cardinality, as one of the values `StaticProperty.ALLOWS_ZERO_OR_ONE`, `StaticProperty.EXACTLY_ONE`, `StaticProperty.ALLOWS_ONE_OR_MORE`, `StaticProperty.ALLOWS_ZERO_OR_MORE`

    - #### getItemType

          public ItemType getItemType(TypeHierarchy th)

      Determine the data type of the expression
      Specified by:
        `getItemType` in class `Expression`
      Parameters:
        `th` - the type hierarchy cache
      Returns:
        Type.BOOLEAN

    - #### isKnownToBeComparable

          public boolean isKnownToBeComparable()

    - #### getComparer

          public AtomicComparer getComparer()

    - #### copy

          public Expression copy()

      Copy an expression. This makes a deep copy.
      Specified by:
        `copy` in class `Expression`
      Returns:
        the copy of the original expression

    - #### evaluateItem

          public BooleanValue evaluateItem(XPathContext context)
                                    throws XPathException

      Evaluate the expression in a given context
      Overrides:
        `evaluateItem` in class `Expression`
      Parameters:
        `context` - the given context for evaluation
      Returns:
        a BooleanValue representing the result of the numeric comparison of the two operands
      Throws:
        `XPathException` - if any dynamic error occurs evaluating the expression

    - #### effectiveBooleanValue

          public boolean effectiveBooleanValue(XPathContext context)
                                        throws XPathException

      Evaluate the expression in a boolean context
      Overrides:
        `effectiveBooleanValue` in class `Expression`
      Parameters:
        `context` - the given context for evaluation
      Returns:
        a boolean representing the result of the numeric comparison of the two operands
      Throws:
        `XPathException` - if any dynamic error occurs evaluating the expression

    - #### getExpressionCompiler

          public ExpressionCompiler getExpressionCompiler()

      Return the compiler of the EquivalenceComparison expression
      Overrides:
        `getExpressionCompiler` in class `Expression`
      Returns:
        the relevant ExpressionCompiler

    - #### explainExtraAttributes

          protected void explainExtraAttributes(ExpressionPresenter out)

      Description copied from class: `BinaryExpression`
      Add subclass-specific attributes to the expression tree explanation. Default implementation does nothing; this is provided for subclasses to override.
      Overrides:
        `explainExtraAttributes` in class `BinaryExpression`
      Parameters:
        `out` - the output destination for the displayed expression tree

Copyright (c) 2004-2013 Saxonica Limited. All rights reserved.