private Collection toIndexKey(OIndexDefinition definition, Object rightValue) { if (definition.getFields().size() == 1 && rightValue instanceof Collection) { rightValue = ((Collection) rightValue).iterator().next(); } if (rightValue instanceof List) { rightValue = definition.createValue((List<?>) rightValue); } else { rightValue = definition.createValue(rightValue); } if (!(rightValue instanceof Collection)) { rightValue = Collections.singleton(rightValue); } return (Collection) rightValue; }
private Collection toIndexKey(OIndexDefinition definition, Object rightValue) { if (definition.getFields().size() == 1 && rightValue instanceof Collection) { rightValue = ((Collection) rightValue).iterator().next(); } if (rightValue instanceof List) { rightValue = definition.createValue((List<?>) rightValue); } else if (!(rightValue instanceof OCompositeKey)) { rightValue = definition.createValue(rightValue); } if (!(rightValue instanceof Collection)) { rightValue = Collections.singleton(rightValue); } return (Collection) rightValue; }
/** * Make type conversion of keys for specific index. * * @param index - index for which keys prepared for. * @param keys - which should be prepared. * * @return keys converted to necessary type. */ private Set<Comparable> prepareKeys(OIndex<?> index, Object keys) { final OIndexDefinition indexDefinition = index.getDefinition(); if (keys instanceof Collection) { final Set<Comparable> newKeys = new TreeSet<Comparable>(); for (Object o : ((Collection) keys)) { newKeys.add((Comparable) indexDefinition.createValue(o)); } return newKeys; } else { return Collections.singleton((Comparable) indexDefinition.createValue(keys)); } }
private Object toBetweenIndexKey(OIndexDefinition definition, Object rightValue) { if (definition.getFields().size() == 1 && rightValue instanceof Collection) { rightValue = ((Collection) rightValue).iterator().next(); } rightValue = definition.createValue(rightValue); if (definition.getFields().size() > 1 && !(rightValue instanceof Collection)) { rightValue = Collections.singleton(rightValue); } return rightValue; }
private Object toBetweenIndexKey(OIndexDefinition definition, Object rightValue) { if (definition.getFields().size() == 1 && rightValue instanceof Collection) { if (((Collection) rightValue).size() > 0) { rightValue = ((Collection) rightValue).iterator().next(); } else { rightValue = null; } } rightValue = definition.createValue(rightValue); if (definition.getFields().size() > 1 && !(rightValue instanceof Collection)) { rightValue = Collections.singleton(rightValue); } return rightValue; }
private Object getIndexKey(final OIndexDefinition indexDefinition, Object value) { if (indexDefinition instanceof OCompositeIndexDefinition) { if (value instanceof List) { final List<?> values = (List<?>) value; List<Object> keyParams = new ArrayList<Object>(values.size()); for (Object o : values) { keyParams.add(OSQLHelper.getValue(o)); } return indexDefinition.createValue(keyParams); } else { value = OSQLHelper.getValue(value); if (value instanceof OCompositeKey) { return value; } else { return indexDefinition.createValue(value); } } } else { return OSQLHelper.getValue(value); } }
private static Object getIndexKey(final OIndexDefinition indexDefinition, Object value, OCommandContext context) { if (indexDefinition instanceof OCompositeIndexDefinition || indexDefinition.getParamCount() > 1) { if (value instanceof List) { final List<?> values = (List<?>) value; List<Object> keyParams = new ArrayList<Object>(values.size()); for (Object o : values) { keyParams.add(OSQLHelper.getValue(o, null, context)); } return indexDefinition.createValue(keyParams); } else { value = OSQLHelper.getValue(value); if (value instanceof OCompositeKey) { return value; } else { return indexDefinition.createValue(value); } } } else { if (indexDefinition instanceof OIndexDefinitionMultiValue) return ((OIndexDefinitionMultiValue) indexDefinition).createSingleValue(OSQLHelper.getValue(value)); else return indexDefinition.createValue(OSQLHelper.getValue(value, null, context)); } }
private OCompositeKey convertToCompositeKey(Object key) { final OCompositeKey compositeKey = new OCompositeKey(); int paramsIndex = 0; for (int i = 0; i < indexDefinitions.size(); i++) { final OIndexDefinition indexDefinition = indexDefinitions.get(i); if (i != multiValueIndex) { compositeKey.addKey(indexDefinition.createValue(params[paramsIndex])); paramsIndex++; } else compositeKey.addKey(((OIndexDefinitionMultiValue) indexDefinition).createSingleValue(key)); } return compositeKey; } }
@SuppressWarnings({ "rawtypes", "unchecked" }) private static boolean processSingleIndexDelete(final OIndex<?> index, final Set<String> dirtyFields, final ODocument iRecord) { final OIndexDefinition indexDefinition = index.getDefinition(); final List<String> indexFields = indexDefinition.getFields(); if (indexFields.isEmpty()) { return false; } final String indexField = indexFields.iterator().next(); if (dirtyFields.contains(indexField)) { final OMultiValueChangeTimeLine<?, ?> multiValueChangeTimeLine = iRecord.getCollectionTimeLine(indexField); final Object origValue; if (multiValueChangeTimeLine != null) { final OTrackedMultiValue fieldValue = iRecord.field(indexField); final Object restoredMultiValue = fieldValue.returnOriginalState(multiValueChangeTimeLine.getMultiValueChangeEvents()); origValue = indexDefinition.createValue(restoredMultiValue); } else origValue = indexDefinition.createValue(iRecord.getOriginalValue(indexField)); deleteIndexKey(index, iRecord, origValue); return true; } return false; }
@SuppressWarnings({ "rawtypes", "unchecked" }) private static boolean processSingleIndexDelete(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 false; } final String indexField = indexFields.iterator().next(); if (dirtyFields.contains(indexField)) { final OMultiValueChangeTimeLine<?, ?> multiValueChangeTimeLine = iRecord.getCollectionTimeLine(indexField); final Object origValue; if (multiValueChangeTimeLine != null) { final OTrackedMultiValue fieldValue = iRecord.field(indexField); final Object restoredMultiValue = fieldValue.returnOriginalState(multiValueChangeTimeLine.getMultiValueChangeEvents()); origValue = indexDefinition.createValue(restoredMultiValue); } else origValue = indexDefinition.createValue(iRecord.getOriginalValue(indexField)); deleteIndexKey(index, iRecord, origValue, changes); return true; } return false; }
currentParamIndex += indexDefinition.getParamCount(); final Object keyValue = indexDefinition.createValue(indexParams);
public OCompositeKey createSingleValue(final List<?> params) { final OCompositeKey compositeKey = new OCompositeKey(); int currentParamIndex = 0; for (final OIndexDefinition indexDefinition : indexDefinitions) { if (currentParamIndex + 1 > params.size()) break; final int endIndex; if (currentParamIndex + indexDefinition.getParamCount() > params.size()) endIndex = params.size(); else endIndex = currentParamIndex + indexDefinition.getParamCount(); final List<?> indexParams = params.subList(currentParamIndex, endIndex); currentParamIndex += indexDefinition.getParamCount(); final Object keyValue; if (indexDefinition instanceof OIndexDefinitionMultiValue) keyValue = ((OIndexDefinitionMultiValue) indexDefinition).createSingleValue(indexParams.toArray()); else keyValue = indexDefinition.createValue(indexParams); if (keyValue == null && isNullValuesIgnored()) return null; compositeKey.addKey(keyValue); } return compositeKey; }
private OEdge getExistingEdge(OVertex currentFrom, OVertex currentTo) { Object key = uniqueIndex.getDefinition().createValue(currentFrom.getIdentity(), currentTo.getIdentity()); Object result = uniqueIndex.get(key); if (result instanceof ORID) { result = ((ORID) result).getRecord(); } if (result instanceof OElement) { return ((OElement) result).asEdge().get(); } return null; }
private static void processSingleIndexUpdate(final OIndex<?> index, final Set<String> dirtyFields, final ODocument iRecord) { 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<Object, Integer>(); final Map<Object, Integer> keysToRemove = new HashMap<Object, Integer>(); for (OMultiValueChangeEvent<?, ?> changeEvent : multiValueChangeTimeLine.getMultiValueChangeEvents()) { indexDefinitionMultiValue.processChangeEvent(changeEvent, keysToAdd, keysToRemove); } for (final Object keyToRemove : keysToRemove.keySet()) index.remove(keyToRemove, iRecord); for (final Object keyToAdd : keysToAdd.keySet()) index.put(keyToAdd, iRecord.placeholder()); } else { final Object origValue = indexDefinition.createValue(iRecord.getOriginalValue(indexField)); final Object newValue = indexDefinition.getDocumentValueToIndex(iRecord); processIndexUpdateFieldAssignment(index, iRecord, origValue, newValue); } }
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); } }
vals[i] = doc.field(fields.get(i)); Object indexKey = index.getDefinition().createValue(vals); if (indexKey == null) { return;
key = ((OIndexDefinitionMultiValue) indexDefinition).createSingleValue(keyParams.get(0)); else key = indexDefinition.createValue(keyParams);
key = ((OIndexDefinitionMultiValue) indexDefinition).createSingleValue(keyParams.get(0)); else key = indexDefinition.createValue(keyParams);
@Override public OIndexCursor executeIndexQuery(OCommandContext iContext, OIndex<?> index, List<Object> keyParams, boolean ascSortOrder) { final OIndexDefinition indexDefinition = index.getDefinition(); if (indexDefinition.getParamCount() > 1) return null; final OIndex<?> internalIndex = index.getInternal(); OIndexCursor cursor; if (internalIndex instanceof OIndexFullText) { final Object key = indexDefinition.createValue(keyParams); final Object indexResult = index.get(key); if (indexResult == null || indexResult instanceof OIdentifiable) cursor = new OIndexCursorSingleValue((OIdentifiable) indexResult, key); else cursor = new OIndexCursorCollectionValue((Collection<OIdentifiable>) indexResult, key); } else return null; updateProfiler(iContext, internalIndex, keyParams, indexDefinition); return cursor; }
key = ((OIndexDefinitionMultiValue) indexDefinition).createSingleValue(keyParams.get(0)); else key = indexDefinition.createValue(keyParams);