com.mckoi.database
Interface Function

All Known Implementing Classes:
AbstractAggregateFunction, AbstractFunction

public interface Function

Represents a function that is part of an expression to be evaluated. A function evaluates to a resultant Object. If the parameters of a function are not constant values, then the evaluation will require a lookup via a VariableResolver or GroupResolver. The GroupResolver helps evaluate an aggregate function.

Author:
Tobias Downer

Method Summary
 java.util.List allElements()
          Returns the list of all element objects that this function uses as its parameters.
 java.util.List allVariables()
          Returns the list of Variable objects that this function uses as its parameters.
 TObject evaluate(GroupResolver group, VariableResolver resolver, QueryContext context)
          Evaluates the function and returns a TObject that represents the result of the function.
 java.lang.String getName()
          Returns the name of the function.
 boolean isAggregate(QueryContext context)
          Returns true if this function is an aggregate function.
 void prepareParameters(ExpressionPreparer preparer)
          Prepares the exressions that are the parameters of this function.
 TType returnTType(VariableResolver resolver, QueryContext context)
          The type of object this function returns.
 

Method Detail

getName

java.lang.String getName()
Returns the name of the function. The name is a unique identifier that can be used to recreate this function. This identifier can be used to easily serialize the function when grouped with its parameters.


allVariables

java.util.List allVariables()
Returns the list of Variable objects that this function uses as its parameters. If this returns an empty list, then the function must only have constant parameters. This information can be used to optimize evaluation because if all the parameters of a function are constant then we only need to evaluate the function once.


allElements

java.util.List allElements()
Returns the list of all element objects that this function uses as its parameters. If this returns an empty list, then the function has no input elements at all. ( something like: upper(user()) )


isAggregate

boolean isAggregate(QueryContext context)
Returns true if this function is an aggregate function. An aggregate function requires that the GroupResolver is not null when the evaluate method is called.


prepareParameters

void prepareParameters(ExpressionPreparer preparer)
                       throws DatabaseException
Prepares the exressions that are the parameters of this function. This is intended to be used if we need to resolve aspects such as Variable references. For example, a variable reference to 'number' may become 'APP.Table.NUMBER'.

Throws:
DatabaseException

evaluate

TObject evaluate(GroupResolver group,
                 VariableResolver resolver,
                 QueryContext context)
Evaluates the function and returns a TObject that represents the result of the function. The VariableResolver object should be used to look up variables in the parameter of the function. The 'FunctionTable' object should only be used when the function is a grouping function. For example, 'avg(value_of)'.


returnTType

TType returnTType(VariableResolver resolver,
                  QueryContext context)
The type of object this function returns. eg. TStringType, TBooleanType, etc. The VariableResolver points to a dummy row that can be used to dynamically determine the return type. For example, an implementation of SQL 'GREATEST' would return the same type as the list elements.