Commit 5614bf0d by Ashutosh Mestry Committed by Madhan Neethiraj

ATLAS-2229: DSL implementation using ANTLR #3 - Select, GroupBy, OrderBy

parent faeecf10
...@@ -720,8 +720,10 @@ public class EntityDiscoveryService implements AtlasDiscoveryService { ...@@ -720,8 +720,10 @@ public class EntityDiscoveryService implements AtlasDiscoveryService {
private AttributeSearchResult toAttributesResult(List results, GremlinQuery query) { private AttributeSearchResult toAttributesResult(List results, GremlinQuery query) {
AttributeSearchResult ret = new AttributeSearchResult(); AttributeSearchResult ret = new AttributeSearchResult();
List<String> names = extractNames(results); // List<String> names = extractNames(results);
List<List<Object>> values = extractValues(results); // List<List<Object>> values = extractValues(results);
List<String> names = (List<String>) results.get(0);
List<List<Object>> values = extractValues(results.subList(1, results.size()));
ret.setName(names); ret.setName(names);
ret.setValues(values); ret.setValues(values);
......
...@@ -21,13 +21,12 @@ package org.apache.atlas.query; ...@@ -21,13 +21,12 @@ package org.apache.atlas.query;
import org.apache.atlas.query.antlr4.AtlasDSLParser.*; import org.apache.atlas.query.antlr4.AtlasDSLParser.*;
import org.apache.atlas.query.antlr4.AtlasDSLParserBaseVisitor; import org.apache.atlas.query.antlr4.AtlasDSLParserBaseVisitor;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.tuple.MutablePair;
import org.apache.commons.lang3.tuple.Pair;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects;
public class DSLVisitor extends AtlasDSLParserBaseVisitor<String> { public class DSLVisitor extends AtlasDSLParserBaseVisitor<String> {
private static final Logger LOG = LoggerFactory.getLogger(DSLVisitor.class); private static final Logger LOG = LoggerFactory.getLogger(DSLVisitor.class);
...@@ -78,17 +77,46 @@ public class DSLVisitor extends AtlasDSLParserBaseVisitor<String> { ...@@ -78,17 +77,46 @@ public class DSLVisitor extends AtlasDSLParserBaseVisitor<String> {
LOG.debug("=> DSLVisitor.visitSelectExpr({})", ctx); LOG.debug("=> DSLVisitor.visitSelectExpr({})", ctx);
} }
// Select can have only attributes, aliased attributes or aggregate functions
// Groupby attr also represent select expr, no processing is needed in that case
// visit groupBy would handle the select expr appropriately
if (!(ctx.getParent() instanceof GroupByExpressionContext)) { if (!(ctx.getParent() instanceof GroupByExpressionContext)) {
List<Pair<String, String>> items = new ArrayList<>(); String[] items = new String[ctx.selectExpression().size()];
for (int i = 0; i < ctx.selectExpression().size(); i++) { String[] labels = new String[ctx.selectExpression().size()];
String idf = ctx.selectExpression(i).expr().getText();
String alias = (ctx.selectExpression(i).K_AS() != null) ? QueryProcessor.SelectExprMetadata selectExprMetadata = new QueryProcessor.SelectExprMetadata();
ctx.selectExpression(i).identifier().getText() : "";
items.add(new MutablePair<String, String>(idf, alias)); for (int i = 0; i < ctx.selectExpression().size(); i++) {
SelectExpressionContext selectExpression = ctx.selectExpression(i);
CountClauseContext countClause = selectExpression.expr().compE().countClause();
SumClauseContext sumClause = selectExpression.expr().compE().sumClause();
MinClauseContext minClause = selectExpression.expr().compE().minClause();
MaxClauseContext maxClause = selectExpression.expr().compE().maxClause();
IdentifierContext identifier = selectExpression.identifier();
labels[i] = identifier != null ? identifier.getText() : selectExpression.getText();
if (Objects.nonNull(countClause)) {
items[i] = "count";
selectExprMetadata.setCountIdx(i);
} else if (Objects.nonNull(sumClause)) {
items[i] = sumClause.expr().getText();
selectExprMetadata.setSumIdx(i);
} else if (Objects.nonNull(minClause)) {
items[i] = minClause.expr().getText();
selectExprMetadata.setMinIdx(i);
} else if (Objects.nonNull(maxClause)) {
items[i] = maxClause.expr().getText();
selectExprMetadata.setMaxIdx(i);
} else {
items[i] = selectExpression.expr().getText();
}
} }
queryProcessor.addSelect(items); selectExprMetadata.setItems(items);
selectExprMetadata.setLabels(labels);
queryProcessor.addSelect(selectExprMetadata);
} }
return super.visitSelectExpr(ctx); return super.visitSelectExpr(ctx);
} }
......
...@@ -189,6 +189,14 @@ public class IdentifierHelper { ...@@ -189,6 +189,14 @@ public class IdentifierHelper {
return isPrimitive; return isPrimitive;
} }
public boolean isAttribute() {
return isAttribute;
}
public String getAttributeName() {
return attributeName;
}
public String getEdgeLabel() { public String getEdgeLabel() {
return edgeLabel; return edgeLabel;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment