use of org.apache.atlas.groovy.FunctionCallExpression in project incubator-atlas by apache.
the class AliasFinder method postVisitFunctionCaller.
@Override
public boolean postVisitFunctionCaller(AbstractFunctionExpression functionCall) {
if (functionCall instanceof FunctionCallExpression) {
FunctionCallExpression expr = (FunctionCallExpression) functionCall;
if (expr.getType() == TraversalStepType.SIDE_EFFECT && expr.getFunctionName().equals("as")) {
//We found an alias. This is currently the last expression we've seen
//in our traversal back up the expression tree, so at this point a final
//alias is not needed.
LiteralExpression aliasNameExpr = (LiteralExpression) expr.getArguments().get(0);
foundAliases.add(aliasNameExpr);
finalAliasNeeded = false;
}
}
if (TRANSFORMATION_STEP_TYPES.contains(functionCall.getType())) {
//needs to be added.
if (!foundAliases.isEmpty()) {
finalAliasNeeded = true;
}
}
return true;
}
use of org.apache.atlas.groovy.FunctionCallExpression in project incubator-atlas by apache.
the class IsOrParent method apply.
@Override
public Boolean apply(GroovyExpression expr) {
if (!(expr instanceof AbstractFunctionExpression)) {
return false;
}
AbstractFunctionExpression functionCall = (AbstractFunctionExpression) expr;
GroovyExpression target = functionCall.getCaller();
if (!(target instanceof FunctionCallExpression)) {
return false;
}
if (target.getType() != TraversalStepType.FILTER) {
return false;
}
FunctionCallExpression targetFunction = (FunctionCallExpression) target;
return targetFunction.getFunctionName().equals("or");
}
use of org.apache.atlas.groovy.FunctionCallExpression in project incubator-atlas by apache.
the class FunctionGenerator method postVisitFunctionCaller.
@Override
public boolean postVisitFunctionCaller(AbstractFunctionExpression expr) {
boolean isRootExpr = depth == 1;
visitParentExpression(expr);
//to examine the root expression.
if (isRootExpr) {
FunctionCallExpression dummyParent = new FunctionCallExpression(expr, "dummy");
visitParentExpression(dummyParent);
newRootExpression = dummyParent.getCaller();
}
depth--;
return true;
}
use of org.apache.atlas.groovy.FunctionCallExpression in project incubator-atlas by apache.
the class Gremlin3ExpressionFactory method generateLikeExpressionUsingFilter.
@Override
public GroovyExpression generateLikeExpressionUsingFilter(GroovyExpression parent, String propertyName, GroovyExpression propertyValue) throws AtlasException {
GroovyExpression itExpr = getItVariable();
GroovyExpression nameExpr = new FieldExpression(itExpr, propertyName);
GroovyExpression matchesExpr = new FunctionCallExpression(nameExpr, MATCHES, escapePropertyValue(propertyValue));
GroovyExpression closureExpr = new ClosureExpression(matchesExpr);
GroovyExpression filterExpr = new FunctionCallExpression(parent, FILTER_METHOD, closureExpr);
return filterExpr;
}
use of org.apache.atlas.groovy.FunctionCallExpression in project incubator-atlas by apache.
the class Gremlin3ExpressionFactory method generateGroupByExpression.
@Override
public GroovyExpression generateGroupByExpression(GroovyExpression parent, GroovyExpression groupByExpression, GroovyExpression aggregationFunction) {
GroovyExpression result = new FunctionCallExpression(TraversalStepType.BARRIER, parent, "group");
GroovyExpression groupByClosureExpr = new TypeCoersionExpression(new ClosureExpression(groupByExpression), "Function");
result = new FunctionCallExpression(TraversalStepType.SIDE_EFFECT, result, "by", groupByClosureExpr);
result = new FunctionCallExpression(TraversalStepType.END, result, "toList");
GroovyExpression mapValuesClosure = new ClosureExpression(new FunctionCallExpression(new CastExpression(getItVariable(), "Map"), "values"));
result = new FunctionCallExpression(result, "collect", mapValuesClosure);
//when we call Map.values(), we end up with an extra list around the result. We remove this by calling toList().get(0). This
//leaves us with a list of lists containing the vertices that match each group. We then apply the aggregation functions
//specified in the select list to each of these inner lists.
result = new FunctionCallExpression(result, "toList");
result = new FunctionCallExpression(result, "get", new LiteralExpression(0));
GroovyExpression aggregrationFunctionClosure = new ClosureExpression(aggregationFunction);
result = new FunctionCallExpression(result, "collect", aggregrationFunctionClosure);
return result;
}
Aggregations