private IScalarEvaluatorFactory createScalarFunctionEvaluatorFactory(AbstractFunctionCallExpression expr, IVariableTypeEnvironment env, IOperatorSchema[] inputSchemas, JobGenContext context) throws AlgebricksException { IScalarEvaluatorFactory[] args = codegenArguments(expr, env, inputSchemas, context); IFunctionDescriptor fd = expr.getFunctionInfo() instanceof IExternalFunctionInfo ? ExternalFunctionDescriptorProvider.getExternalFunctionDescriptor( (IExternalFunctionInfo) expr.getFunctionInfo(), (ICcApplicationContext) context.getAppContext()) : resolveFunction(expr, env, context); return fd.createEvaluatorFactory(args); }
private DocumentOrder propagateDocumentOrder(ILogicalExpression expr, HashMap<Integer, DocumentOrder> variableMap) { DocumentOrder documentOrder = null; switch (expr.getExpressionTag()) { case FUNCTION_CALL: AbstractFunctionCallExpression functionCall = (AbstractFunctionCallExpression) expr; // Look up all arguments. List<DocumentOrder> argProperties = new ArrayList<DocumentOrder>(); for (Mutable<ILogicalExpression> argExpr : functionCall.getArguments()) { argProperties.add(propagateDocumentOrder(argExpr.getValue(), variableMap)); } // Propagate the property. Function func = (Function) functionCall.getFunctionInfo(); documentOrder = func.getDocumentOrderPropagationPolicy().propagate(argProperties); break; case VARIABLE: VariableReferenceExpression variableReference = (VariableReferenceExpression) expr; int argVariableId = variableReference.getVariableReference().getId(); documentOrder = variableMap.get(argVariableId); break; case CONSTANT: default: documentOrder = DocumentOrder.YES; break; } return documentOrder; }
private UniqueNodes propagateUniqueNodes(ILogicalExpression expr, HashMap<Integer, UniqueNodes> variableMap) { UniqueNodes uniqueNodes = null; switch (expr.getExpressionTag()) { case FUNCTION_CALL: AbstractFunctionCallExpression functionCall = (AbstractFunctionCallExpression) expr; // Look up all arguments. List<UniqueNodes> argProperties = new ArrayList<UniqueNodes>(); for (Mutable<ILogicalExpression> argExpr : functionCall.getArguments()) { argProperties.add(propagateUniqueNodes(argExpr.getValue(), variableMap)); } // Propagate the property. Function func = (Function) functionCall.getFunctionInfo(); uniqueNodes = func.getUniqueNodesPropagationPolicy().propagate(argProperties); break; case VARIABLE: VariableReferenceExpression variableReference = (VariableReferenceExpression) expr; int argVariableId = variableReference.getVariableReference().getId(); uniqueNodes = variableMap.get(argVariableId); break; case CONSTANT: default: uniqueNodes = UniqueNodes.YES; break; } return uniqueNodes; }
private static boolean containsNonpureCall(ILogicalExpression expr) { if (expr.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL) { AbstractFunctionCallExpression fExpr = (AbstractFunctionCallExpression) expr; if (!fExpr.getFunctionInfo().isFunctional()) { return true; } for (Mutable<ILogicalExpression> subExpr : fExpr.getArguments()) { if (containsNonpureCall(subExpr.getValue())) { return true; } } } return false; }
private IAType getTypeForFunction(AbstractFunctionCallExpression expr, IVariableTypeEnvironment env, IMetadataProvider<?, ?> mp) throws AlgebricksException { FunctionIdentifier fi = expr.getFunctionIdentifier(); // Note: built-in functions + udfs IResultTypeComputer rtc; FunctionSignature signature = new FunctionSignature(fi); if (BuiltinFunctions.isBuiltinCompilerFunction(signature, true)) { rtc = BuiltinFunctions.getResultTypeComputer(fi); } else { rtc = ((ExternalFunctionInfo) expr.getFunctionInfo()).getResultTypeComputer(); } if (rtc == null) { throw new AlgebricksException("Type computer missing for " + fi); } return rtc.computeType(expr, env, mp); }
Mutable<ILogicalExpression> argExpr = funcCallExpr.getArguments().get(iter1); inputRecordType = (IAType) op.computeOutputTypeEnvironment(context).getType(argExpr.getValue()); if (!(((ExternalScalarFunctionInfo) funcCallExpr.getFunctionInfo()).getArgumenTypes() .get(iter1) instanceof ARecordType)) { continue; requiredRecordType = (ARecordType) ((ExternalScalarFunctionInfo) funcCallExpr.getFunctionInfo()) .getArgumenTypes().get(iter1);
Function functionInfo2 = (Function) functionCall2.getFunctionInfo(); if (!functionInfo2.hasUnnestingEvaluatorFactory()) { return false;
private boolean listifyUnnestingFunction(ILogicalOperator op, Mutable<ILogicalExpression> exprRef, AbstractFunctionCallExpression func, IOptimizationContext context) throws AlgebricksException { IFunctionInfo functionInfo = func.getFunctionInfo();
Function functionInfo2 = (Function) functionCall2.getFunctionInfo(); if (!functionInfo2.hasScalarEvaluatorFactory()) { return false;