public FunctionDecl getFunctionDecl(Function function) throws CompilationException { if (!function.getLanguage().equals(Function.LANGUAGE_SQLPP)) { throw new CompilationException(ErrorCode.COMPILATION_INCOMPATIBLE_FUNCTION_LANGUAGE, Function.LANGUAGE_SQLPP, function.getLanguage()); } String functionBody = function.getFunctionBody(); List<String> params = function.getArguments(); StringBuilder builder = new StringBuilder(); builder.append(" use " + function.getDataverseName() + ";"); builder.append(" declare function " + function.getName().split("@")[0]); builder.append("("); for (String param : params) { VarIdentifier varId = SqlppVariableUtil.toUserDefinedVariableName(param); builder.append(varId); builder.append(","); } if (params.size() > 0) { builder.delete(builder.length() - 1, builder.length()); } builder.append(")"); builder.append("{"); builder.append("\n"); builder.append(functionBody); builder.append("\n"); builder.append("};"); IParser parser = parserFactory.createParser(new StringReader(new String(builder))); List<Statement> statements = parser.parse(); FunctionDecl decl = (FunctionDecl) statements.get(1); return decl; }
public FunctionDecl getFunctionDecl(Function function) throws CompilationException { if (!function.getLanguage().equals(Function.LANGUAGE_AQL)) { throw new CompilationException(ErrorCode.COMPILATION_INCOMPATIBLE_FUNCTION_LANGUAGE, Function.LANGUAGE_AQL, function.getLanguage()); } String functionBody = function.getFunctionBody(); List<String> arguments = function.getArguments(); List<VarIdentifier> varIdentifiers = new ArrayList<VarIdentifier>(); StringBuilder builder = new StringBuilder(); builder.append(" use dataverse " + function.getDataverseName() + ";"); builder.append(" declare function " + function.getName().split("@")[0]); builder.append("("); boolean first = true; for (String argument : arguments) { VarIdentifier varId = new VarIdentifier(argument); varIdentifiers.add(varId); if (first) { first = false; } else { builder.append(","); } builder.append(argument); } builder.append("){\n").append(functionBody).append("\n}"); IParser parser = parserFactory.createParser(new CharSequenceReader(builder)); List<Statement> statements = parser.parse(); FunctionDecl decl = (FunctionDecl) statements.get(1); return decl; }
private static IFunctionInfo getScalarFunctionInfo(MetadataTransactionContext txnCtx, Function function) throws AlgebricksException { FunctionIdentifier fid = new FunctionIdentifier(function.getDataverseName(), function.getName(), function.getArity()); IResultTypeComputer typeComputer = getResultTypeComputer(txnCtx, function); List<IAType> arguments = new ArrayList<>(); IAType returnType; List<String> argumentTypes = function.getArguments(); for (String argumentType : argumentTypes) { arguments.add(getTypeInfo(argumentType, txnCtx, function)); } returnType = getTypeInfo(function.getReturnType(), txnCtx, function); return new ExternalScalarFunctionInfo(fid.getNamespace(), fid.getName(), fid.getArity(), returnType, function.getFunctionBody(), function.getLanguage(), arguments, typeComputer); }
listBuilder.reset((AOrderedListType) MetadataRecordTypes.FUNCTION_RECORDTYPE .getFieldTypes()[MetadataRecordTypes.FUNCTION_ARECORD_FUNCTION_PARAM_LIST_FIELD_INDEX]); for (String param : function.getArguments()) { itemValue.reset(); aString.setValue(param);