private static void addIndexEntry(ODocument document, OIdentifiable rid, OIndex<?> index, List<IndexChange> changes) { final OIndexDefinition indexDefinition = index.getDefinition(); final Object key = indexDefinition.getDocumentValueToIndex(document); if (key instanceof Collection) { for (final Object keyItem : (Collection<?>) key) if (!indexDefinition.isNullValuesIgnored() || keyItem != null) addPut(changes, index, keyItem, rid); } else if (!indexDefinition.isNullValuesIgnored() || key != null) addPut(changes, index, key, rid); }
private static void processIndexUpdateFieldAssignment(OIndex<?> index, ODocument iRecord, final Object origValue, final Object newValue, List<IndexChange> changes) { final OIndexDefinition indexDefinition = index.getDefinition(); if ((origValue instanceof Collection) && (newValue instanceof Collection)) { final Set<Object> valuesToRemove = new HashSet<>((Collection<?>) origValue); final Set<Object> valuesToAdd = new HashSet<>((Collection<?>) newValue); valuesToRemove.removeAll((Collection<?>) newValue); valuesToAdd.removeAll((Collection<?>) origValue); for (final Object valueToRemove : valuesToRemove) { if (!indexDefinition.isNullValuesIgnored() || valueToRemove != null) { addRemove(changes, index, valueToRemove, iRecord); } } for (final Object valueToAdd : valuesToAdd) { if (!indexDefinition.isNullValuesIgnored() || valueToAdd != null) { addPut(changes, index, valueToAdd, iRecord); } } } else { deleteIndexKey(index, iRecord, origValue, changes); if (newValue instanceof Collection) { for (final Object newValueItem : (Collection<?>) newValue) { addPut(changes, index, newValueItem, iRecord.getIdentity()); } } else if (!indexDefinition.isNullValuesIgnored() || newValue != null) { addPut(changes, index, newValue, iRecord.getIdentity()); } } }
private static void processSingleIndexUpdate(final OIndex<?> index, final Set<String> dirtyFields, final ODocument iRecord, List<IndexChange> changes) { final OIndexDefinition indexDefinition = index.getDefinition(); final List<String> indexFields = indexDefinition.getFields(); if (indexFields.isEmpty()) return; final String indexField = indexFields.get(0); if (!dirtyFields.contains(indexField)) return; final OMultiValueChangeTimeLine<?, ?> multiValueChangeTimeLine = iRecord.getCollectionTimeLine(indexField); if (multiValueChangeTimeLine != null) { final OIndexDefinitionMultiValue indexDefinitionMultiValue = (OIndexDefinitionMultiValue) indexDefinition; final Map<Object, Integer> keysToAdd = new HashMap<>(); final Map<Object, Integer> keysToRemove = new HashMap<>(); for (OMultiValueChangeEvent<?, ?> changeEvent : multiValueChangeTimeLine.getMultiValueChangeEvents()) { indexDefinitionMultiValue.processChangeEvent(changeEvent, keysToAdd, keysToRemove); } for (final Object keyToRemove : keysToRemove.keySet()) addRemove(changes, index, keyToRemove, iRecord); for (final Object keyToAdd : keysToAdd.keySet()) addPut(changes, index, keyToAdd, iRecord.getIdentity()); } else { final Object origValue = indexDefinition.createValue(iRecord.getOriginalValue(indexField)); final Object newValue = indexDefinition.getDocumentValueToIndex(iRecord); processIndexUpdateFieldAssignment(index, iRecord, origValue, newValue, changes); } }
addPut(changes, index, newValue, iRecord.getIdentity()); } else { final OMultiValueChangeTimeLine<?, ?> multiValueChangeTimeLine = iRecord.getCollectionTimeLine(multiValueField); addPut(changes, index, keyToAdd, iRecord.getIdentity()); } else { final OTrackedMultiValue fieldValue = iRecord.field(multiValueField);