/** * 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; } }
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; }
private boolean isIdIndex(Index index) { List<SortKey> fields = index.getFields(); return fields.size() == 1 && fields.get(0).getField().equals(Translator.ID_PATH); }
private boolean compareSortKeys(SortKey sortKey, String fieldName, Object dir) { if (sortKey.getField().toString().equals(fieldName)) { int direction = ((Number) dir).intValue(); return sortKey.isDesc() == (direction < 0); } return false; }
private DBObject translateSortKey(SortKey sort) { return new BasicDBObject(translatePath(sort.getField()), sort.isDesc() ? -1 : 1); }
private DBObject translateSortKey(SortKey sort) { return new BasicDBObject(translatePath(sort.getField()), sort.isDesc() ? -1 : 1); }
private static boolean isRequired(Path field, SortKey sort, Path ctx) { Path absField = new Path(ctx, field); return sort.getField().matchingPrefix(absField); } }
private static boolean isRequired(Path field, SortKey sort, Path ctx) { Path absField = new Path(ctx, field); return sort.getField().matchingPrefix(absField); } }
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; } }
/** * Build sort field info starting from the given metadata context */ public static 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; } }
/** * Build sort field info starting from the given metadata context */ public static 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; } }
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"); }
private DBObject translateCompositeSortKey(CompositeSortKey sort) { DBObject ret = null; for (SortKey key : sort.getKeys()) { if (ret == null) { ret = translateSortKey(key); } else { ret.put(translatePath(key.getField()), key.isDesc() ? -1 : 1); } } return ret; }
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); } } }
private DBObject translateCompositeSortKey(CompositeSortKey sort) { DBObject ret = null; for (SortKey key : sort.getKeys()) { if (ret == null) { ret = translateSortKey(key); } else { ret.put(translatePath(key.getField()), key.isDesc() ? -1 : 1); } } return ret; }
DBObject newIndex = new BasicDBObject(); for (SortKey p : index.getFields()) { newIndex.put(p.getField().toString(), p.isDesc() ? -1 : 1);
for (SortKey p : i.getFields()) { T node2 = newNode(); putString(node2, "field", p.getField().toString()); putString(node2, "dir", p.isDesc() ? "$desc" : "$asc"); addObjectToArray(indexObj, node2);