protected Boolean likeMaybeList(Object left, String right, boolean positive, boolean caseInsensitive) { if (left instanceof Object[]) { for (Object l : ((Object[]) left)) { Boolean like = like(l, right, caseInsensitive); if (TRUE.equals(like)) { return Boolean.valueOf(positive); } } return Boolean.valueOf(!positive); } else { Boolean like = like(left, right, caseInsensitive); return positive ? like : not(like); } }
public Boolean walkNot(Operand value) { return not(bool(walkOperand(value))); }
protected Boolean walkEcmPath(Operator op, Operand rvalue) { if (op != Operator.EQ && op != Operator.NOTEQ) { throw new QueryParseException(NXQL.ECM_PATH + " requires = or <> operator"); } if (!(rvalue instanceof StringLiteral)) { throw new QueryParseException(NXQL.ECM_PATH + " requires literal path as right argument"); } String path = ((StringLiteral) rvalue).value; if (path.length() > 1 && path.endsWith("/")) { path = path.substring(0, path.length() - 1); } String id = pathResolver.getIdForPath(path); Object right = walkReference(new Reference(NXQL.ECM_UUID)); if (id == null) { return FALSE; } Boolean eq = eq(id, right); return op == Operator.EQ ? eq : not(eq); }
public Boolean walkNotEq(Operand lvalue, Operand rvalue) { if (isMixinTypes(lvalue)) { Object right = walkOperand(rvalue); if (!(right instanceof String)) { throw new QueryParseException("Invalid NE rhs: " + rvalue); } return walkMixinTypes(Collections.singletonList((String) right), false); } return not(walkEq(lvalue, rvalue)); }
public Boolean walkIn(Operand lvalue, Operand rvalue, boolean positive) { Object right = walkOperand(rvalue); if (!(right instanceof List)) { throw new QueryParseException("Invalid IN rhs: " + rvalue); } if (isMixinTypes(lvalue)) { return walkMixinTypes((List<String>) right, positive); } Object left = walkOperand(lvalue); Boolean in = inMaybeList(left, (List<Object>) right); return positive ? in : not(in); }