@Test public void testGetBuiltin() throws Exception { assertEquals(18, RealMetadataFactory.SFM.getSystemFunctionLibrary().getBuiltInAggregateFunctions(false).size()); }
public List<FunctionMethod> getBuiltInAggregateFunctions(boolean includeAnalytic) { ArrayList<FunctionMethod> result = new ArrayList<FunctionMethod>(); if (this.systemFunctions != null) { FunctionDescriptor stExtent = this.systemFunctions.getFunction(SourceSystemFunctions.ST_EXTENT, new Class[] {DataTypeManager.DefaultDataClasses.GEOMETRY}); result.add(stExtent.getMethod()); } for (Type type : AggregateSymbol.Type.values()) { AggregateAttributes aa = new AggregateAttributes(); if (type.isAnalytical()) { if (!includeAnalytic) { continue; } aa.setAnalytic(true); aa.setAllowsDistinct(false); aa.setAllowsOrderBy(false); } String returnType = null; String[] argTypes = null; aa.setAllowsDistinct(true); switch (type) { case TEXTAGG: case USER_DEFINED: continue; case DENSE_RANK: case RANK: case ROW_NUMBER: aa.setAllowsDistinct(false); returnType = AggregateSymbol.LONG_RANKS?DataTypeManager.DefaultDataTypes.LONG:DataTypeManager.DefaultDataTypes.INTEGER; argTypes = new String[] {}; break; case ANY: case SOME: case EVERY: returnType = DataTypeManager.DefaultDataTypes.BOOLEAN; argTypes = new String[] {DataTypeManager.DefaultDataTypes.BOOLEAN}; break; case COUNT_BIG: returnType = DataTypeManager.DefaultDataTypes.LONG; argTypes = new String[] {DataTypeManager.DefaultDataTypes.OBJECT}; break; case COUNT: returnType = DataTypeManager.DefaultDataTypes.INTEGER; argTypes = new String[] {DataTypeManager.DefaultDataTypes.OBJECT}; break; case MAX: case MIN: case AVG: case SUM: returnType = DataTypeManager.DefaultDataTypes.OBJECT; argTypes = new String[] {DataTypeManager.DefaultDataTypes.OBJECT}; break; case STDDEV_POP: case STDDEV_SAMP: case VAR_POP: case VAR_SAMP: returnType = DataTypeManager.DefaultDataTypes.DOUBLE; argTypes = new String[] {DataTypeManager.DefaultDataTypes.DOUBLE}; break; case STRING_AGG: returnType = DataTypeManager.DefaultDataTypes.OBJECT; argTypes = new String[] {DataTypeManager.DefaultDataTypes.OBJECT}; aa.setAllowsOrderBy(true); break; case ARRAY_AGG: returnType = DataTypeManager.DefaultDataTypes.OBJECT; argTypes = new String[] {DataTypeManager.getDataTypeName(DataTypeManager.getArrayType(DataTypeManager.DefaultDataClasses.OBJECT))}; aa.setAllowsOrderBy(true); aa.setAllowsDistinct(false); break; case JSONARRAY_AGG: returnType = DataTypeManager.DefaultDataTypes.JSON; argTypes = new String[] {DataTypeManager.DefaultDataTypes.OBJECT}; aa.setAllowsOrderBy(true); aa.setAllowsDistinct(false); break; case XMLAGG: returnType = DataTypeManager.DefaultDataTypes.XML; argTypes = new String[] {DataTypeManager.DefaultDataTypes.XML}; aa.setAllowsOrderBy(true); aa.setAllowsDistinct(false); break; case FIRST_VALUE: case LAST_VALUE: returnType = DataTypeManager.DefaultDataTypes.OBJECT; argTypes = new String[] {DataTypeManager.DefaultDataTypes.OBJECT}; break; case LEAD: case LAG: returnType = DataTypeManager.DefaultDataTypes.OBJECT; argTypes = new String[] {DataTypeManager.DefaultDataTypes.OBJECT, DataTypeManager.DefaultDataTypes.INTEGER, DataTypeManager.DefaultDataTypes.OBJECT}; break; case NTILE: returnType = DataTypeManager.DefaultDataTypes.INTEGER; argTypes = new String[] {DataTypeManager.DefaultDataTypes.INTEGER}; break; case PERCENT_RANK: returnType = DataTypeManager.DefaultDataTypes.DOUBLE; argTypes = new String[] {}; break; case CUME_DIST: returnType = DataTypeManager.DefaultDataTypes.DOUBLE; argTypes = new String[] {}; break; case NTH_VALUE: returnType = DataTypeManager.DefaultDataTypes.OBJECT; argTypes = new String[] {DataTypeManager.DefaultDataTypes.OBJECT, DataTypeManager.DefaultDataTypes.INTEGER}; break; } FunctionMethod fm = FunctionMethod.createFunctionMethod(type.name(), type.name(), FunctionCategoryConstants.AGGREGATE, returnType, argTypes); fm.setAggregateAttributes(aa); result.add(fm); } return result; }
FunctionLibrary { public List<FunctionMethod> getBuiltInAggregateFunctions(boolean includeAnalytic) { ArrayList<FunctionMethod> result = new ArrayList<FunctionMethod>(); if (this.systemFunctions != null) { FunctionDescriptor stExtent = this.systemFunctions.getFunction(SourceSystemFunctions.ST_EXTENT, new Class[] {DataTypeManager.DefaultDataClasses.GEOMETRY}); result.add(stExtent.getMethod()); } for (Type type : AggregateSymbol.Type.values()) { AggregateAttributes aa = new AggregateAttributes(); if (type.isAnalytical()) { if (!includeAnalytic) { continue; } aa.setAnalytic(true); aa.setAllowsDistinct(false); aa.setAllowsOrderBy(false); } String returnType = null; String[] argTypes = null; aa.setAllowsDistinct(true); switch (type) { case TEXTAGG: case USER_DEFINED: continue; case DENSE_RANK: case RANK: case ROW_NUMBER: aa.setAllowsDistinct(false); returnType = AggregateSymbol.LONG_RANKS?DataTypeManager.DefaultDataTypes.LONG:DataTypeManager.DefaultDataTypes.INTEGER; argTypes = new String[] {}; break; case ANY: case SOME: case EVERY: returnType = DataTypeManager.DefaultDataTypes.BOOLEAN; argTypes = new String[] {DataTypeManager.DefaultDataTypes.BOOLEAN}; break; case COUNT_BIG: returnType = DataTypeManager.DefaultDataTypes.LONG; argTypes = new String[] {DataTypeManager.DefaultDataTypes.OBJECT}; break; case COUNT: returnType = DataTypeManager.DefaultDataTypes.INTEGER; argTypes = new String[] {DataTypeManager.DefaultDataTypes.OBJECT}; break; case MAX: case MIN: case AVG: case SUM: returnType = DataTypeManager.DefaultDataTypes.OBJECT; argTypes = new String[] {DataTypeManager.DefaultDataTypes.OBJECT}; break; case STDDEV_POP: case STDDEV_SAMP: case VAR_POP: case VAR_SAMP: returnType = DataTypeManager.DefaultDataTypes.DOUBLE; argTypes = new String[] {DataTypeManager.DefaultDataTypes.DOUBLE}; break; case STRING_AGG: returnType = DataTypeManager.DefaultDataTypes.OBJECT; argTypes = new String[] {DataTypeManager.DefaultDataTypes.OBJECT}; aa.setAllowsOrderBy(true); break; case ARRAY_AGG: returnType = DataTypeManager.DefaultDataTypes.OBJECT; argTypes = new String[] {DataTypeManager.getDataTypeName(DataTypeManager.getArrayType(DataTypeManager.DefaultDataClasses.OBJECT))}; aa.setAllowsOrderBy(true); aa.setAllowsDistinct(false); break; case JSONARRAY_AGG: returnType = DataTypeManager.DefaultDataTypes.JSON; argTypes = new String[] {DataTypeManager.DefaultDataTypes.OBJECT}; aa.setAllowsOrderBy(true); aa.setAllowsDistinct(false); break; case XMLAGG: returnType = DataTypeManager.DefaultDataTypes.XML; argTypes = new String[] {DataTypeManager.DefaultDataTypes.XML}; aa.setAllowsOrderBy(true); aa.setAllowsDistinct(false); break; case FIRST_VALUE: case LAST_VALUE: returnType = DataTypeManager.DefaultDataTypes.OBJECT; argTypes = new String[] {DataTypeManager.DefaultDataTypes.OBJECT}; break; case LEAD: case LAG: returnType = DataTypeManager.DefaultDataTypes.OBJECT; argTypes = new String[] {DataTypeManager.DefaultDataTypes.OBJECT, DataTypeManager.DefaultDataTypes.INTEGER, DataTypeManager.DefaultDataTypes.OBJECT}; break; case NTILE: returnType = DataTypeManager.DefaultDataTypes.INTEGER; argTypes = new String[] {DataTypeManager.DefaultDataTypes.INTEGER}; break; case PERCENT_RANK: returnType = DataTypeManager.DefaultDataTypes.DOUBLE; argTypes = new String[] {}; break; case CUME_DIST: returnType = DataTypeManager.DefaultDataTypes.DOUBLE; argTypes = new String[] {}; break; case NTH_VALUE: returnType = DataTypeManager.DefaultDataTypes.OBJECT; argTypes = new String[] {DataTypeManager.DefaultDataTypes.OBJECT, DataTypeManager.DefaultDataTypes.INTEGER}; break; } FunctionMethod fm = FunctionMethod.createFunctionMethod(type.name(), type.name(), FunctionCategoryConstants.AGGREGATE, returnType, argTypes); fm.setAggregateAttributes(aa); result.add(fm); } return result; } }
FunctionLibrary { public List<FunctionMethod> getBuiltInAggregateFunctions(boolean includeAnalytic) { ArrayList<FunctionMethod> result = new ArrayList<FunctionMethod>(); if (this.systemFunctions != null) { FunctionDescriptor stExtent = this.systemFunctions.getFunction(SourceSystemFunctions.ST_EXTENT, new Class[] {DataTypeManager.DefaultDataClasses.GEOMETRY}); result.add(stExtent.getMethod()); } for (Type type : AggregateSymbol.Type.values()) { AggregateAttributes aa = new AggregateAttributes(); if (type.isAnalytical()) { if (!includeAnalytic) { continue; } aa.setAnalytic(true); aa.setAllowsDistinct(false); aa.setAllowsOrderBy(false); } String returnType = null; String[] argTypes = null; aa.setAllowsDistinct(true); switch (type) { case TEXTAGG: case USER_DEFINED: continue; case DENSE_RANK: case RANK: case ROW_NUMBER: aa.setAllowsDistinct(false); returnType = AggregateSymbol.LONG_RANKS?DataTypeManager.DefaultDataTypes.LONG:DataTypeManager.DefaultDataTypes.INTEGER; argTypes = new String[] {}; break; case ANY: case SOME: case EVERY: returnType = DataTypeManager.DefaultDataTypes.BOOLEAN; argTypes = new String[] {DataTypeManager.DefaultDataTypes.BOOLEAN}; break; case COUNT_BIG: returnType = DataTypeManager.DefaultDataTypes.LONG; argTypes = new String[] {DataTypeManager.DefaultDataTypes.OBJECT}; break; case COUNT: returnType = DataTypeManager.DefaultDataTypes.INTEGER; argTypes = new String[] {DataTypeManager.DefaultDataTypes.OBJECT}; break; case MAX: case MIN: case AVG: case SUM: returnType = DataTypeManager.DefaultDataTypes.OBJECT; argTypes = new String[] {DataTypeManager.DefaultDataTypes.OBJECT}; break; case STDDEV_POP: case STDDEV_SAMP: case VAR_POP: case VAR_SAMP: returnType = DataTypeManager.DefaultDataTypes.DOUBLE; argTypes = new String[] {DataTypeManager.DefaultDataTypes.DOUBLE}; break; case STRING_AGG: returnType = DataTypeManager.DefaultDataTypes.OBJECT; argTypes = new String[] {DataTypeManager.DefaultDataTypes.OBJECT}; aa.setAllowsOrderBy(true); break; case ARRAY_AGG: returnType = DataTypeManager.DefaultDataTypes.OBJECT; argTypes = new String[] {DataTypeManager.getDataTypeName(DataTypeManager.getArrayType(DataTypeManager.DefaultDataClasses.OBJECT))}; aa.setAllowsOrderBy(true); aa.setAllowsDistinct(false); break; case JSONARRAY_AGG: returnType = DataTypeManager.DefaultDataTypes.JSON; argTypes = new String[] {DataTypeManager.DefaultDataTypes.OBJECT}; aa.setAllowsOrderBy(true); aa.setAllowsDistinct(false); break; case XMLAGG: returnType = DataTypeManager.DefaultDataTypes.XML; argTypes = new String[] {DataTypeManager.DefaultDataTypes.XML}; aa.setAllowsOrderBy(true); aa.setAllowsDistinct(false); break; case FIRST_VALUE: case LAST_VALUE: returnType = DataTypeManager.DefaultDataTypes.OBJECT; argTypes = new String[] {DataTypeManager.DefaultDataTypes.OBJECT}; break; case LEAD: case LAG: returnType = DataTypeManager.DefaultDataTypes.OBJECT; argTypes = new String[] {DataTypeManager.DefaultDataTypes.OBJECT, DataTypeManager.DefaultDataTypes.INTEGER, DataTypeManager.DefaultDataTypes.OBJECT}; break; case NTILE: returnType = DataTypeManager.DefaultDataTypes.INTEGER; argTypes = new String[] {DataTypeManager.DefaultDataTypes.INTEGER}; break; case PERCENT_RANK: returnType = DataTypeManager.DefaultDataTypes.DOUBLE; argTypes = new String[] {}; break; case CUME_DIST: returnType = DataTypeManager.DefaultDataTypes.DOUBLE; argTypes = new String[] {}; break; case NTH_VALUE: returnType = DataTypeManager.DefaultDataTypes.OBJECT; argTypes = new String[] {DataTypeManager.DefaultDataTypes.OBJECT, DataTypeManager.DefaultDataTypes.INTEGER}; break; } FunctionMethod fm = FunctionMethod.createFunctionMethod(type.name(), type.name(), FunctionCategoryConstants.AGGREGATE, returnType, argTypes); fm.setAggregateAttributes(aa); result.add(fm); } return result; } FunctionLibrary(FunctionTree systemFuncs, FunctionTree... userFuncs); }
FunctionLibrary { public List<FunctionMethod> getBuiltInAggregateFunctions(boolean includeAnalytic) { ArrayList<FunctionMethod> result = new ArrayList<FunctionMethod>(); if (this.systemFunctions != null) { FunctionDescriptor stExtent = this.systemFunctions.getFunction(SourceSystemFunctions.ST_EXTENT, new Class[] {DataTypeManager.DefaultDataClasses.GEOMETRY}); result.add(stExtent.getMethod()); } for (Type type : AggregateSymbol.Type.values()) { AggregateAttributes aa = new AggregateAttributes(); if (type.isAnalytical()) { if (!includeAnalytic) { continue; } aa.setAnalytic(true); aa.setAllowsDistinct(false); aa.setAllowsOrderBy(false); } String returnType = null; String[] argTypes = null; aa.setAllowsDistinct(true); switch (type) { case TEXTAGG: case USER_DEFINED: continue; case DENSE_RANK: case RANK: case ROW_NUMBER: aa.setAllowsDistinct(false); returnType = AggregateSymbol.LONG_RANKS?DataTypeManager.DefaultDataTypes.LONG:DataTypeManager.DefaultDataTypes.INTEGER; argTypes = new String[] {}; break; case ANY: case SOME: case EVERY: returnType = DataTypeManager.DefaultDataTypes.BOOLEAN; argTypes = new String[] {DataTypeManager.DefaultDataTypes.BOOLEAN}; break; case COUNT_BIG: returnType = DataTypeManager.DefaultDataTypes.LONG; argTypes = new String[] {DataTypeManager.DefaultDataTypes.OBJECT}; break; case COUNT: returnType = DataTypeManager.DefaultDataTypes.INTEGER; argTypes = new String[] {DataTypeManager.DefaultDataTypes.OBJECT}; break; case MAX: case MIN: case AVG: case SUM: returnType = DataTypeManager.DefaultDataTypes.OBJECT; argTypes = new String[] {DataTypeManager.DefaultDataTypes.OBJECT}; break; case STDDEV_POP: case STDDEV_SAMP: case VAR_POP: case VAR_SAMP: returnType = DataTypeManager.DefaultDataTypes.DOUBLE; argTypes = new String[] {DataTypeManager.DefaultDataTypes.DOUBLE}; break; case STRING_AGG: returnType = DataTypeManager.DefaultDataTypes.OBJECT; argTypes = new String[] {DataTypeManager.DefaultDataTypes.OBJECT}; aa.setAllowsOrderBy(true); break; case ARRAY_AGG: returnType = DataTypeManager.DefaultDataTypes.OBJECT; argTypes = new String[] {DataTypeManager.getDataTypeName(DataTypeManager.getArrayType(DataTypeManager.DefaultDataClasses.OBJECT))}; aa.setAllowsOrderBy(true); aa.setAllowsDistinct(false); break; case JSONARRAY_AGG: returnType = DataTypeManager.DefaultDataTypes.JSON; argTypes = new String[] {DataTypeManager.DefaultDataTypes.OBJECT}; aa.setAllowsOrderBy(true); aa.setAllowsDistinct(false); break; case XMLAGG: returnType = DataTypeManager.DefaultDataTypes.XML; argTypes = new String[] {DataTypeManager.DefaultDataTypes.XML}; aa.setAllowsOrderBy(true); aa.setAllowsDistinct(false); break; case FIRST_VALUE: case LAST_VALUE: returnType = DataTypeManager.DefaultDataTypes.OBJECT; argTypes = new String[] {DataTypeManager.DefaultDataTypes.OBJECT}; break; case LEAD: case LAG: returnType = DataTypeManager.DefaultDataTypes.OBJECT; argTypes = new String[] {DataTypeManager.DefaultDataTypes.OBJECT, DataTypeManager.DefaultDataTypes.INTEGER, DataTypeManager.DefaultDataTypes.OBJECT}; break; case NTILE: returnType = DataTypeManager.DefaultDataTypes.INTEGER; argTypes = new String[] {DataTypeManager.DefaultDataTypes.INTEGER}; break; case PERCENT_RANK: returnType = DataTypeManager.DefaultDataTypes.DOUBLE; argTypes = new String[] {}; break; case CUME_DIST: returnType = DataTypeManager.DefaultDataTypes.DOUBLE; argTypes = new String[] {}; break; case NTH_VALUE: returnType = DataTypeManager.DefaultDataTypes.OBJECT; argTypes = new String[] {DataTypeManager.DefaultDataTypes.OBJECT, DataTypeManager.DefaultDataTypes.INTEGER}; break; } FunctionMethod fm = FunctionMethod.createFunctionMethod(type.name(), type.name(), FunctionCategoryConstants.AGGREGATE, returnType, argTypes); fm.setAggregateAttributes(aa); result.add(fm); } return result; } FunctionLibrary(FunctionTree systemFuncs, FunctionTree... userFuncs); FunctionTree[] getUserFunctions(); FunctionTree getSystemFunctions(); List<String> getFunctionCategories(); List<FunctionMethod> getFunctionsInCategory(String category); boolean hasFunctionMethod(String name, int numArgs); FunctionDescriptor findFunction(String name, Class<?>[] types); List<FunctionDescriptor> findAllFunctions(String name, Class<?>[] types); ConversionResult determineNecessaryConversions(String name, Class<?> returnType, Expression[] args, Class<?>[] types, boolean hasUnknownType); FunctionDescriptor[] getConverts(FunctionMethod method, Class<?>[] types); boolean isVarArgArrayParam(FunctionMethod method, Class<?>[] types,
            int i, Class<?> targetType); FunctionDescriptor findTypedConversionFunction(Class<?> sourceType, Class<?> targetType); FunctionDescriptor copyFunctionChangeReturnType(FunctionDescriptor fd, Class<?> returnType); static boolean isConvert(Function function); List<FunctionMethod> getBuiltInAggregateFunctions(boolean includeAnalytic); boolean userFunctionExists(String resourceName); }
FunctionLibrary { public List<FunctionMethod> getBuiltInAggregateFunctions(boolean includeAnalytic) { ArrayList<FunctionMethod> result = new ArrayList<FunctionMethod>(); if (this.systemFunctions != null) { FunctionDescriptor stExtent = this.systemFunctions.getFunction(SourceSystemFunctions.ST_EXTENT, new Class[] {DataTypeManager.DefaultDataClasses.GEOMETRY}); result.add(stExtent.getMethod()); } for (Type type : AggregateSymbol.Type.values()) { AggregateAttributes aa = new AggregateAttributes(); if (type.isAnalytical()) { if (!includeAnalytic) { continue; } aa.setAnalytic(true); aa.setAllowsDistinct(false); aa.setAllowsOrderBy(false); } String returnType = null; String[] argTypes = null; aa.setAllowsDistinct(true); switch (type) { case TEXTAGG: case USER_DEFINED: continue; case DENSE_RANK: case RANK: case ROW_NUMBER: aa.setAllowsDistinct(false); returnType = AggregateSymbol.LONG_RANKS?DataTypeManager.DefaultDataTypes.LONG:DataTypeManager.DefaultDataTypes.INTEGER; argTypes = new String[] {}; break; case ANY: case SOME: case EVERY: returnType = DataTypeManager.DefaultDataTypes.BOOLEAN; argTypes = new String[] {DataTypeManager.DefaultDataTypes.BOOLEAN}; break; case COUNT_BIG: returnType = DataTypeManager.DefaultDataTypes.LONG; argTypes = new String[] {DataTypeManager.DefaultDataTypes.OBJECT}; break; case COUNT: returnType = DataTypeManager.DefaultDataTypes.INTEGER; argTypes = new String[] {DataTypeManager.DefaultDataTypes.OBJECT}; break; case MAX: case MIN: case AVG: case SUM: returnType = DataTypeManager.DefaultDataTypes.OBJECT; argTypes = new String[] {DataTypeManager.DefaultDataTypes.OBJECT}; break; case STDDEV_POP: case STDDEV_SAMP: case VAR_POP: case VAR_SAMP: returnType = DataTypeManager.DefaultDataTypes.DOUBLE; argTypes = new String[] {DataTypeManager.DefaultDataTypes.DOUBLE}; break; case STRING_AGG: returnType = DataTypeManager.DefaultDataTypes.OBJECT; argTypes = new String[] {DataTypeManager.DefaultDataTypes.OBJECT}; aa.setAllowsOrderBy(true); break; case ARRAY_AGG: returnType = DataTypeManager.DefaultDataTypes.OBJECT; argTypes = new String[] {DataTypeManager.getDataTypeName(DataTypeManager.getArrayType(DataTypeManager.DefaultDataClasses.OBJECT))}; aa.setAllowsOrderBy(true); aa.setAllowsDistinct(false); break; case JSONARRAY_AGG: returnType = DataTypeManager.DefaultDataTypes.JSON; argTypes = new String[] {DataTypeManager.DefaultDataTypes.OBJECT}; aa.setAllowsOrderBy(true); aa.setAllowsDistinct(false); break; case XMLAGG: returnType = DataTypeManager.DefaultDataTypes.XML; argTypes = new String[] {DataTypeManager.DefaultDataTypes.XML}; aa.setAllowsOrderBy(true); aa.setAllowsDistinct(false); break; case FIRST_VALUE: case LAST_VALUE: returnType = DataTypeManager.DefaultDataTypes.OBJECT; argTypes = new String[] {DataTypeManager.DefaultDataTypes.OBJECT}; break; case LEAD: case LAG: returnType = DataTypeManager.DefaultDataTypes.OBJECT; argTypes = new String[] {DataTypeManager.DefaultDataTypes.OBJECT, DataTypeManager.DefaultDataTypes.INTEGER, DataTypeManager.DefaultDataTypes.OBJECT}; break; case NTILE: returnType = DataTypeManager.DefaultDataTypes.INTEGER; argTypes = new String[] {DataTypeManager.DefaultDataTypes.INTEGER}; break; case PERCENT_RANK: returnType = DataTypeManager.DefaultDataTypes.DOUBLE; argTypes = new String[] {}; break; case CUME_DIST: returnType = DataTypeManager.DefaultDataTypes.DOUBLE; argTypes = new String[] {}; break; case NTH_VALUE: returnType = DataTypeManager.DefaultDataTypes.OBJECT; argTypes = new String[] {DataTypeManager.DefaultDataTypes.OBJECT, DataTypeManager.DefaultDataTypes.INTEGER}; break; } FunctionMethod fm = FunctionMethod.createFunctionMethod(type.name(), type.name(), FunctionCategoryConstants.AGGREGATE, returnType, argTypes); fm.setAggregateAttributes(aa); result.add(fm); } return result; } FunctionLibrary(FunctionTree systemFuncs, FunctionTree... userFuncs); FunctionTree[] getUserFunctions(); FunctionTree getSystemFunctions(); List<String> getFunctionCategories(); List<FunctionMethod> getFunctionsInCategory(String category); boolean hasFunctionMethod(String name, int numArgs); FunctionDescriptor findFunction(String name, Class<?>[] types); List<FunctionDescriptor> findAllFunctions(String name, Class<?>[] types); ConversionResult determineNecessaryConversions(String name, Class<?> returnType, Expression[] args, Class<?>[] types, boolean hasUnknownType); FunctionDescriptor[] getConverts(FunctionMethod method, Class<?>[] types); boolean isVarArgArrayParam(FunctionMethod method, Class<?>[] types,
            int i, Class<?> targetType); FunctionDescriptor findTypedConversionFunction(Class<?> sourceType, Class<?> targetType); FunctionDescriptor copyFunctionChangeReturnType(FunctionDescriptor fd, Class<?> returnType); static boolean isConvert(Function function); List<FunctionMethod> getBuiltInAggregateFunctions(boolean includeAnalytic); boolean userFunctionExists(String resourceName); static final String CONVERT; static final String CAST; static final String LOOKUP; static final String USER; static final String ENV; static final String SYS_PROP; static final String ENV_VAR; static final String SESSION_ID; static final String DECODESTRING; static final String DECODEINTEGER; static final String COMMAND_PAYLOAD; static final String CONCAT; static final String CONCAT2; static final String CONCAT_OPERATOR; static final String SUBSTRING; static final String NVL; static final String IFNULL; static final String FROM_UNIXTIME; static final String TIMESTAMPADD; static final String PARSETIME; static final String PARSEDATE; static final String FORMATTIME; static final String FORMATDATE; static final String NULLIF; static final String COALESCE; static final String SPACE; static final String ARRAY_GET; static final String JSONARRAY; static final String MVSTATUS; static final Set<String> INTERNAL_SCHEMAS; }