@Override public AggregateQuery visit(OrNode node) { throw new MolgenisQueryException( "RSQL query operator OR (';' or 'or') not allowed in aggregates query"); }
private Attribute getAttribute(ComparisonNode node) { List<String> args = node.getArguments(); if (args.size() != 1) { throw new MolgenisQueryException( String.format( "RSQL query value must have exactly one value instead of [%s]", StringUtils.join(args, ','))); } String attrName = args.iterator().next(); String[] attrTokens = attrName.split("\\."); Attribute attr = entityType.getAttribute(attrTokens[0]); if (attr == null) { throw new UnknownAttributeException(entityType, attrName); } EntityType entityTypeAtDepth; for (int i = 1; i < attrTokens.length; ++i) { entityTypeAtDepth = attr.getRefEntity(); attr = entityTypeAtDepth.getAttribute(attrTokens[i]); if (attr == null) { throw new UnknownAttributeException(entityTypeAtDepth, attrName); } } return attr; } }
@Override public AggregateQuery visit(ComparisonNode node) { String symbol = node.getOperator().getSymbol(); if (!symbol.equals("==")) { throw new MolgenisQueryException( String.format( "RSQL query symbol [%s] not allowed in aggregates query, use ['==']", symbol)); } String selector = node.getSelector(); switch (selector) { case "x": aggsQ.setAttributeX(getAttribute(node)); break; case "y": aggsQ.setAttributeY(getAttribute(node)); break; case "distinct": aggsQ.setAttributeDistinct(getAttribute(node)); break; default: throw new MolgenisQueryException( String.format( "RSQL query selector [%s] not allowed in aggregates query, use ['x', 'y' or 'distinct']", selector)); } return aggsQ; }
break; case "=should=": throw new MolgenisQueryException("Unsupported RSQL query operator [" + symbol + "]"); case "=dismax=": throw new MolgenisQueryException("Unsupported RSQL query operator [" + symbol + "]"); case "=fuzzy=": throw new MolgenisQueryException("Unsupported RSQL query operator [" + symbol + "]"); default: throw new MolgenisQueryException("Unknown RSQL query operator [" + symbol + "]");
Attribute yAttr = aggsQ.getAttributeY(); if (xAttr == null && yAttr == null) { throw new MolgenisQueryException("Aggregate query is missing 'x' or 'y' attribute");