org.teiid.query.sql.symbol
Class AggregateSymbol

java.lang.Object
  extended by org.teiid.query.sql.symbol.Symbol
      extended by org.teiid.query.sql.symbol.SingleElementSymbol
          extended by org.teiid.query.sql.symbol.ExpressionSymbol
              extended by org.teiid.query.sql.symbol.AggregateSymbol
All Implemented Interfaces:
Cloneable, LanguageObject, Expression, SelectSymbol

public class AggregateSymbol
extends ExpressionSymbol

An aggregate symbol represents an aggregate function. The * expression is encoded by setting the expression to null. This may ONLY be used with the COUNT function.

The type of an aggregate symbol depends on the function and the type of the underlying expression. The type of a COUNT function is ALWAYS integer. MIN and MAX functions take the type of their contained expression. AVG and SUM vary depending on the type of the expression. If the expression is of a type other than biginteger, the aggregate function returns type long. For the case of biginteger, the aggregate function returns type biginteger. Similarly, all floating point expressions not of type bigdecimal return type double and bigdecimal maps to bigdecimal.


Nested Class Summary
static class AggregateSymbol.Type
           
 
Nested classes/interfaces inherited from interface org.teiid.query.sql.LanguageObject
LanguageObject.Util
 
Field Summary
 
Fields inherited from class org.teiid.query.sql.symbol.SingleElementSymbol
SEPARATOR
 
Fields inherited from class org.teiid.query.sql.symbol.Symbol
outputName
 
Constructor Summary
protected AggregateSymbol(String name, String canonicalName, AggregateSymbol.Type aggregateFunction, boolean isDistinct, Expression expression)
          Constructor used for cloning
  AggregateSymbol(String name, String aggregateFunction, boolean isDistinct, Expression expression)
          Construct an aggregate symbol with all given data.
 
Method Summary
 void acceptVisitor(LanguageVisitor visitor)
          Method for accepting a visitor.
static boolean areAggregatesCardinalityDependent(Collection<AggregateSymbol> aggs)
           
 boolean canStage()
           
 Object clone()
          Return a deep copy of this object
 boolean equals(Object obj)
          ExpressionSymbol matching is not based upon the name
 AggregateSymbol.Type getAggregateFunction()
          Get the aggregate function type - this will map to one of the reserved words for the aggregate functions.
 Expression getCondition()
           
 OrderBy getOrderBy()
           
 Class<?> getType()
          Get the type of the symbol, which depends on the aggregate function and the type of the contained expression
 int hashCode()
          Return a hash code for this symbol.
 boolean isAnalytical()
           
 boolean isBoolean()
           
 boolean isCardinalityDependent()
           
 boolean isDistinct()
          Get the distinct flag.
 boolean isEnhancedNumeric()
           
 boolean isWindowed()
           
 boolean respectsNulls()
           
 void setAggregateFunction(AggregateSymbol.Type aggregateFunction)
          Set the aggregate function.
 void setCondition(Expression condition)
           
 void setDistinct(boolean distinct)
           
 void setOrderBy(OrderBy orderBy)
           
 void setWindowed(boolean isWindowed)
           
 
Methods inherited from class org.teiid.query.sql.symbol.ExpressionSymbol
getExpression, isResolved, setExpression
 
Methods inherited from class org.teiid.query.sql.symbol.SingleElementSymbol
getShortName
 
Methods inherited from class org.teiid.query.sql.symbol.Symbol
getCanonical, getCanonicalName, getName, getOutputName, getShortCanonicalName, getShortName, setName, setOutputName, setShortCanonicalName, setShortName, toString
 
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
 

Constructor Detail

AggregateSymbol

protected AggregateSymbol(String name,
                          String canonicalName,
                          AggregateSymbol.Type aggregateFunction,
                          boolean isDistinct,
                          Expression expression)
Constructor used for cloning

Parameters:
name -
canonicalName -
Since:
4.3

AggregateSymbol

public AggregateSymbol(String name,
                       String aggregateFunction,
                       boolean isDistinct,
                       Expression expression)
Construct an aggregate symbol with all given data.

Parameters:
name - Name of the function
aggregateFunction - Aggregate function type (SQLConstants.NonReserved.COUNT, etc)
isDistinct - True if DISTINCT flag is set
expression - Contained expression
Method Detail

setAggregateFunction

public void setAggregateFunction(AggregateSymbol.Type aggregateFunction)
Set the aggregate function. If the aggregate function is an invalid value, an IllegalArgumentException is thrown.

Parameters:
aggregateFunction - Aggregate function type
See Also:
SQLConstants.NonReserved.COUNT, SQLConstants.NonReserved.SUM, SQLConstants.NonReserved.AVG, SQLConstants.NonReserved.MIN, SQLConstants.NonReserved.MAX

getAggregateFunction

public AggregateSymbol.Type getAggregateFunction()
Get the aggregate function type - this will map to one of the reserved words for the aggregate functions.

Returns:
Aggregate function type

isDistinct

public boolean isDistinct()
Get the distinct flag. If true, aggregate symbol will remove duplicates during computation.

Returns:
True if duplicates should be removed during computation

setDistinct

public void setDistinct(boolean distinct)

getType

public Class<?> getType()
Get the type of the symbol, which depends on the aggregate function and the type of the contained expression

Specified by:
getType in interface Expression
Overrides:
getType in class ExpressionSymbol
Returns:
Type of the symbol

isAnalytical

public boolean isAnalytical()

isBoolean

public boolean isBoolean()

isEnhancedNumeric

public boolean isEnhancedNumeric()

acceptVisitor

public void acceptVisitor(LanguageVisitor visitor)
Description copied from interface: LanguageObject
Method for accepting a visitor. It is the responsibility of the language object to call back on the visitor.

Specified by:
acceptVisitor in interface LanguageObject
Overrides:
acceptVisitor in class ExpressionSymbol
Parameters:
visitor - Visitor being used

getOrderBy

public OrderBy getOrderBy()

setOrderBy

public void setOrderBy(OrderBy orderBy)

clone

public Object clone()
Return a deep copy of this object

Specified by:
clone in interface LanguageObject
Overrides:
clone in class ExpressionSymbol
Returns:
Deep copy of this object

hashCode

public int hashCode()
Description copied from class: Symbol
Return a hash code for this symbol.

Overrides:
hashCode in class ExpressionSymbol
Returns:
Hash code
See Also:
ExpressionSymbol.hashCode()

equals

public boolean equals(Object obj)
Description copied from class: ExpressionSymbol
ExpressionSymbol matching is not based upon the name

Overrides:
equals in class ExpressionSymbol
Parameters:
obj - Other object
Returns:
True if other obj is a Symbol (or subclass) and name is equal
See Also:
ExpressionSymbol.equals(java.lang.Object)

isCardinalityDependent

public boolean isCardinalityDependent()

getCondition

public Expression getCondition()

setCondition

public void setCondition(Expression condition)

areAggregatesCardinalityDependent

public static boolean areAggregatesCardinalityDependent(Collection<AggregateSymbol> aggs)

respectsNulls

public boolean respectsNulls()

canStage

public boolean canStage()

isWindowed

public boolean isWindowed()

setWindowed

public void setWindowed(boolean isWindowed)


Copyright © 2012. All Rights Reserved.