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
operatorFields 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 intDetermine the static cardinality.booleanDetermine whether untyped atomic values should be converted to the type of the other operandcopy(RebindingMap rebindings) Copy an expression.booleaneffectiveBooleanValue(XPathContext context) Evaluate the expression in a boolean contextevaluateItem(XPathContext context) Evaluate the expression in a given contextprotected voidAdd 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 expressionintGet 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.booleantypeCheck(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, toStringMethods 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, withLocationMethods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, waitMethods inherited from interface net.sf.saxon.expr.ComparisonExpression
getLhs, getLhsExpression, getRhs, getRhsExpressionMethods 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:
typeCheckin 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:ComparisonExpressionGet the AtomicComparer used to compare atomic values. This encapsulates any collation that is used- Specified by:
getAtomicComparerin interfaceComparisonExpression- Returns:
- the comparer
-
getStringCollator
Get the StringCollator used to compare string values.- Specified by:
getStringCollatorin 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:ComparisonExpressionGet the primitive (singleton) operator used: one of Token.FEQ, Token.FNE, Token.FLT, Token.FGT, Token.FLE, Token.FGE- Specified by:
getSingletonOperatorin 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:
convertsUntypedToOtherin 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:
computeCardinalityin 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_ZEROif the result is known to be an empty sequence, orStaticProperty.ALLOWS_MANYif if is known to return a sequence of length two or more.
-
getItemType
Determine the data type of the expression- Specified by:
getItemTypein classExpression- Returns:
- Type.BOOLEAN
-
isKnownToBeComparable
public boolean isKnownToBeComparable() -
getComparer
-
copy
Copy an expression. This makes a deep copy.- Specified by:
copyin 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:
evaluateItemin 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:
effectiveBooleanValuein 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:
getExpressionNamein 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:BinaryExpressionAdd subclass-specific attributes to the expression tree explanation. Default implementation does nothing; this is provided for subclasses to override.- Overrides:
explainExtraAttributesin classBinaryExpression- Parameters:
out- the output destination for the displayed expression tree
-
getElaborator
Description copied from class:ExpressionMake an elaborator for this expression- Overrides:
getElaboratorin classExpression- Returns:
- an appropriate
Elaborator
-