Search in sources :

Example 1 with BuiltInFunction

use of org.apache.phoenix.parse.FunctionParseNode.BuiltInFunction in project phoenix by apache.

the class ParseNodeFactory method addBuiltInFunction.

private static void addBuiltInFunction(Class<? extends FunctionExpression> f) throws Exception {
    BuiltInFunction d = f.getAnnotation(BuiltInFunction.class);
    if (d == null) {
        return;
    }
    int nArgs = d.args().length;
    BuiltInFunctionInfo value = new BuiltInFunctionInfo(f, d);
    if (d.classType() != FunctionParseNode.FunctionClassType.ABSTRACT) {
        BUILT_IN_FUNCTION_MULTIMAP.put(value.getName(), value);
    }
    if (d.classType() != FunctionParseNode.FunctionClassType.DERIVED) {
        do {
            // Add function to function map, throwing if conflicts found
            // Add entry for each possible version of function based on arguments that are not required to be present (i.e. arg with default value)
            BuiltInFunctionKey key = new BuiltInFunctionKey(value.getName(), nArgs);
            if (BUILT_IN_FUNCTION_MAP.put(key, value) != null) {
                throw new IllegalStateException("Multiple " + value.getName() + " functions with " + nArgs + " arguments");
            }
        } while (--nArgs >= 0 && d.args()[nArgs].defaultValue().length() > 0);
        // Look for default values that aren't at the end and throw
        while (--nArgs >= 0) {
            if (d.args()[nArgs].defaultValue().length() > 0) {
                throw new IllegalStateException("Function " + value.getName() + " has non trailing default value of '" + d.args()[nArgs].defaultValue() + "'. Only trailing arguments may have default values");
            }
        }
    }
}
Also used : BuiltInFunction(org.apache.phoenix.parse.FunctionParseNode.BuiltInFunction) BuiltInFunctionInfo(org.apache.phoenix.parse.FunctionParseNode.BuiltInFunctionInfo)

Aggregations

BuiltInFunction (org.apache.phoenix.parse.FunctionParseNode.BuiltInFunction)1 BuiltInFunctionInfo (org.apache.phoenix.parse.FunctionParseNode.BuiltInFunctionInfo)1