final List<String> indexFields = indexDefinition.getFields(); final String multiValueField = indexDefinition.getMultiValueField(); final Object origValue = indexDefinition.createValue(origValues); final Object newValue = indexDefinition.getDocumentValueToIndex(iRecord); if (!indexDefinition.isNullValuesIgnored() || origValue != null) addRemove(changes, index, origValue, iRecord); if (!indexDefinition.isNullValuesIgnored() || newValue != null) addPut(changes, index, newValue, iRecord.getIdentity()); } else { if (multiValueChangeTimeLine == null) { if (dirtyFields.contains(multiValueField)) origValues.add(indexDefinition.getMultiValueDefinitionIndex(), iRecord.getOriginalValue(multiValueField)); else origValues.add(indexDefinition.getMultiValueDefinitionIndex(), iRecord.field(multiValueField)); final Object origValue = indexDefinition.createValue(origValues); final Object newValue = indexDefinition.getDocumentValueToIndex(iRecord); if (dirtyFields.size() == 1 && indexDefinition.isNullValuesIgnored()) { final Map<OCompositeKey, Integer> keysToAdd = new HashMap<>(); final Map<OCompositeKey, Integer> keysToRemove = new HashMap<>(); indexDefinition.processChangeEvent(changeEvent, keysToAdd, keysToRemove, origValues.toArray()); origValues.add(indexDefinition.getMultiValueDefinitionIndex(), restoredMultiValue);
private static OIndexDefinition createMultipleFieldIndexDefinition(final OClass oClass, final List<String> fieldsToIndex, final List<OType> types, List<OCollate> collates, String indexKind, String algorithm) { final OIndexFactory factory = OIndexes.getFactory(indexKind, algorithm); final String className = oClass.getName(); final OCompositeIndexDefinition compositeIndex = new OCompositeIndexDefinition(className); for (int i = 0, fieldsToIndexSize = fieldsToIndex.size(); i < fieldsToIndexSize; i++) { OCollate collate = null; if (collates != null) collate = collates.get(i); compositeIndex .addIndex(createSingleFieldIndexDefinition(oClass, fieldsToIndex.get(i), types.get(i), collate, indexKind, algorithm)); } return compositeIndex; }
/** * {@inheritDoc} */ public Object getDocumentValueToIndex(final ODocument iDocument) { final List<OCompositeKey> compositeKeys = new ArrayList<OCompositeKey>(10); final OCompositeKey firstKey = new OCompositeKey(); boolean containsCollection = false; compositeKeys.add(firstKey); for (final OIndexDefinition indexDefinition : indexDefinitions) { final Object result = indexDefinition.getDocumentValueToIndex(iDocument); if (result == null && isNullValuesIgnored()) return null; //for empty collections we add null key in index if (result instanceof Collection && ((Collection) result).isEmpty() && isNullValuesIgnored()) return null; containsCollection = addKey(firstKey, compositeKeys, containsCollection, result); } if (!containsCollection) return firstKey; return compositeKeys; }
final OCompositeIndexDefinition indexDefinition = (OCompositeIndexDefinition) index.getDefinition(); final String multiValueField = indexDefinition.getMultiValueField(); final List<String> indexFields = indexDefinition.getFields(); for (final String indexField : indexFields) { @SuppressWarnings("unchecked") final Object restoredMultiValue = fieldValue.returnOriginalState(multiValueChangeTimeLine.getMultiValueChangeEvents()); origValues.add(indexDefinition.getMultiValueDefinitionIndex(), restoredMultiValue); } else if (dirtyFields.contains(multiValueField)) origValues.add(indexDefinition.getMultiValueDefinitionIndex(), iRecord.getOriginalValue(multiValueField)); else origValues.add(indexDefinition.getMultiValueDefinitionIndex(), iRecord.field(multiValueField)); final Object origValue = indexDefinition.createValue(origValues); deleteIndexKey(index, iRecord, origValue, changes); return true;
betweenKeyTwoParams.add(betweenKeyTwo); final Object keyOne = compositeIndexDefinition.createSingleValue(betweenKeyOneParams); final Object keyTwo = compositeIndexDefinition.createSingleValue(betweenKeyTwoParams);
if (!((compositeIndexDefinition.getMultiValueDefinition() instanceof OPropertyMapIndexDefinition) && ((OPropertyMapIndexDefinition) compositeIndexDefinition.getMultiValueDefinition()).getIndexBy() == OPropertyMapIndexDefinition.INDEX_BY.VALUE)) return null; final Object keyOne = compositeIndexDefinition.createSingleValue(keyParams); final Object keyTwo = compositeIndexDefinition.createSingleValue(keyParams);
/** * {@inheritDoc} */ public Object createValue(final Object... params) { if (params.length == 1 && params[0] instanceof Collection) return params[0]; return createValue(Arrays.asList(params)); }
private static boolean processCompositeIndexDelete(final OIndex<?> index, final Set<String> dirtyFields, final ODocument iRecord) { final OCompositeIndexDefinition indexDefinition = (OCompositeIndexDefinition) index.getDefinition(); final String multiValueField = indexDefinition.getMultiValueField(); final List<String> indexFields = indexDefinition.getFields(); for (final String indexField : indexFields) { final OTrackedMultiValue fieldValue = iRecord.field(multiValueField); final Object restoredMultiValue = fieldValue.returnOriginalState(multiValueChangeTimeLine.getMultiValueChangeEvents()); origValues.add(indexDefinition.getMultiValueDefinitionIndex(), restoredMultiValue); } else if (dirtyFields.contains(multiValueField)) origValues.add(indexDefinition.getMultiValueDefinitionIndex(), iRecord.getOriginalValue(multiValueField)); else origValues.add(indexDefinition.getMultiValueDefinitionIndex(), iRecord.field(multiValueField)); final Object origValue = indexDefinition.createValue(origValues); deleteIndexKey(index, iRecord, origValue);
final Object keyOne = compositeIndexDefinition.createSingleValue(keyParams.subList(0, keyParams.size() - 1)); final Object keyTwo = compositeIndexDefinition.createSingleValue(keyParams);
if (!((compositeIndexDefinition.getMultiValueDefinition() instanceof OPropertyMapIndexDefinition) && ((OPropertyMapIndexDefinition) compositeIndexDefinition .getMultiValueDefinition()).getIndexBy() == OPropertyMapIndexDefinition.INDEX_BY.KEY)) return null; final Object keyOne = compositeIndexDefinition.createSingleValue(keyParams); final Object keyTwo = compositeIndexDefinition.createSingleValue(keyParams); cursor = index.iterateEntriesBetween(keyOne, true, keyTwo, true, ascSortOrder); } else {
private static void processCompositeIndexUpdate(final OIndex<?> index, final Set<String> dirtyFields, final ODocument iRecord) { final OCompositeIndexDefinition indexDefinition = (OCompositeIndexDefinition) index.getDefinition(); final List<String> indexFields = indexDefinition.getFields(); final String multiValueField = indexDefinition.getMultiValueField(); final Object origValue = indexDefinition.createValue(origValues); final Object newValue = indexDefinition.getDocumentValueToIndex(iRecord); if (multiValueChangeTimeLine == null) { if (dirtyFields.contains(multiValueField)) origValues.add(indexDefinition.getMultiValueDefinitionIndex(), iRecord.getOriginalValue(multiValueField)); else origValues.add(indexDefinition.getMultiValueDefinitionIndex(), iRecord.field(multiValueField)); final Object origValue = indexDefinition.createValue(origValues); final Object newValue = indexDefinition.getDocumentValueToIndex(iRecord); indexDefinition.processChangeEvent(changeEvent, keysToAdd, keysToRemove, origValues.toArray()); .returnOriginalState(multiValueChangeTimeLine.getMultiValueChangeEvents()); origValues.add(indexDefinition.getMultiValueDefinitionIndex(), restoredMultiValue); final Object origValue = indexDefinition.createValue(origValues); final Object newValue = indexDefinition.getDocumentValueToIndex(iRecord);
final Object keyOne = compositeIndexDefinition.createSingleValue(keyParams); final Object keyTwo = compositeIndexDefinition.createSingleValue(keyParams.subList(0, keyParams.size() - 1));
if (keyValue == null && isNullValuesIgnored()) return null; if (keyValue instanceof Collection && ((Collection) keyValue).isEmpty() && isNullValuesIgnored()) return null; containsCollection = addKey(firstKey, compositeKeys, containsCollection, keyValue);
final Object keyOne = compositeIndexDefinition.createSingleValue(keyParams); final Object keyTwo = compositeIndexDefinition.createSingleValue(keyParams.subList(0, keyParams.size() - 1));
final Object keyOne = compositeIndexDefinition.createSingleValue(keyParams.subList(0, keyParams.size() - 1)); final Object keyTwo = compositeIndexDefinition.createSingleValue(keyParams);
fullKey.addAll(partialKey); fullKey.add(keyValue); final Object key = compositeIndexDefinition.createSingleValue(fullKey); if (key == null) { containsNotCompatibleKey = true;
final Object keyOne = compositeIndexDefinition.createSingleValue(keyParams); final Object keyTwo = compositeIndexDefinition.createSingleValue(keyParams);
final Object keyOne = compositeIndexDefinition.createSingleValue(keyParams); final Object keyTwo = compositeIndexDefinition.createSingleValue(keyParams);
final Object keyOne = compositeIndexDefinition.createSingleValue(keyParams); final Object keyTwo = compositeIndexDefinition.createSingleValue(keyParams); if (internalIndex.hasRangeQuerySupport()) { cursor = index.iterateEntriesBetween(keyOne, true, keyTwo, true, ascSortOrder);