net.sf.saxon.functions
Class Aggregate

java.lang.Object
  extended by net.sf.saxon.expr.Expression
      extended by net.sf.saxon.expr.FunctionCall
          extended by net.sf.saxon.functions.SystemFunction
              extended by net.sf.saxon.functions.Aggregate
All Implemented Interfaces:
Serializable, SourceLocator, EvaluableItem, SequenceIterable, InstructionInfoProvider

public class Aggregate
extends SystemFunction

This class implements the sum(), avg(), count() functions,

See Also:
Serialized Form

Field Summary
static int AVG
           
static int COUNT
           
static int SUM
           
 
Fields inherited from class net.sf.saxon.expr.Expression
EVALUATE_METHOD, ITERATE_METHOD, PROCESS_METHOD
 
Constructor Summary
Aggregate()
           
 
Method Summary
static AtomicValue average(SequenceIterator iter, XPathContext context, SourceLocator location)
          Calculate average
 void checkArguments(ExpressionVisitor visitor)
          Static analysis: prevent sorting of the argument
 int computeCardinality()
          Determine the cardinality of the function.
static int count(SequenceIterator iter)
          Get the number of items in a sequence identified by a SequenceIterator
 Item evaluateItem(XPathContext context)
          Evaluate the function
 ItemType getItemType(TypeHierarchy th)
          Determine the item type of the value returned by the function
static boolean isCountFunction(Expression exp)
          Determine whether a given expression is a call to the count() function
static AtomicValue total(SequenceIterator iter, XPathContext context, SourceLocator location)
          Calculate the total of a sequence.
 
Methods inherited from class net.sf.saxon.functions.SystemFunction
addDocToPathMap, computeSpecialProperties, copy, getDetails, getErrorCodeForTypeErrors, makeSystemFunction, optimize, setDetails
 
Methods inherited from class net.sf.saxon.expr.FunctionCall
addExternalFunctionCallToPathMap, equals, explain, getArguments, getDisplayName, getFunctionName, getNumberOfArguments, hashCode, iterateSubExpressions, preEvaluate, promote, replaceSubExpression, setArguments, setFunctionName, simplify, toString, typeCheck
 
Methods inherited from class net.sf.saxon.expr.Expression
addToPathMap, adoptChildExpression, checkPermittedContents, computeDependencies, computeStaticProperties, display, doPromotion, effectiveBooleanValue, evaluateAsString, explain, findParentOf, getCardinality, getColumnNumber, getContainer, getDependencies, getExecutable, getHostLanguage, getImplementationMethod, getInstructionInfo, getIntrinsicDependencies, getLineNumber, getLocationId, getLocationProvider, getPublicId, getSlotsUsed, getSpecialProperties, getSystemId, hasLoopingSubexpression, implementsStaticTypeCheck, iterate, iterateEvents, markTailFunctionCalls, process, setContainer, setFiltered, setFlattened, setLocationId, staticTypeCheck, suppressValidation
 
Methods inherited from class java.lang.Object
getClass, notify, notifyAll, wait, wait, wait
 

Field Detail

SUM

public static final int SUM
See Also:
Constant Field Values

AVG

public static final int AVG
See Also:
Constant Field Values

COUNT

public static final int COUNT
See Also:
Constant Field Values
Constructor Detail

Aggregate

public Aggregate()
Method Detail

checkArguments

public void checkArguments(ExpressionVisitor visitor)
                    throws XPathException
Static analysis: prevent sorting of the argument

Overrides:
checkArguments in class SystemFunction
Parameters:
visitor - the expression visitor
Throws:
XPathException

getItemType

public ItemType getItemType(TypeHierarchy th)
Determine the item type of the value returned by the function

Overrides:
getItemType in class SystemFunction
Parameters:
th - the type hierarchy cache
Returns:
a value such as Type.STRING, Type.BOOLEAN, Type.NUMBER, Type.NODE, or Type.ITEM (meaning not known at compile time)

computeCardinality

public int computeCardinality()
Determine the cardinality of the function.

Overrides:
computeCardinality in class SystemFunction
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

evaluateItem

public Item evaluateItem(XPathContext context)
                  throws XPathException
Evaluate the function

Specified by:
evaluateItem in interface EvaluableItem
Overrides:
evaluateItem in class Expression
Parameters:
context - The context in which the expression is to be evaluated
Returns:
the node or atomic value that results from evaluating the expression; or null to indicate that the result is an empty sequence
Throws:
XPathException - if any dynamic error occurs evaluating the expression

total

public static AtomicValue total(SequenceIterator iter,
                                XPathContext context,
                                SourceLocator location)
                         throws XPathException
Calculate the total of a sequence.

Parameters:
iter - iterator over the items to be totalled
context - the XPath dynamic context
location - location of the expression in the source for diagnostics
Returns:
the total, according to the rules of the XPath sum() function, but returning null if the sequence is empty. (It's then up to the caller to decide what the correct result is for an empty sequence.
Throws:
XPathException

average

public static AtomicValue average(SequenceIterator iter,
                                  XPathContext context,
                                  SourceLocator location)
                           throws XPathException
Calculate average

Parameters:
iter - iterator over the items to be totalled
context - the XPath dynamic context
location - location of the expression in the source for diagnostics
Returns:
the average of the values
Throws:
XPathException

count

public static int count(SequenceIterator iter)
                 throws XPathException
Get the number of items in a sequence identified by a SequenceIterator

Parameters:
iter - The SequenceIterator. This method moves the current position of the supplied iterator; if this isn't safe, make a copy of the iterator first by calling getAnother(). The supplied iterator must be positioned before the first item (there must have been no call on next()).
Returns:
the number of items in the underlying sequence
Throws:
XPathException - if a failure occurs reading the input sequence

isCountFunction

public static boolean isCountFunction(Expression exp)
Determine whether a given expression is a call to the count() function

Parameters:
exp - an expression to be examined
Returns:
true if the expression is a call to the count() function


Copyright (C) Michael H. Kay. All rights reserved.