/** * @inheritDoc */ @Override public void meet(CompareAny theOp) throws Exception { mBuffer.append("("); theOp.getArg().visit(this); mBuffer.append(" ").append(theOp.getOperator().getSymbol()).append(" any "); mBuffer.append("("); mBuffer.append(renderTupleExpr(theOp.getSubQuery())); mBuffer.append(")"); mBuffer.append(")"); }
public CompareAny(ValueExpr valueExpr, TupleExpr subQuery, CompareOp operator) { super(valueExpr, subQuery); setOperator(operator); }
@Override public boolean equals(Object other) { if (other instanceof CompareAny && super.equals(other)) { CompareAny o = (CompareAny)other; return operator.equals(o.getOperator()); } return false; }
@Override public CompareAny visit(ASTCompareAny node, Object data) throws VisitorException { ValueExpr valueExpr = (ValueExpr)node.getLeftOperand().jjtAccept(this, null); TupleExpr tupleExpr = (TupleExpr)node.getRightOperand().jjtAccept(this, null); CompareOp op = node.getOperator().getValue(); return new CompareAny(valueExpr, tupleExpr, op); }
@Override public void meet(CompareAny node) { handleType(SeRQO.COMPAREANY); handleLiteral(SeRQO.OPERATOR, node.getOperator().name()); super.meet(node); }
/** * @inheritDoc */ @Override public void meet(CompareAny theOp) throws Exception { mBuffer.append("("); theOp.getArg().visit(this); mBuffer.append(" ").append(theOp.getOperator().getSymbol()).append(" any "); mBuffer.append("("); // TODO: query render this theOp.getSubQuery().visit(this); mBuffer.append(")"); mBuffer.append(")"); }
@Override public void meet(CompareAny node) { if (predicate.equals(SeRQO.OPERATOR)) { Literal lit = (Literal) object; node.setOperator(CompareOp.valueOf(lit.getLabel())); } else { super.meet(node); } }
public Value evaluate(CompareAny node, BindingSet bindings) throws ValueExprEvaluationException, QueryEvaluationException { Value leftValue = evaluate(node.getArg(), bindings); // Result is false until a match has been found boolean result = false; // Use first binding name from tuple expr to compare values String bindingName = node.getSubQuery().getBindingNames().iterator().next(); CloseableIteration<BindingSet, QueryEvaluationException> iter = evaluate(node.getSubQuery(), bindings); try { while (result == false && iter.hasNext()) { BindingSet bindingSet = iter.next(); Value rightValue = bindingSet.getValue(bindingName); try { result = QueryEvaluationUtil.compare(leftValue, rightValue, node.getOperator()); } catch (ValueExprEvaluationException e) { // ignore, maybe next value will match } } } finally { iter.close(); } return BooleanLiteral.valueOf(result); }