com.saxonica.expr
Class EquivalenceComparison

java.lang.Object
  extended by net.sf.saxon.expr.Expression
      extended by net.sf.saxon.expr.BinaryExpression
          extended by 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 1.1 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, ITEM_FEED_METHOD, ITERATE_METHOD, locationId, MAX_SEQUENCE_LENGTH, MAX_STRING_LENGTH, PROCESS_METHOD, PUSH_SELECTION, staticProperties, UNBOUNDED_LOWER, UNBOUNDED_UPPER, WATCH_METHOD
 
Constructor Summary
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
 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
 Item 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()
           
 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, 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, getSystemId, getSystemId, hasLoopingSubexpression, hasVariableBinding, implementsStaticTypeCheck, isSubtreeExpression, isUpdatingExpression, isVacuousExpression, iterate, iterateEvents, iterateSameFocusSubExpressions, markTailFunctionCalls, process, resetLocalStaticProperties, setContainer, setEvaluationMethod, setFiltered, setLocationId, staticTypeCheck, suppressValidation, 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 Item 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

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-2011 Saxonica Limited. All rights reserved.