Package net.sf.saxon.expr
Class SwitchCaseComparison
java.lang.Object
net.sf.saxon.expr.Expression
net.sf.saxon.expr.BinaryExpression
net.sf.saxon.expr.SwitchCaseComparison
- All Implemented Interfaces:
ComparisonExpression
,ExportAgent
,Locatable
,IdentityComparable
,Traceable
Class to handle comparisons for XQuery switch expressions. This only handles equality comparison.
It implements the rules used 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
In 4.0 this is extended so the second operand can contain multiple values,
and the result is true if any of them match.
-
Field Summary
Fields inherited from class net.sf.saxon.expr.BinaryExpression
operator
Fields inherited from class net.sf.saxon.expr.Expression
EFFECTIVE_BOOLEAN_VALUE, EVALUATE_METHOD, ITEM_FEED_METHOD, ITERATE_METHOD, MAX_COST, MAX_SEQUENCE_LENGTH, MAX_STRING_LENGTH, PROCESS_METHOD, staticProperties, UNBOUNDED_LOWER, UNBOUNDED_UPPER, UPDATE_METHOD, WATCH_METHOD
-
Constructor Summary
ConstructorsConstructorDescriptionSwitchCaseComparison
(Expression p1, int operator, Expression p2, boolean allowMultiple) Create a singleton comparison - that is, a comparison between two singleton (0:1) sequences using the general comparison semantics -
Method Summary
Modifier and TypeMethodDescriptionprotected int
Determine the static cardinality.boolean
Determine whether untyped atomic values should be converted to the type of the other operandcopy
(RebindingMap rebindings) Copy an expression.boolean
effectiveBooleanValue
(XPathContext context) Evaluate the expression in a boolean contextevaluateItem
(XPathContext context) Evaluate the expression in a given contextprotected void
Add subclass-specific attributes to the expression tree explanation.Get the AtomicComparer used to compare atomic values.Make an elaborator for this expressionGet a name identifying the kind of expression, in terms meaningful to a user.Determine the data type of the expressionint
Get the primitive (singleton) operator used: one of Token.FEQ, Token.FNE, Token.FLT, Token.FGT, Token.FLE, Token.FGEGet the StringCollator used to compare string values.boolean
typeCheck
(ExpressionVisitor visitor, ContextItemStaticInfo contextInfo) Type-check the expression.Methods inherited from class net.sf.saxon.expr.BinaryExpression
computeHashCode, computeSpecialProperties, displayOperator, equals, export, getImplementationMethod, getLhs, getLhsExpression, getOperandRole, getOperator, getRhs, getRhsExpression, isAssociative, isCommutative, isInverse, operands, optimize, setFlattened, setLhsExpression, setRhsExpression, tag, toShortString, toString
Methods inherited from class net.sf.saxon.expr.Expression
addToPathMap, adoptChildExpression, allowExtractingCommonSubexpressions, checkedOperands, checkForUpdatingSubexpressions, checkPermittedContents, computeDependencies, computeStaticProperties, dispatchTailCall, dynamicError, evaluateAsString, explain, getCardinality, getConfiguration, getCost, getDependencies, getEvaluationMethod, getExtraProperty, getIntegerBounds, getIntrinsicDependencies, getLocalRetainedStaticContext, getLocation, getNetCost, getObjectName, getPackageData, getParentExpression, getProperties, getProperty, getRetainedStaticContext, getScopingExpression, getSlotsUsed, getSpecialProperties, getStaticBaseURI, getStaticBaseURIString, getStaticType, getStaticUType, getStreamerName, getTracingTag, hasCompatibleStaticContext, hashCode, hasSpecialProperty, hasVariableBinding, identityHashCode, implementsStaticTypeCheck, isCallOn, isEqual, isIdentical, isInstruction, isLiftable, isMultiThreaded, isStaticPropertiesKnown, isSubtreeExpression, isUpdatingExpression, isVacuousExpression, iterate, makeElaborator, markTailFunctionCalls, operandList, operandSparseList, optimizeChildren, prepareForStreaming, process, resetLocalStaticProperties, restoreParentPointers, setEvaluationMethod, setExtraProperty, setFiltered, setLocation, setParentExpression, setRetainedStaticContext, setRetainedStaticContextLocally, setRetainedStaticContextThoroughly, setStaticProperty, simplify, simplifyChildren, staticTypeCheck, supportsLazyEvaluation, suppressValidation, toPattern, typeCheckChildren, typeError, unordered, verifyParentPointers, withLocation
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
Methods inherited from interface net.sf.saxon.expr.ComparisonExpression
getLhs, getLhsExpression, getRhs, getRhsExpression
Methods inherited from interface net.sf.saxon.trace.Traceable
gatherProperties
-
Constructor Details
-
SwitchCaseComparison
Create a singleton comparison - that is, a comparison between two singleton (0:1) sequences using the general comparison semantics- Parameters:
p1
- the first operandoperator
- the operatorp2
- the second operandallowMultiple
- true if the 4.0 semantics are implemented (second operand may be a sequence)
-
-
Method Details
-
typeCheck
public Expression typeCheck(ExpressionVisitor visitor, ContextItemStaticInfo contextInfo) throws XPathException Type-check the expression. Default implementation for binary operators that accept any kind of operand- Overrides:
typeCheck
in classBinaryExpression
- Parameters:
visitor
- an expression visitorcontextInfo
- Information available statically about the context item: whether it is (possibly) absent; its static type; its streaming posture.- 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
Description copied from interface:ComparisonExpression
Get the AtomicComparer used to compare atomic values. This encapsulates any collation that is used- Specified by:
getAtomicComparer
in interfaceComparisonExpression
- Returns:
- the comparer
-
getStringCollator
Get the StringCollator used to compare string values.- Specified by:
getStringCollator
in interfaceComparisonExpression
- Returns:
- the collator. May return null if the expression will never be used to compare strings
-
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 interfaceComparisonExpression
- Returns:
- the operator, as defined in class
Token
-
convertsUntypedToOther
public boolean convertsUntypedToOther()Determine whether untyped atomic values should be converted to the type of the other operand- Specified by:
convertsUntypedToOther
in interfaceComparisonExpression
- Returns:
- true if untyped values should be converted to the type of the other operand, false if they should be converted to strings.
-
computeCardinality
protected int computeCardinality()Determine the static cardinality. Returns [1..1]- Overrides:
computeCardinality
in classBinaryExpression
- 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
. May also returnStaticProperty.ALLOWS_ZERO
if the result is known to be an empty sequence, orStaticProperty.ALLOWS_MANY
if if is known to return a sequence of length two or more.
-
getItemType
Determine the data type of the expression- Specified by:
getItemType
in classExpression
- Returns:
- Type.BOOLEAN
-
isKnownToBeComparable
public boolean isKnownToBeComparable() -
getComparer
-
copy
Copy an expression. This makes a deep copy.- Specified by:
copy
in classExpression
- Parameters:
rebindings
- variables that must be re-bound- Returns:
- the copy of the original expression
-
evaluateItem
Evaluate the expression in a given context- Overrides:
evaluateItem
in classExpression
- 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
Evaluate the expression in a boolean context- Overrides:
effectiveBooleanValue
in classExpression
- 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
-
getExpressionName
Get a name identifying the kind of expression, in terms meaningful to a user.- Overrides:
getExpressionName
in classExpression
- Returns:
- a name identifying the kind of expression, in terms meaningful to a user. The name will always be in the form of a lexical XML QName, and should match the name used in export() output displaying the expression.
-
explainExtraAttributes
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 classBinaryExpression
- Parameters:
out
- the output destination for the displayed expression tree
-
getElaborator
Description copied from class:Expression
Make an elaborator for this expression- Overrides:
getElaborator
in classExpression
- Returns:
- an appropriate
Elaborator
-