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 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.