private Clause createFilterClause(Operation operation, String field, String... values) { FilterClause filterClause = new ObjectFilterClause(); filterClause.setOperation(operation); filterClause.setField(field); filterClause.setValues(Stream.of(values).map(v -> new Value(Value.Kind.VALUE, v)).collect(Collectors.toList())); return filterClause; }
private static boolean performRelational(BulletRecord record, ObjectFilterClause clause) { Clause.Operation operator = clause.getOperation(); if (isEmpty(clause.getValues())) { return true; } TypedObject object = extractTypedObject(clause.getField(), record); if (operator == Clause.Operation.REGEX_LIKE) { return REGEX_LIKE.compare(object, clause.getPatterns().stream()); } Type type; if (operator == Clause.Operation.SIZE_IS) { type = Type.INTEGER; } else if (operator == Clause.Operation.CONTAINS_KEY) { type = Type.STRING; } else if (operator == Clause.Operation.CONTAINS_VALUE) { type = object.getPrimitiveType(); } else { type = object.getType(); } return COMPARATORS.get(operator).compare(object, cast(record, type, clause.getValues())); }
@Override public boolean hasNull(Value value) { return (value.getType() == null || value.getType() == Type.NULL) && Type.isNullExpression(getValue(value)); }
private Clause createFilterClause(Operation operation, String field, Expression... expressions) { FilterClause filterClause = new ObjectFilterClause(); filterClause.setOperation(operation); filterClause.setField(field); filterClause.setValues(Stream.of(expressions).map(e -> new Value(e instanceof Identifier ? Value.Kind.FIELD : Value.Kind.VALUE, e.toFormatlessString())).collect(Collectors.toList())); return filterClause; }
private Clause rewriteClause(Clause clause) { Clause toReturn = clause; if (clause instanceof LogicalClause) { LogicalClause logical = ((LogicalClause) clause); logical.setClauses(rewriteClauses(logical.getClauses())); } else if (clause instanceof StringFilterClause) { toReturn = new ObjectFilterClause((StringFilterClause) clause); } return toReturn; } }