/** * Adds a feature/value-pair to the predicate query. This feature is applied to all sub queries. * @param key name of the feature to be set in this query. * @param value value of the feature. */ public void addFeature(String key, String value) { addFeature(key, value, ALL_SUB_QUERIES); }
/** * Adds a range feature with a given value to the predicate query. * This feature is applied to all sub queries. * @param key name of the feature to be set in this query. * @param value value of the feature. */ public void addRangeFeature(String key, long value) { addRangeFeature(key, value, ALL_SUB_QUERIES); }
@Override public int encode(ByteBuffer buffer) { super.encodeThis(buffer); putString(fieldName, buffer); encodeFeatures(features, buffer); encodeFeatures(rangeFeatures, buffer); return 1; // number of encoded stack dump items }
@NonNull private Item buildPredicate(OperatorNode<ExpressionOperator> ast) { List<OperatorNode<ExpressionOperator>> args = ast.getArgument(1); Preconditions.checkArgument(args.size() == 3, "Expected 3 arguments, got %s.", args.size()); PredicateQueryItem item = new PredicateQueryItem(); item.setIndexName(getIndex(args.get(0))); addFeatures(args.get(1), (key, value, subqueryBitmap) -> item.addFeature(key, (String) value, subqueryBitmap), PredicateQueryItem.ALL_SUB_QUERIES); addFeatures(args.get(2), (key, value, subqueryBitmap) -> { if (value instanceof Long) { item.addRangeFeature(key, (Long) value, subqueryBitmap); } else { item.addRangeFeature(key, (Integer) value, subqueryBitmap); } }, PredicateQueryItem.ALL_SUB_QUERIES); return leafStyleSettings(ast, item); }
@Override boolean serialize(StringBuilder destination, Item item) { PredicateQueryItem pItem = (PredicateQueryItem) item; destination.append("predicate(").append(pItem.getIndexName()).append(','); appendFeatures(destination, pItem.getFeatures()); destination.append(','); appendFeatures(destination, pItem.getRangeFeatures()); destination.append(')'); return false; }
private void addPredicateTerm(Query query, String fieldName, String attributes, String rangeAttributes) { PredicateQueryItem item = new PredicateQueryItem(); item.setIndexName(fieldName); new PredicateValueAttributeParser(item).parse(attributes); new PredicateRangeAttributeParser(item).parse(rangeAttributes); QueryTreeUtil.andQueryItemWithRoot(query, item); }
private Index getIndexFromUnionOfDocumentTypes(PredicateQueryItem item) { return indexFacts.getIndex(item.getIndexName()); }
private void visit(PredicateQueryItem item) { Index index = getIndexFromUnionOfDocumentTypes(item); for (PredicateQueryItem.RangeEntry entry : item.getRangeFeatures()) { long value = entry.getValue(); if (value < index.getPredicateLowerBound() || value > index.getPredicateUpperBound()) { errorMessage = Optional.of(ErrorMessage.createIllegalQuery( String.format("%s=%d outside configured predicate bounds.", entry.getKey(), value))); } } }
@NonNull private Item buildPredicate(String key, Inspector value) { HashMap<Integer, Inspector> children = getChildrenMap(value); String field = children.get(0).asString(); Inspector args = children.get(1); Preconditions.checkArgument(children.size() == 3, "Expected 3 arguments, got %s.", children.size()); PredicateQueryItem item = new PredicateQueryItem(); item.setIndexName(field); List<Inspector> argumentList = valueListFromInspector(getChildren(value)); // Adding attributes argumentList.get(1).traverse((ObjectTraverser) (attrKey, attrValue) -> { if (attrValue.type() == ARRAY){ List<Inspector> attributes = valueListFromInspector(attrValue); attributes.forEach( (attribute) -> item.addFeature(attrKey, attribute.asString())); } else { item.addFeature(attrKey, attrValue.asString()); } }); // Adding range attributes argumentList.get(2).traverse((ObjectTraverser) (attrKey, attrValue) -> item.addRangeFeature(attrKey, (int)attrValue.asDouble())); return leafStyleSettings(getAnnotations(value), item); }
@Override protected void addAttribute(String attribute, String value) { item.addFeature(attribute, value); }
@Override protected void addAttribute(String attribute, String value) { item.addRangeFeature(attribute, Long.parseLong(value)); }
@Override protected void addAttribute(String attribute, String value, BigInteger subQueryMask) { item.addFeature(attribute, value, subQueryMask.longValue()); } }
@Override protected void addAttribute(String attribute, String value, BigInteger subQueryMask) { item.addRangeFeature(attribute, Long.parseLong(value), subQueryMask.longValue()); } }
/** * Adds a feature/value-pair to the predicate query. * @param key name of the feature to be set in this query. * @param value value of the feature. * @param subQueryBitmap bitmap specifying which sub queries this feature applies to. */ public void addFeature(String key, String value, long subQueryBitmap) { addFeature(new Entry(key, value, subQueryBitmap)); }
/** * Adds a range feature with a given value to the predicate query. * @param key name of the feature to be set in this query. * @param value value of the feature. * @param subQueryBitmap bitmap specifying which sub queries this feature applies to. */ public void addRangeFeature(String key, long value, long subQueryBitmap) { addRangeFeature(new RangeEntry(key, value, subQueryBitmap)); }