/** * Parses a sort expression using the given json object */ public static Sort fromJson(JsonNode node) { if (node instanceof ArrayNode) { return CompositeSortKey.fromJson((ArrayNode) node); } else { return SortKey.fromJson((ObjectNode) node); } }
@Override public JsonNode toJson() { return getFactory().objectNode().put(field.toString(), desc ? "$desc" : "$asc"); }
private void validateIndexFields(EntityInfo ei) { for (Index ix : ei.getIndexes().getIndexes()) { List<SortKey> fields = ix.getFields(); List<SortKey> newFields = null; boolean copied = false; int i = 0; for (SortKey key : fields) { Path p = key.getField(); Path newPath = translateIndexPath(p); if (!p.equals(newPath)) { SortKey newKey = new SortKey(newPath, key.isDesc()); if (!copied) { newFields = new ArrayList<>(); newFields.addAll(fields); copied = true; } newFields.set(i, newKey); } } if (copied) { ix.setFields(newFields); LOGGER.debug("Index rewritten as {}", ix); } } }
/** * Returns if this index can be useful to search the given field */ public boolean isUseful(Path field) { for (SortKey k : fields) { if (k.getField().equals(field)) { return true; } } return false; } }
private void ensureIdIndex(EntityInfo ei) { LOGGER.debug("ensureIdIndex: begin"); Indexes indexes = ei.getIndexes(); // We are looking for a unique index on _id boolean found = false; for (Index ix : indexes.getIndexes()) { List<SortKey> fields = ix.getFields(); if (fields.size() == 1 && fields.get(0).getField().equals(Translator.ID_PATH) && ix.isUnique()) { found = true; break; } } if (!found) { LOGGER.debug("Adding _id index"); Index idIndex = new Index(); idIndex.setUnique(true); List<SortKey> fields = new ArrayList<>(); fields.add(new SortKey(Translator.ID_PATH, false)); idIndex.setFields(fields); List<Index> ix = indexes.getIndexes(); ix.add(idIndex); indexes.setIndexes(ix); } else { LOGGER.debug("_id index exists"); } LOGGER.debug("ensureIdIndex: end"); }
public static SortKey fromJson(ObjectNode node) { if (node.size() != 1) { throw Error.get(QueryConstants.ERR_INVALID_SORT, node.toString()); } String fieldString = node.fieldNames().next(); String dir = node.get(fieldString).asText(); Path field = new Path(fieldString); boolean desc; switch (dir) { case "$asc": desc = false; break; case "$desc": desc = true; break; default: throw Error.get(QueryConstants.ERR_INVALID_SORT, node.toString()); } return new SortKey(field, desc); } }
/** * Returns a json representation of the sort expression */ @Override public JsonNode toJson() { ArrayNode arr = getFactory().arrayNode(); for (SortKey x : keys) { arr.add(x.toJson()); } return arr; }
public Set<Path> getUsefulness(Collection<Path> searchFields) { Set<Path> ret = new HashSet<>(); for (SortKey key : fields) { boolean found = false; for (Path searchField : searchFields) { if (key.getField().equals(searchField)) { found = true; break; } } if (found) { ret.add(key.getField()); } else { break; } } return ret; }
public static SortKey fromJson(ObjectNode node) { if (node.size() != 1) { throw Error.get(QueryConstants.ERR_INVALID_SORT, node.toString()); } String fieldString = node.fieldNames().next(); String dir = node.get(fieldString).asText(); Path field = new Path(fieldString); boolean desc; switch (dir) { case "$asc": desc = false; break; case "$desc": desc = true; break; default: throw Error.get(QueryConstants.ERR_INVALID_SORT, node.toString()); } return new SortKey(field, desc); } }
/** * Returns a json representation of the sort expression */ @Override public JsonNode toJson() { ArrayNode arr = getFactory().arrayNode(); for (SortKey x : keys) { arr.add(x.toJson()); } return arr; }
private boolean isIdIndex(Index index) { List<SortKey> fields = index.getFields(); return fields.size() == 1 && fields.get(0).getField().equals(Translator.ID_PATH); }
dir = "$asc"; SortKey sort = new SortKey(new Path(fld), "$desc".equals(dir)); f.add(sort);
/** * Parses a sort expression using the given json object */ public static Sort fromJson(JsonNode node) { if (node instanceof ArrayNode) { return CompositeSortKey.fromJson((ArrayNode) node); } else { return SortKey.fromJson((ObjectNode) node); } }
@Override public JsonNode toJson() { return getFactory().objectNode().put(field.toString(), desc ? "$desc" : "$asc"); }
private static boolean isRequired(Path field, SortKey sort, Path ctx) { Path absField = new Path(ctx, field); return sort.getField().matchingPrefix(absField); } }
/** * Parses a composite sort key using the json array node */ public static CompositeSortKey fromJson(ArrayNode node) { ArrayList<SortKey> l = new ArrayList<>(node.size()); for (Iterator<JsonNode> itr = node.elements(); itr.hasNext();) { l.add(SortKey.fromJson((ObjectNode) itr.next())); } return new CompositeSortKey(l); } }
private SortFieldInfo[] buildSortFields(Sort sort,FieldTreeNode context) { if(sort instanceof SortKey) { return new SortFieldInfo[] {getSortField(((SortKey)sort).getField(),context,((SortKey)sort).isDesc())}; } else { List<SortKey> keys=((CompositeSortKey)sort).getKeys(); SortFieldInfo[] arr=new SortFieldInfo[ keys.size() ]; int i=0; for(SortKey key:keys) { arr[i]=getSortField(key.getField(),context,key.isDesc()); } return arr; } }