public Set<String> getIndexedKeys(String className) { Iterator<OIndex<?>> indexes = getIndexManager().getClassIndexes(className).iterator(); HashSet<String> indexedKeys = new HashSet<>(); indexes.forEachRemaining(index -> { index.getDefinition().getFields().forEach(indexedKeys::add); }); return indexedKeys; }
@Override public void getClassIndexes(final Collection<OIndex<?>> indexes) { getDatabase().getMetadata().getIndexManager().getClassIndexes(name, indexes); }
@Override public Set<OIndex<?>> getClassIndexes() { return getDatabase().getMetadata().getIndexManager().getClassIndexes(name); }
public Set<OIndex<?>> getClassIndexes() { acquireSchemaReadLock(); try { final OIndexManager idxManager = getDatabase().getMetadata().getIndexManager(); if (idxManager == null) return new HashSet<OIndex<?>>(); return idxManager.getClassIndexes(name); } finally { releaseSchemaReadLock(); } }
private List<OIndex<?>> relatedIndexes(final String fieldName) { final List<OIndex<?>> result = new ArrayList<OIndex<?>>(); final ODatabaseDocument database = getDatabase(); for (final OIndex<?> oIndex : database.getMetadata().getIndexManager().getClassIndexes(className)) { if (OCollections.indexOf(oIndex.getDefinition().getFields(), fieldName, new OCaseInsentiveComparator()) > -1) { result.add(oIndex); } } return result; }
private List<OIndex<?>> relatedIndexes(final String fieldName, ODatabase database) { final List<OIndex<?>> result = new ArrayList<OIndex<?>>(); for (final OIndex<?> oIndex : database.getMetadata().getIndexManager().getClassIndexes(className.getStringValue())) { if (OCollections.indexOf(oIndex.getDefinition().getFields(), fieldName, new OCaseInsentiveComparator()) > -1) { result.add(oIndex); } } return result; }
@VisibleForTesting public Set<OrientIndexQuery> findIndex() { final Set<OrientIndexQuery> indexedQueries = new HashSet<>(); final OGraph graph = getGraph(); final OIndexManager indexManager = graph.getRawDatabase().getMetadata().getIndexManager(); // find indexed keys only for the element subclasses (if present) final Set<String> classLabels = findClassLabelsInHasContainers(); if (!classLabels.isEmpty()) { final Set<String> indexedKeys = new HashSet<>(); classLabels.forEach(label -> indexedKeys.addAll(graph.getIndexedKeys(this.returnClass, label))); this.hasContainers.stream().filter(c -> indexedKeys.contains(c.getKey()) && (c.getPredicate().getBiPredicate() == Compare.eq || c.getPredicate().getBiPredicate() == Contains.within)).findAny().ifPresent(requestedKeyValue -> { String key = requestedKeyValue.getKey(); classLabels.forEach(classLabel -> { Iterator<Object> values = getValueIterator(requestedKeyValue); String className = graph.labelToClassName(classLabel, isVertexStep() ? OClass.VERTEX_CLASS_NAME : OClass.EDGE_CLASS_NAME); Set<OIndex<?>> classIndexes = indexManager.getClassIndexes(className); Iterator<OIndex<?>> keyIndexes = classIndexes.stream().filter(idx -> idx.getDefinition().getFields().contains(key)) .iterator(); if (keyIndexes.hasNext()) { // TODO: select best index if there are multiple options indexedQueries.add(new OrientIndexQuery(keyIndexes.next(), values)); } else { OLogManager.instance().warn(this, "no index found for class=[" + className + "] and key=[" + key + "]"); } }); }); } return indexedQueries; }
private void dropClassIndexes(ODatabaseDocumentInternal database, final OClass cls) { final OIndexManager indexManager = database.getMetadata().getIndexManager(); for (final OIndex<?> index : indexManager.getClassIndexes(cls.getName())) indexManager.dropIndex(index.getName()); }
@Override public void getClassIndexes(final Collection<OIndex<?>> indexes) { acquireSchemaReadLock(); try { final OIndexManager idxManager = getDatabase().getMetadata().getIndexManager(); if (idxManager == null) return; idxManager.getClassIndexes(name, indexes); } finally { releaseSchemaReadLock(); } }
/** * Remove the index on property * * @deprecated Use {@link OIndexManager#dropIndex(String)} instead. */ @Deprecated public OPropertyImpl dropIndexes() { getDatabase().checkSecurity(ORule.ResourceGeneric.SCHEMA, ORole.PERMISSION_DELETE); acquireSchemaReadLock(); try { final OIndexManager indexManager = getDatabase().getMetadata().getIndexManager(); final ArrayList<OIndex<?>> relatedIndexes = new ArrayList<OIndex<?>>(); for (final OIndex<?> index : indexManager.getClassIndexes(owner.getName())) { final OIndexDefinition definition = index.getDefinition(); if (OCollections.indexOf(definition.getFields(), globalRef.getName(), new OCaseInsentiveComparator()) > -1) { if (definition instanceof OPropertyIndexDefinition) { relatedIndexes.add(index); } else { throw new IllegalArgumentException( "This operation applicable only for property indexes. " + index.getName() + " is " + index.getDefinition()); } } } for (final OIndex<?> index : relatedIndexes) getDatabase().getMetadata().getIndexManager().dropIndex(index.getName()); return this; } finally { releaseSchemaReadLock(); } }
final Set<OIndex<?>> classIndexes = metadata.getIndexManager().getClassIndexes(table);
@Override public ResultSet getPrimaryKeys(final String catalog, final String schema, final String table) throws SQLException { database.activateOnCurrentThread(); final Set<OIndex<?>> classIndexes = database.getMetadata().getIndexManager().getClassIndexes(table); final Set<OIndex<?>> uniqueIndexes = new HashSet<>(); for (OIndex<?> oIndex : classIndexes) { if (oIndex.getType().equals(INDEX_TYPE.UNIQUE.name())) uniqueIndexes.add(oIndex); } final OInternalResultSet resultSet = new OInternalResultSet(); for (OIndex<?> unique : uniqueIndexes) { int keyFiledSeq = 1; for (String keyFieldName : unique.getDefinition().getFields()) { final OResultInternal res = new OResultInternal(); res.setProperty("TABLE_CAT", catalog); res.setProperty("TABLE_SCHEM", catalog); res.setProperty("TABLE_NAME", table); res.setProperty("COLUMN_NAME", keyFieldName); res.setProperty("KEY_SEQ", keyFiledSeq); res.setProperty("PK_NAME", unique.getName()); keyFiledSeq++; resultSet.add(res); } } return new OrientJdbcResultSet(new OrientJdbcStatement(connection), resultSet, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY, ResultSet.HOLD_CURSORS_OVER_COMMIT); }