public static List<List<List<String>>> getFunctionDependencies(IQueryRewriter rewriter, Expression expression,
MetadataProvider metadataProvider) throws CompilationException {
Set<CallExpr> functionCalls = rewriter.getFunctionCalls(expression);
List<List<String>> datasourceDependencies = new ArrayList<>();
List<List<String>> functionDependencies = new ArrayList<>();
for (CallExpr functionCall : functionCalls) {
FunctionSignature signature = functionCall.getFunctionSignature();
FunctionIdentifier fid =
new FunctionIdentifier(signature.getNamespace(), signature.getName(), signature.getArity());
if (fid.equals(BuiltinFunctions.DATASET)) {
Pair<String, String> path = DatasetUtil.getDatasetInfo(metadataProvider,
((LiteralExpr) functionCall.getExprList().get(0)).getValue().getStringValue());
datasourceDependencies.add(Arrays.asList(path.first, path.second));
}
else if (BuiltinFunctions.isBuiltinCompilerFunction(signature, false)) {
continue;
} else {
functionDependencies.add(Arrays.asList(signature.getNamespace(), signature.getName(),
Integer.toString(signature.getArity())));
}
}
List<List<List<String>>> dependencies = new ArrayList<>();
dependencies.add(datasourceDependencies);
dependencies.add(functionDependencies);
return dependencies;
}