Package edu.caltech.nanodb.expressions
Class FunctionCall
- java.lang.Object
-
- edu.caltech.nanodb.expressions.Expression
-
- edu.caltech.nanodb.expressions.FunctionCall
-
- All Implemented Interfaces:
java.lang.Cloneable
public class FunctionCall extends Expression
This class represents all kinds of function-call expressions, including simple function calls, aggregate function calls, and table-returning function calls. The set of available functions to call is stored in theFunctionDirectory
.
-
-
Field Summary
Fields Modifier and Type Field Description private java.util.ArrayList<Expression>
args
The list of one or more arguments for the function call.private boolean
distinct
A flag indicating whether the DISTINCT keyword was used in the function invocation, e.g.private java.lang.String
funcName
The string name of the function as specified in the original SQL.private Function
function
The actual function object that implements the function call.
-
Constructor Summary
Constructors Constructor Description FunctionCall(java.lang.String funcName, boolean distinct, Expression... args)
FunctionCall(java.lang.String funcName, boolean distinct, java.util.ArrayList<Expression> args)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected java.lang.Object
clone()
Creates a copy of expression.boolean
equals(java.lang.Object obj)
Checks if the argument is an expression with the same structure, but not necesarily the same references.java.lang.Object
evaluate(Environment env)
Evaluates this expression object in the context of the specified environment.java.util.List<Expression>
getArguments()
ColumnInfo
getColumnInfo(Schema schema)
Returns aColumnInfo
object describing the type (and possibly the name) of the expression's result.Function
getFunction()
Returns the implementation of the function, ornull
if the implementation has not yet been resolved via theresolve(edu.caltech.nanodb.functions.FunctionDirectory)
method.int
hashCode()
Computes the hashcode of an Expression.void
resolve(FunctionDirectory directory)
Resolve this function-call against the function directory so that the implementation of the function is available at evaluation time.java.lang.String
toString()
Expression
traverse(ExpressionProcessor p)
This method allows the entire expression tree to be traversed node by node, either for analysis or for transformation.-
Methods inherited from class edu.caltech.nanodb.expressions.Expression
duplicate, evaluate, evaluatePredicate, evaluatePredicate, getAllSymbols, hasSymbols, simplify
-
-
-
-
Field Detail
-
funcName
private java.lang.String funcName
The string name of the function as specified in the original SQL.
-
distinct
private boolean distinct
A flag indicating whether the DISTINCT keyword was used in the function invocation, e.g. COUNT(DISTINCT n). This flag is only used in the context of aggregate functions; if it is set for other kinds of functions, it is a semantic error.
-
args
private java.util.ArrayList<Expression> args
The list of one or more arguments for the function call.
-
function
private Function function
The actual function object that implements the function call. This may be either a simple function or an aggregate function.
-
-
Constructor Detail
-
FunctionCall
public FunctionCall(java.lang.String funcName, boolean distinct, java.util.ArrayList<Expression> args)
-
FunctionCall
public FunctionCall(java.lang.String funcName, boolean distinct, Expression... args)
-
-
Method Detail
-
resolve
public void resolve(FunctionDirectory directory)
Resolve this function-call against the function directory so that the implementation of the function is available at evaluation time.- Parameters:
directory
- the function directory to resolve the function against- Throws:
java.lang.IllegalArgumentException
- if thedistinct
flag istrue
but the function implementation is not anAggregateFunction
.
-
getFunction
public Function getFunction()
Returns the implementation of the function, ornull
if the implementation has not yet been resolved via theresolve(edu.caltech.nanodb.functions.FunctionDirectory)
method.- Returns:
- the implementation of the function, or
null
if the implementation has not yet been resolved.
-
getArguments
public java.util.List<Expression> getArguments()
-
getColumnInfo
public ColumnInfo getColumnInfo(Schema schema) throws SchemaNameException
Description copied from class:Expression
Returns aColumnInfo
object describing the type (and possibly the name) of the expression's result.- Specified by:
getColumnInfo
in classExpression
- Parameters:
schema
- a schema object that can be used to look up name and type details for symbols referenced by the expression.- Returns:
- a column-information object describing the type (and possibly the name and table-name) of this expression's result
- Throws:
SchemaNameException
- if a symbol cannot be resolved, either because it doesn't appear in the schema, or because the name is ambiguous.
-
evaluate
public java.lang.Object evaluate(Environment env) throws ExpressionException
Description copied from class:Expression
Evaluates this expression object in the context of the specified environment. The environment provides any external information necessary to evaluate the expression, such as the current tuples loaded from tables referenced within the expression.- Specified by:
evaluate
in classExpression
- Parameters:
env
- the environment to look up symbol-values from, when evaluating the expression- Returns:
- the result of the expression evaluation
- Throws:
ExpressionException
- if the expression cannot be evaluated for some reason.
-
traverse
public Expression traverse(ExpressionProcessor p)
Description copied from class:Expression
This method allows the entire expression tree to be traversed node by node, either for analysis or for transformation. The
ExpressionProcessor
instance receives notifications as each node in the expression is entered and left.The expression tree can also be manipulated by this traversal process, depending on what the
ExpressionProcessor
wants to do. If the expression node thattraverse()
is invoked on, needs to be replaced with a new expression node, the replacement is returned by thetraverse()
method. (TheExpressionProcessor
specifies the replacement as the return-value from theExpressionProcessor.leave(Expression)
method.)- Specified by:
traverse
in classExpression
- Parameters:
p
- the object that performs analysis or transformation of the expression tree- Returns:
- an
Expression
node to replace this node, ornull
if no changes are to be made.
-
equals
public boolean equals(java.lang.Object obj)
Description copied from class:Expression
Checks if the argument is an expression with the same structure, but not necesarily the same references.- Specified by:
equals
in classExpression
- Parameters:
obj
- the object to which we are comparing
-
hashCode
public int hashCode()
Description copied from class:Expression
Computes the hashcode of an Expression. This method is used to see if two expressions CAN be equal.- Specified by:
hashCode
in classExpression
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
clone
protected java.lang.Object clone() throws java.lang.CloneNotSupportedException
Creates a copy of expression.- Overrides:
clone
in classExpression
- Throws:
java.lang.CloneNotSupportedException
-
-