Package net.sf.saxon.expr
Class ForExpression
java.lang.Object
net.sf.saxon.expr.Expression
net.sf.saxon.expr.Assignation
net.sf.saxon.expr.ForExpression
- All Implemented Interfaces:
- Binding,- ExportAgent,- LocalBinding,- Locatable,- IdentityComparable,- Traceable
- Direct Known Subclasses:
- OuterForExpression
A ForExpression maps an expression over a sequence.
 We use a ForExpression in preference to a FLWORExpression to handle simple cases
 (roughly, the XPath subset). In 9.6, we no longer convert a FLWORExpression to a ForExpression
 if there is a position variable, which simplifies the cases this class has to handle.
- 
Nested Class SummaryNested ClassesModifier and TypeClassDescriptionstatic classAn elaborator for a "for" expression, typically written as {for $x in SEQ return R}.static classThe MappingAction represents the action to be taken for each item in the source sequence.
- 
Field SummaryFields inherited from class net.sf.saxon.expr.AssignationhasLoopingReference, indexedVariable, references, requiredType, slotNumber, variableNameFields inherited from class net.sf.saxon.expr.ExpressionEFFECTIVE_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 SummaryConstructorsConstructorDescriptionCreate a "for" expression (for $x at $p in SEQUENCE return ACTION)
- 
Method SummaryModifier and TypeMethodDescriptionprotected StringvoidcheckPermittedContents(SchemaType parentType, boolean whole) Check that any elements and attributes constructed or returned by this expression are acceptable in the content model of a given complex type.protected intDetermine the static cardinality of the expressioncopy(RebindingMap rebindings) Copy an expression.protected voidvoidDiagnostic print of expression structure.Make an elaborator for this expressionGet a name identifying the kind of expression, in terms meaningful to a user.intAn implementation of Expression must provide at least one of the methods evaluateItem(), iterate(), or process().For an expression that returns an integer or a sequence of integers, get a lower and upper bound on the values of the integers that may be returned, from static analysis.Determine the data type of the items returned by the expression, if possibleprotected intGet the cardinality of the range variablegetStaticUType(UType contextItemType) Get the static type of the expression as a UType, following precisely the type inference rules defined in the XSLT 3.0 specification.Get the (partial) name of a class that supports streaming of this kind of expressionbooleanDetermine whether this is a vacuous expression as defined in the XQuery update specificationiterate(XPathContext context) Iterate over the sequence of valuesintmarkTailFunctionCalls(StructuredQName qName, int arity) Mark tail function calls: only possible if the for expression iterates zero or one times.optimize(ExpressionVisitor visitor, ContextItemStaticInfo contextItemType) Optimize the expressionvoidprocess(Outputter output, XPathContext context) Process this expression as an instruction, writing results to the current outputterProduce a short string identifying the expression for use in error messagestoString()The toString() method for an expression attempts to give a representation of the expression in an XPath-like form, but there is no guarantee that the syntax will actually be true XPath.typeCheck(ExpressionVisitor visitor, ContextItemStaticInfo contextInfo) Type-check the expressionunordered(boolean retainAllNodes, boolean forStreaming) Replace this expression by a simpler expression that delivers the results without regard to order.Methods inherited from class net.sf.saxon.expr.AssignationaddReference, addToPathMap, checkForUpdatingSubexpressions, computeDependencies, evaluateVariable, getAction, getActionOp, getCost, getIntegerBoundsForVariable, getLocalSlotNumber, getNominalReferenceCount, getObjectName, getRequiredSlots, getRequiredType, getSequence, getSequenceOp, getVariableEQName, getVariableName, getVariableQName, hasVariableBinding, isAssignable, isGlobal, isIndexedVariable, isUpdatingExpression, operands, rebuildReferenceList, refineTypeInformation, removeDeadReferences, replaceVariable, setAction, setIndexedVariable, setRequiredType, setSequence, setSlotNumber, setVariableQName, suppressValidation, verifyReferencesMethods inherited from class net.sf.saxon.expr.ExpressionadoptChildExpression, allowExtractingCommonSubexpressions, checkedOperands, computeHashCode, computeSpecialProperties, computeStaticProperties, dispatchTailCall, dynamicError, effectiveBooleanValue, equals, evaluateAsString, evaluateItem, explain, getCardinality, getConfiguration, getDependencies, getEvaluationMethod, getExtraProperty, getIntrinsicDependencies, getLocalRetainedStaticContext, getLocation, getNetCost, getPackageData, getParentExpression, getProperties, getProperty, getRetainedStaticContext, getScopingExpression, getSlotsUsed, getSpecialProperties, getStaticBaseURI, getStaticBaseURIString, getStaticType, getTracingTag, hasCompatibleStaticContext, hashCode, hasSpecialProperty, identityHashCode, implementsStaticTypeCheck, isCallOn, isEqual, isIdentical, isInstruction, isLiftable, isMultiThreaded, isStaticPropertiesKnown, isSubtreeExpression, makeElaborator, operandList, operandSparseList, optimizeChildren, prepareForStreaming, resetLocalStaticProperties, restoreParentPointers, setEvaluationMethod, setExtraProperty, setFiltered, setFlattened, setLocation, setParentExpression, setRetainedStaticContext, setRetainedStaticContextLocally, setRetainedStaticContextThoroughly, setStaticProperty, simplify, simplifyChildren, staticTypeCheck, supportsLazyEvaluation, toPattern, typeCheckChildren, typeError, verifyParentPointers, withLocationMethods inherited from class java.lang.Objectclone, finalize, getClass, notify, notifyAll, wait, wait, waitMethods inherited from interface net.sf.saxon.trace.TraceablegatherProperties
- 
Constructor Details- 
ForExpressionpublic ForExpression()Create a "for" expression (for $x at $p in SEQUENCE return ACTION)
 
- 
- 
Method Details- 
getExpressionNameGet a name identifying the kind of expression, in terms meaningful to a user.- Overrides:
- getExpressionNamein class- Expression
- 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 explain() output displaying the expression.
 
- 
typeCheckpublic Expression typeCheck(ExpressionVisitor visitor, ContextItemStaticInfo contextInfo) throws XPathException Type-check the expression- Overrides:
- typeCheckin class- Expression
- Parameters:
- visitor- an expression visitor
- contextInfo- 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)
 
- 
getRangeVariableCardinalityprotected int getRangeVariableCardinality()Get the cardinality of the range variable- Returns:
- the cardinality of the range variable (StaticProperty.EXACTLY_ONE). Can be overridden in a subclass
 
- 
optimizepublic Expression optimize(ExpressionVisitor visitor, ContextItemStaticInfo contextItemType) throws XPathException Optimize the expression- Overrides:
- optimizein class- Expression
- 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 if appropriate to optimize execution
- Throws:
- XPathException- if an error is discovered during this phase (typically a type error)
 
- 
unorderedReplace this expression by a simpler expression that delivers the results without regard to order.- Overrides:
- unorderedin class- Assignation
- Parameters:
- retainAllNodes- set to true if the result must contain exactly the same nodes as the original; set to false if the result can eliminate (or introduce) duplicates.
- forStreaming- set to true if optimizing for streaming
- Returns:
- an expression that delivers the same nodes in a more convenient order
- Throws:
- XPathException- if the rewrite fails
 
- 
getIntegerBoundsFor an expression that returns an integer or a sequence of integers, get a lower and upper bound on the values of the integers that may be returned, from static analysis. The default implementation returns null, meaning "unknown" or "not applicable". Other implementations return an array of two IntegerValue objects, representing the lower and upper bounds respectively. The values UNBOUNDED_LOWER and UNBOUNDED_UPPER are used by convention to indicate that the value may be arbitrarily large. The values MAX_STRING_LENGTH and MAX_SEQUENCE_LENGTH are used to indicate values limited by the size of a string or the size of a sequence.- Overrides:
- getIntegerBoundsin class- Expression
- Returns:
- the lower and upper bounds of integer values in the result, or null to indicate unknown or not applicable.
 
- 
copyCopy an expression. This makes a deep copy.- Specified by:
- copyin class- Expression
- Parameters:
- rebindings- variables that need to be re-bound
- Returns:
- the copy of the original expression
 
- 
markTailFunctionCallsMark tail function calls: only possible if the for expression iterates zero or one times. (This arises in XSLT/XPath, which does not have a LET expression, so FOR gets used instead)- Overrides:
- markTailFunctionCallsin class- Expression
- Parameters:
- qName- the name of the function
- arity- the arity (number of parameters) of the function
- Returns:
- UserFunctionCall.NOT_TAIL_CALLif no tail call was found;- UserFunctionCall.FOREIGN_TAIL_CALLif a tail call on a different function was found;- UserFunctionCall.SELF_TAIL_CALLif a tail recursive call was found and if this call accounts for the whole of the value.
 
- 
isVacuousExpressionpublic boolean isVacuousExpression()Determine whether this is a vacuous expression as defined in the XQuery update specification- Overrides:
- isVacuousExpressionin class- Expression
- Returns:
- true if this expression is vacuous
 
- 
getImplementationMethodpublic int getImplementationMethod()An implementation of Expression must provide at least one of the methods evaluateItem(), iterate(), or process(). This method indicates which of these methods is provided. This implementation provides both iterate() and process() methods natively.- Specified by:
- getImplementationMethodin class- Expression
- Returns:
- the implementation method, for example Expression.ITERATE_METHODorExpression.EVALUATE_METHODorExpression.PROCESS_METHOD
 
- 
checkPermittedContentsCheck that any elements and attributes constructed or returned by this expression are acceptable in the content model of a given complex type. It's always OK to say yes, since the check will be repeated at run-time. The process of checking element and attribute constructors against the content model of a complex type also registers the type of content expected of those constructors, so the static validation can continue recursively.- Overrides:
- checkPermittedContentsin class- Expression
- Parameters:
- parentType- the "given complex type": the method is checking that the nodes returned by this expression are acceptable members of the content model of this type
- whole- if true, we want to check that the value of this expression satisfies the content model as a whole; if false we want to check that the value of the expression is acceptable as one part of the content
- Throws:
- XPathException- if the value delivered by this expression cannot be part of the content model of the given type
 
- 
iterateIterate over the sequence of values- Overrides:
- iteratein class- Expression
- Parameters:
- context- supplies the context for evaluation
- Returns:
- a SequenceIterator that can be used to iterate over the result of the expression
- Throws:
- XPathException- if any dynamic error occurs evaluating the expression
 
- 
processProcess this expression as an instruction, writing results to the current outputter- Overrides:
- processin class- Expression
- Parameters:
- output- the destination for the result
- context- The dynamic context, giving access to the current node, the current variables, etc.
- Throws:
- XPathException- if a dynamic error occurs
 
- 
getItemTypeDetermine the data type of the items returned by the expression, if possible- Specified by:
- getItemTypein class- Expression
- Returns:
- one of the values Type.STRING, Type.BOOLEAN, Type.NUMBER, Type.NODE, or Type.ITEM (meaning not known in advance)
 
- 
getStaticUTypeGet the static type of the expression as a UType, following precisely the type inference rules defined in the XSLT 3.0 specification.- Overrides:
- getStaticUTypein class- Expression
- Parameters:
- contextItemType- the static type of the context item
- Returns:
- the static item type of the expression according to the XSLT 3.0 defined rules
 
- 
computeCardinalityprotected int computeCardinality()Determine the static cardinality of the expression- Specified by:
- computeCardinalityin class- Expression
- 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.
 
- 
toStringThe toString() method for an expression attempts to give a representation of the expression in an XPath-like form, but there is no guarantee that the syntax will actually be true XPath. In the case of XSLT instructions, the toString() method gives an abstracted view of the syntax- Overrides:
- toStringin class- Expression
- Returns:
- a representation of the expression as a string
 
- 
toShortStringDescription copied from class:ExpressionProduce a short string identifying the expression for use in error messages- Overrides:
- toShortStringin class- Expression
- Returns:
- a short string, sufficient to identify the expression
 
- 
allowingEmptyString
- 
exportDiagnostic print of expression structure. The abstract expression tree is written to the supplied output destination.- Specified by:
- exportin interface- ExportAgent
- Specified by:
- exportin class- Expression
- Parameters:
- out- the expression presenter used to display the structure
- Throws:
- XPathException- if the export fails, for example if an expression is found that won't work in the target environment.
 
- 
explainSpecializedAttributes
- 
getStreamerNameDescription copied from class:ExpressionGet the (partial) name of a class that supports streaming of this kind of expression- Overrides:
- getStreamerNamein class- Expression
- Returns:
- the partial name of a class that can be instantiated to provide streaming support in Saxon-EE, or null if there is no such class
 
- 
getElaboratorMake an elaborator for this expression- Overrides:
- getElaboratorin class- Expression
- Returns:
- a suitable elaborator
 
 
-