/** * {@inheritDoc} */ public int getParamCount() { int total = 0; for (final OIndexDefinition indexDefinition : indexDefinitions) total += indexDefinition.getParamCount(); return total; }
private static boolean isComposite(OIndex<?> currentIndex) { return currentIndex.getDefinition().getParamCount() > 1; }
public int compare(OIndex<?> o1, OIndex<?> o2) { return o1.getDefinition().getParamCount() - o2.getDefinition().getParamCount(); } });
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; }
if (currentParamIndex + indexDefinition.getParamCount() > params.size()) endIndex = params.size(); else endIndex = currentParamIndex + indexDefinition.getParamCount(); currentParamIndex += indexDefinition.getParamCount();
public int compare(final OIndex<?> indexOne, final OIndex<?> indexTwo) { final OIndexDefinition definitionOne = indexOne.getDefinition(); final OIndexDefinition definitionTwo = indexTwo.getDefinition(); final int firstParamCount = definitionOne.getParamCount(); final int secondParamCount = definitionTwo.getParamCount(); final int result = firstParamCount - secondParamCount; if (result == 0 && !orderedFields.isEmpty()) { if (!(indexOne instanceof OChainedIndexProxy) && orderByOptimizer .canBeUsedByOrderBy(indexOne, OCommandExecutorSQLSelect.this.orderedFields)) { return 1; } if (!(indexTwo instanceof OChainedIndexProxy) && orderByOptimizer .canBeUsedByOrderBy(indexTwo, OCommandExecutorSQLSelect.this.orderedFields)) { return -1; } } return result; } }
final int paramCount = indexDefinition.getParamCount();
final int paramCount = indexDefinition.getParamCount();
return null; if (indexDefinition.getParamCount() == 1) { final Object[] betweenKeys = (Object[]) keyParams.get(0);
protected Object enhanceCompositeKey(Object key, PartialSearchMode partialSearchMode) { if (!(key instanceof OCompositeKey)) return key; final OCompositeKey compositeKey = (OCompositeKey) key; final int keySize = getDefinition().getParamCount(); if (!(keySize == 1 || compositeKey.getKeys().size() == keySize || partialSearchMode.equals(PartialSearchMode.NONE))) { final OCompositeKey fullKey = new OCompositeKey(compositeKey); int itemsToAdd = keySize - fullKey.getKeys().size(); final Comparable<?> keyItem; if (partialSearchMode.equals(PartialSearchMode.HIGHEST_BOUNDARY)) keyItem = ALWAYS_GREATER_KEY; else keyItem = ALWAYS_LESS_KEY; for (int i = 0; i < itemsToAdd; i++) fullKey.addKey(keyItem); return fullKey; } return key; }
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)); } }
if (indexDefinition.getParamCount() == 1) { final Object key; if (indexDefinition instanceof OIndexDefinitionMultiValue)
return null; if (indexDefinition.getParamCount() == 1) { final Object key; if (indexDefinition instanceof OIndexDefinitionMultiValue)
return null; if (indexDefinition.getParamCount() == 1) { final Object key; if (indexDefinition instanceof OIndexDefinitionMultiValue)
return null; if (indexDefinition.getParamCount() == 1) { final Object key; if (indexDefinition instanceof OIndexDefinitionMultiValue)
protected void updateProfiler(final OCommandContext iContext, final OIndex<?> index, final List<Object> keyParams, final OIndexDefinition indexDefinition) { if (iContext.isRecordingMetrics()) iContext.updateMetric("compositeIndexUsed", +1); final OProfiler profiler = Orient.instance().getProfiler(); if (profiler.isRecording()) { profiler.updateCounter(profiler.getDatabaseMetric(index.getDatabaseName(), "query.indexUsed"), "Used index in query", +1); int params = indexDefinition.getParamCount(); if (params > 1) { final String profiler_prefix = profiler.getDatabaseMetric(index.getDatabaseName(), "query.compositeIndexUsed"); profiler.updateCounter(profiler_prefix, "Used composite index in query", +1); profiler.updateCounter(profiler_prefix + "." + params, "Used composite index in query with " + params + " params", +1); profiler.updateCounter(profiler_prefix + "." + params + '.' + keyParams.size(), "Used composite index in query with " + params + " params and " + keyParams.size() + " keys", +1); } } }
protected void revertProfiler(final OCommandContext iContext, final OIndex<?> index, final List<Object> keyParams, final OIndexDefinition indexDefinition) { if (iContext.isRecordingMetrics()) { iContext.updateMetric("compositeIndexUsed", -1); } final OProfiler profiler = Orient.instance().getProfiler(); if (profiler.isRecording()) { profiler.updateCounter(profiler.getDatabaseMetric(index.getDatabaseName(), "query.indexUsed"), "Used index in query", -1); int params = indexDefinition.getParamCount(); if (params > 1) { final String profiler_prefix = profiler.getDatabaseMetric(index.getDatabaseName(), "query.compositeIndexUsed"); profiler.updateCounter(profiler_prefix, "Used composite index in query", -1); profiler.updateCounter(profiler_prefix + "." + params, "Used composite index in query with " + params + " params", -1); profiler.updateCounter(profiler_prefix + "." + params + '.' + keyParams.size(), "Used composite index in query with " + params + " params and " + keyParams.size() + " keys", -1); } } }
@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; }
return null; if (indexDefinition.getParamCount() == 1) { final Object key; if (indexDefinition instanceof OIndexDefinitionMultiValue) cursor = index.iterateEntriesBetween(keyOne, true, keyTwo, true, ascSortOrder); } else { if (indexDefinition.getParamCount() == keyParams.size()) { final Object indexResult; indexResult = index.get(keyOne);
/** * Register statistic information about usage of index in {@link OProfilerStub}. * * @param index which usage is registering. */ private void updateStatistic(OIndex<?> index) { final OProfiler profiler = Orient.instance().getProfiler(); if (profiler.isRecording()) { Orient.instance().getProfiler() .updateCounter(profiler.getDatabaseMetric(index.getDatabaseName(), "query.indexUsed"), "Used index in query", +1); final int paramCount = index.getDefinition().getParamCount(); if (paramCount > 1) { final String profiler_prefix = profiler.getDatabaseMetric(index.getDatabaseName(), "query.compositeIndexUsed"); profiler.updateCounter(profiler_prefix, "Used composite index in query", +1); profiler .updateCounter(profiler_prefix + "." + paramCount, "Used composite index in query with " + paramCount + " params", +1); } } }