public void walkBetween(Operand lvalue, Operand rvalue, boolean positive) { LiteralList list = (LiteralList) rvalue; Literal left = list.get(0); Literal right = list.get(1); if (!positive) { filter.append("(!"); } filter.append("(&"); walkGtEq(lvalue, left); walkLtEq(lvalue, right); filter.append(')'); if (!positive) { filter.append(')'); } }
protected static List<Serializable> getSerializableLiterals(LiteralList list) { List<Serializable> serList = new ArrayList<>(list.size()); for (Literal literal : list) { serList.add(getSerializableLiteral(literal)); } return serList; }
@Override public void visitLiteralList(LiteralList node) { buf.append('('); for (Iterator<Literal> it = node.iterator(); it.hasNext();) { it.next().accept(this); if (it.hasNext()) { buf.append(", "); } } buf.append(')'); }
/** * Finds all the types to take into account (all concrete types being a subtype of the passed types) based on the * FROM list. * <p> * Adds them as a ecm:primaryType match in the toplevel operands. */ protected void addTypes(List<Predicate> clauses, FromClause node) { onlyRelations = true; Set<String> fromTypes = new HashSet<>(); FromList elements = node.elements; for (String typeName : elements.values()) { if (TYPE_DOCUMENT.equalsIgnoreCase(typeName)) { typeName = TYPE_DOCUMENT; } fromTypes.addAll(getDocumentTypeNamesExtending(typeName)); boolean isRelation = isTypeRelation(typeName); onlyRelations = onlyRelations && isRelation; } fromTypes.remove(TYPE_ROOT); LiteralList list = new LiteralList(); for (String type : fromTypes) { list.add(new StringLiteral(type)); } clauses.add(new Predicate(new Reference(NXQL.ECM_PRIMARYTYPE), Operator.IN, list)); }
protected void addFacetFilters(List<Predicate> clauses, FacetFilter facetFilter) { if (facetFilter == null) { return; } for (String mixin : facetFilter.required) { // every facet is required, not just any of them, // so do them one by one Predicate expr = new Predicate(new Reference(NXQL.ECM_MIXINTYPE), Operator.EQ, new StringLiteral(mixin)); clauses.add(expr); } if (!facetFilter.excluded.isEmpty()) { LiteralList list = new LiteralList(); for (String mixin : facetFilter.excluded) { list.add(new StringLiteral(mixin)); } Predicate expr = new Predicate(new Reference(NXQL.ECM_MIXINTYPE), Operator.NOTIN, list); clauses.add(expr); } }
protected void checkDateLiteralForCast(Operator op, Operand value, String name) { if (op == Operator.BETWEEN || op == Operator.NOTBETWEEN) { LiteralList l = (LiteralList) value; checkDateLiteralForCast(l.get(0), name); checkDateLiteralForCast(l.get(1), name); } else { checkDateLiteralForCast(value, name); } }
LiteralList list = new LiteralList(); for (String type : fromTypes) { list.add(new StringLiteral(type));
public List<Object> walkLiteralList(LiteralList litList) { List<Object> list = new ArrayList<>(litList.size()); for (Literal lit : litList) { list.add(walkLiteral(lit)); } return list; }
@Override public void visitLiteralList(LiteralList node) { clause.append('('); for (Iterator<Literal> it = node.iterator(); it.hasNext();) { it.next().accept(this); if (it.hasNext()) { clause.append(", "); } } clause.append(')'); }
protected void checkDateLiteralForCast(Operator op, Operand value, String name) { if (op == Operator.BETWEEN || op == Operator.NOTBETWEEN) { LiteralList l = (LiteralList) value; checkDateLiteralForCast(l.get(0), name); checkDateLiteralForCast(l.get(1), name); } else { checkDateLiteralForCast(value, name); } }
public void addFacetFilterClauses(FacetFilter facetFilter) { for (String mixin : facetFilter.required) { // every facet is required, not just any of them, // so do them one by one // expr = getMixinsMatchExpression(Collections.singleton(facet), // true); Predicate predicate = new Predicate(new Reference(NXQL.ECM_MIXINTYPE), Operator.EQ, new StringLiteral(mixin)); toplevelPredicates.add(predicate); } if (!facetFilter.excluded.isEmpty()) { // expr = getMixinsMatchExpression(facetFilter.excluded, false); LiteralList list = new LiteralList(); for (String mixin : facetFilter.excluded) { list.add(new StringLiteral(mixin)); } Predicate predicate = new Predicate(new Reference(NXQL.ECM_MIXINTYPE), Operator.NOTIN, list); toplevelPredicates.add(predicate); } }
public List<Object> walkLiteralList(LiteralList litList) { List<Object> list = new ArrayList<>(litList.size()); for (Literal lit : litList) { list.add(walkLiteral(lit)); } return list; }
predicate = new Predicate(new Reference(NXQL.ECM_PRIMARYTYPE), Operator.EQ, new StringLiteral(pt)); } else { // primaryTypes.size() > 1 LiteralList list = new LiteralList(); for (String pt : primaryTypes) { list.add(new StringLiteral(pt));
if (node.rvalue instanceof LiteralList) { LiteralList items = (LiteralList) node.rvalue; values = new Object[items.size()]; int i = 0; for (Literal item : items) {
public Object walkBetween(Operand lvalue, Operand rvalue, boolean positive) { LiteralList l = (LiteralList) rvalue; Predicate va = new Predicate(lvalue, Operator.GTEQ, l.get(0)); Predicate vb = new Predicate(lvalue, Operator.LTEQ, l.get(1)); Predicate pred = new Predicate(va, Operator.AND, vb); if (!positive) { pred = new Predicate(pred, Operator.NOT, null); } return walkExpression(pred); }
predicate = new Predicate(new Reference(NXQL.ECM_PRIMARYTYPE), Operator.EQ, new StringLiteral(pt)); } else { // primaryTypes.size() > 1 LiteralList list = new LiteralList(); for (String pt : primaryTypes) { list.add(new StringLiteral(pt));
public Document walkBetween(Operand lvalue, Operand rvalue, boolean positive) { LiteralList l = (LiteralList) rvalue; FieldInfo fieldInfo = walkReference(lvalue); Object left = walkOperand(l.get(0)); Object right = walkOperand(l.get(1)); if (positive) { Document range = new Document(); range.put(QueryOperators.GTE, left); range.put(QueryOperators.LTE, right); return newDocumentWithField(fieldInfo, range); } else { Document a = newDocumentWithField(fieldInfo, new Document(QueryOperators.LT, left)); Document b = newDocumentWithField(fieldInfo, new Document(QueryOperators.GT, right)); return new Document(QueryOperators.OR, Arrays.asList(a, b)); } }