From aff3177aede9e050e57588c06d754a760c271527 Mon Sep 17 00:00:00 2001 From: Tglman Date: Wed, 20 Dec 2023 12:43:09 +0100 Subject: [PATCH] refactor: simplified index logic --- .../orient/core/index/OIndex.java | 6 -- .../orient/core/index/OIndexInternal.java | 6 ++ .../orient/core/index/OIndexRemote.java | 5 - .../orient/core/index/OIndexUnique.java | 32 +----- .../index/engine/IndexEngineValidator.java | 29 ++++++ .../engine/IndexEngineValuesTransformer.java | 8 ++ .../core/index/engine/OBaseIndexEngine.java | 48 ++------- .../core/index/engine/OIndexEngine.java | 23 ++--- .../index/engine/OSingleValueIndexEngine.java | 5 +- .../core/index/engine/OV1IndexEngine.java | 3 + .../engine/UniqueIndexEngineValidator.java | 46 +++++++++ .../v1/OCellBTreeMultiValueIndexEngine.java | 52 ++++++++-- .../v1/OCellBTreeSingleValueIndexEngine.java | 49 ++++++++-- .../multivalue/MultiValuesTransformer.java | 4 +- ...OAutoShardingClusterSelectionStrategy.java | 5 +- .../auto/OAutoShardingIndexEngine.java | 62 +++++++----- .../impl/local/OAbstractPaginatedStorage.java | 98 +++++++------------ .../index/engine/OHashTableIndexEngine.java | 61 +++++++----- .../index/engine/ORemoteIndexEngine.java | 37 +++---- .../index/engine/OSBTreeIndexEngine.java | 66 ++++++++----- .../index/hashindex/local/OHashTable.java | 6 +- .../hashindex/local/v2/LocalHashTableV2.java | 13 ++- .../hashindex/local/v3/OLocalHashTableV3.java | 13 ++- .../storage/index/sbtree/local/OSBTree.java | 6 +- .../index/sbtree/local/v1/OSBTreeV1.java | 12 +-- .../index/sbtree/local/v2/OSBTreeV2.java | 12 +-- .../multivalue/v2/CellBTreeMultiValueV2.java | 19 +--- .../v2/IndexEngineValidatorIncrement.java | 24 +++++ .../v2/IndexEngineValidatorNullIncrement.java | 21 ++++ .../singlevalue/OCellBTreeSingleValue.java | 7 +- .../v1/CellBTreeSingleValueV1.java | 10 +- .../v3/CellBTreeSingleValueV3.java | 10 +- .../engine/OLuceneFullTextIndexEngine.java | 19 +++- .../engine/OLuceneIndexEngineAbstract.java | 19 ++-- .../engine/OLuceneGeoSpatialIndexEngine.java | 6 +- .../OLuceneLegacySpatialIndexEngine.java | 6 +- .../OLuceneSpatialIndexEngineAbstract.java | 15 ++- .../OLuceneSpatialIndexEngineDelegator.java | 51 +++++----- .../lucene/test/LuceneCreateJavaApiTest.java | 4 +- 39 files changed, 535 insertions(+), 383 deletions(-) create mode 100644 core/src/main/java/com/orientechnologies/orient/core/index/engine/IndexEngineValidator.java create mode 100644 core/src/main/java/com/orientechnologies/orient/core/index/engine/IndexEngineValuesTransformer.java create mode 100644 core/src/main/java/com/orientechnologies/orient/core/index/engine/UniqueIndexEngineValidator.java create mode 100644 core/src/main/java/com/orientechnologies/orient/core/storage/index/sbtree/multivalue/v2/IndexEngineValidatorIncrement.java create mode 100644 core/src/main/java/com/orientechnologies/orient/core/storage/index/sbtree/multivalue/v2/IndexEngineValidatorNullIncrement.java diff --git a/core/src/main/java/com/orientechnologies/orient/core/index/OIndex.java b/core/src/main/java/com/orientechnologies/orient/core/index/OIndex.java index 7cc2073d827..6757a5615c1 100644 --- a/core/src/main/java/com/orientechnologies/orient/core/index/OIndex.java +++ b/core/src/main/java/com/orientechnologies/orient/core/index/OIndex.java @@ -33,10 +33,6 @@ * @author Luca Garulli (l.garulli--(at)--orientdb.com) */ public interface OIndex extends Comparable { - String MERGE_KEYS = "mergeKeys"; - - OIndex create(OIndexMetadata metadata, boolean rebuild, OProgressListener progressListener); - String getDatabaseName(); /** @@ -298,7 +294,5 @@ OIndexCursor iterateEntriesBetween( boolean supportsOrderedIterations(); - int getIndexId(); - boolean isUnique(); } diff --git a/core/src/main/java/com/orientechnologies/orient/core/index/OIndexInternal.java b/core/src/main/java/com/orientechnologies/orient/core/index/OIndexInternal.java index e2f86ee95d5..bdbfa471cb3 100755 --- a/core/src/main/java/com/orientechnologies/orient/core/index/OIndexInternal.java +++ b/core/src/main/java/com/orientechnologies/orient/core/index/OIndexInternal.java @@ -19,6 +19,7 @@ */ package com.orientechnologies.orient.core.index; +import com.orientechnologies.common.listener.OProgressListener; import com.orientechnologies.common.util.ORawPair; import com.orientechnologies.orient.core.db.ODatabaseDocumentInternal; import com.orientechnologies.orient.core.db.ODatabaseRecordThreadLocal; @@ -60,6 +61,7 @@ public interface OIndexInternal extends OIndex { String INDEX_DEFINITION_CLASS = "indexDefinitionClass"; String INDEX_VERSION = "indexVersion"; String METADATA = "metadata"; + String MERGE_KEYS = "mergeKeys"; Object getCollatingValue(final Object key); @@ -353,4 +355,8 @@ boolean doRemove(OAbstractPaginatedStorage storage, Object key) throws OInvalidIndexEngineIdException; Stream getRidsIgnoreTx(Object key); + + OIndex create(OIndexMetadata metadata, boolean rebuild, OProgressListener progressListener); + + int getIndexId(); } diff --git a/core/src/main/java/com/orientechnologies/orient/core/index/OIndexRemote.java b/core/src/main/java/com/orientechnologies/orient/core/index/OIndexRemote.java index 5490b3885e1..92dd6943c27 100755 --- a/core/src/main/java/com/orientechnologies/orient/core/index/OIndexRemote.java +++ b/core/src/main/java/com/orientechnologies/orient/core/index/OIndexRemote.java @@ -434,11 +434,6 @@ public OIdentifiable setValue(OIdentifiable value) { }; } - @Override - public int getIndexId() { - throw new UnsupportedOperationException("getIndexId"); - } - @Override public OIndexCursor cursor() { final OInternalResultSet copy = new OInternalResultSet(); // TODO a raw array instead...? diff --git a/core/src/main/java/com/orientechnologies/orient/core/index/OIndexUnique.java b/core/src/main/java/com/orientechnologies/orient/core/index/OIndexUnique.java index 1782ae6b835..0488a96bbb2 100755 --- a/core/src/main/java/com/orientechnologies/orient/core/index/OIndexUnique.java +++ b/core/src/main/java/com/orientechnologies/orient/core/index/OIndexUnique.java @@ -21,8 +21,8 @@ import com.orientechnologies.orient.core.exception.OInvalidIndexEngineIdException; import com.orientechnologies.orient.core.id.ORID; -import com.orientechnologies.orient.core.index.engine.OBaseIndexEngine; -import com.orientechnologies.orient.core.storage.ORecordDuplicatedException; +import com.orientechnologies.orient.core.index.engine.IndexEngineValidator; +import com.orientechnologies.orient.core.index.engine.UniqueIndexEngineValidator; import com.orientechnologies.orient.core.storage.OStorage; import com.orientechnologies.orient.core.storage.impl.local.OAbstractPaginatedStorage; import com.orientechnologies.orient.core.tx.OTransactionIndexChangesPerKey; @@ -34,32 +34,8 @@ */ public class OIndexUnique extends OIndexOneValue { - private final OBaseIndexEngine.Validator uniqueValidator = - (key, oldValue, newValue) -> { - if (oldValue != null) { - // CHECK IF THE ID IS THE SAME OF CURRENT: THIS IS THE UPDATE CASE - if (!oldValue.equals(newValue)) { - final Boolean mergeSameKey = - metadata != null ? (Boolean) metadata.field(OIndex.MERGE_KEYS) : Boolean.FALSE; - if (mergeSameKey == null || !mergeSameKey) { - throw new ORecordDuplicatedException( - String.format( - "Cannot index record %s: found duplicated key '%s' in index '%s' previously assigned to the record %s", - newValue.getIdentity(), key, getName(), oldValue.getIdentity()), - getName(), - oldValue.getIdentity(), - key); - } - } else { - return OBaseIndexEngine.Validator.IGNORE; - } - } - - if (!newValue.getIdentity().isPersistent()) { - newValue = newValue.getRecord().getIdentity(); - } - return newValue.getIdentity(); - }; + private final IndexEngineValidator uniqueValidator = + new UniqueIndexEngineValidator(this); public OIndexUnique(OIndexMetadata im, final OStorage storage) { super(im, storage); diff --git a/core/src/main/java/com/orientechnologies/orient/core/index/engine/IndexEngineValidator.java b/core/src/main/java/com/orientechnologies/orient/core/index/engine/IndexEngineValidator.java new file mode 100644 index 00000000000..d850c19fe9e --- /dev/null +++ b/core/src/main/java/com/orientechnologies/orient/core/index/engine/IndexEngineValidator.java @@ -0,0 +1,29 @@ +package com.orientechnologies.orient.core.index.engine; + +/** + * Put operation validator. + * + * @param the key type. + * @param the value type. + */ +public interface IndexEngineValidator { + + /** + * Indicates that a put request should be silently ignored by the store. + * + * @see #validate(Object, Object, Object) + */ + Object IGNORE = new Object(); + + /** + * Validates the put operation for the given key, the old value and the new value. May throw an + * exception to abort the current put operation with an error. + * + * @param key the put operation key. + * @param oldValue the old value or {@code null} if no value is currently stored. + * @param newValue the new value passed to validatedPut(Object, OIdentifiable, Validator). + * @return the new value to store, may differ from the passed one, or the special {@link #IGNORE} + * value to silently ignore the put operation request being processed. + */ + Object validate(K key, V oldValue, V newValue); +} diff --git a/core/src/main/java/com/orientechnologies/orient/core/index/engine/IndexEngineValuesTransformer.java b/core/src/main/java/com/orientechnologies/orient/core/index/engine/IndexEngineValuesTransformer.java new file mode 100644 index 00000000000..ac021c773a9 --- /dev/null +++ b/core/src/main/java/com/orientechnologies/orient/core/index/engine/IndexEngineValuesTransformer.java @@ -0,0 +1,8 @@ +package com.orientechnologies.orient.core.index.engine; + +import com.orientechnologies.orient.core.id.ORID; +import java.util.Collection; + +public interface IndexEngineValuesTransformer { + Collection transformFromValue(Object value); +} diff --git a/core/src/main/java/com/orientechnologies/orient/core/index/engine/OBaseIndexEngine.java b/core/src/main/java/com/orientechnologies/orient/core/index/engine/OBaseIndexEngine.java index acab19de47a..d8ea15b6b6a 100755 --- a/core/src/main/java/com/orientechnologies/orient/core/index/engine/OBaseIndexEngine.java +++ b/core/src/main/java/com/orientechnologies/orient/core/index/engine/OBaseIndexEngine.java @@ -9,7 +9,6 @@ import com.orientechnologies.orient.core.record.impl.ODocument; import com.orientechnologies.orient.core.storage.impl.local.paginated.atomicoperations.OAtomicOperation; import java.io.IOException; -import java.util.Collection; import java.util.Map; import java.util.stream.Stream; @@ -49,24 +48,27 @@ Stream> iterateEntriesBetween( Object rangeTo, boolean toInclusive, boolean ascSortOrder, - ValuesTransformer transformer); + IndexEngineValuesTransformer transformer); Stream> iterateEntriesMajor( - Object fromKey, boolean isInclusive, boolean ascSortOrder, ValuesTransformer transformer); + Object fromKey, + boolean isInclusive, + boolean ascSortOrder, + IndexEngineValuesTransformer transformer); Stream> iterateEntriesMinor( final Object toKey, final boolean isInclusive, boolean ascSortOrder, - ValuesTransformer transformer); + IndexEngineValuesTransformer transformer); - Stream> stream(ValuesTransformer valuesTransformer); + Stream> stream(IndexEngineValuesTransformer valuesTransformer); - Stream> descStream(ValuesTransformer valuesTransformer); + Stream> descStream(IndexEngineValuesTransformer valuesTransformer); Stream keyStream(); - long size(ValuesTransformer transformer); + long size(IndexEngineValuesTransformer transformer); boolean hasRangeQuerySupport(); @@ -98,36 +100,4 @@ Stream> iterateEntriesMinor( default boolean hasRidBagTreesSupport() { return false; } - - interface ValuesTransformer { - Collection transformFromValue(Object value); - } - - /** - * Put operation validator. - * - * @param the key type. - * @param the value type. - */ - interface Validator { - - /** - * Indicates that a put request should be silently ignored by the store. - * - * @see #validate(Object, Object, Object) - */ - Object IGNORE = new Object(); - - /** - * Validates the put operation for the given key, the old value and the new value. May throw an - * exception to abort the current put operation with an error. - * - * @param key the put operation key. - * @param oldValue the old value or {@code null} if no value is currently stored. - * @param newValue the new value passed to validatedPut(Object, OIdentifiable, Validator). - * @return the new value to store, may differ from the passed one, or the special {@link - * #IGNORE} value to silently ignore the put operation request being processed. - */ - Object validate(K key, V oldValue, V newValue); - } } diff --git a/core/src/main/java/com/orientechnologies/orient/core/index/engine/OIndexEngine.java b/core/src/main/java/com/orientechnologies/orient/core/index/engine/OIndexEngine.java index 71782d478e8..92524f7ec0e 100755 --- a/core/src/main/java/com/orientechnologies/orient/core/index/engine/OIndexEngine.java +++ b/core/src/main/java/com/orientechnologies/orient/core/index/engine/OIndexEngine.java @@ -20,14 +20,11 @@ package com.orientechnologies.orient.core.index.engine; -import com.orientechnologies.common.serialization.types.OBinarySerializer; -import com.orientechnologies.orient.core.encryption.OEncryption; +import com.orientechnologies.orient.core.config.IndexEngineData; import com.orientechnologies.orient.core.id.ORID; import com.orientechnologies.orient.core.index.OIndexKeyUpdater; -import com.orientechnologies.orient.core.metadata.schema.OType; import com.orientechnologies.orient.core.storage.impl.local.paginated.atomicoperations.OAtomicOperation; import java.io.IOException; -import java.util.Map; /** * @author Andrey Lomakin (a.lomakin-at-orientdb.com) @@ -54,10 +51,13 @@ void update(OAtomicOperation atomicOperation, Object key, OIndexKeyUpdater validator) + OAtomicOperation atomicOperation, + Object key, + ORID value, + IndexEngineValidator validator) throws IOException; @Override @@ -65,14 +65,5 @@ default int getEngineAPIVersion() { return VERSION; } - void load( - String indexName, - OBinarySerializer valueSerializer, - boolean isAutomatic, - OBinarySerializer keySerializer, - OType[] keyTypes, - boolean nullPointerSupport, - int keySize, - Map engineProperties, - OEncryption encryption); + void load(IndexEngineData data); } diff --git a/core/src/main/java/com/orientechnologies/orient/core/index/engine/OSingleValueIndexEngine.java b/core/src/main/java/com/orientechnologies/orient/core/index/engine/OSingleValueIndexEngine.java index 9655eb451cc..33c25c3aa1e 100755 --- a/core/src/main/java/com/orientechnologies/orient/core/index/engine/OSingleValueIndexEngine.java +++ b/core/src/main/java/com/orientechnologies/orient/core/index/engine/OSingleValueIndexEngine.java @@ -6,7 +6,10 @@ public interface OSingleValueIndexEngine extends OV1IndexEngine { boolean validatedPut( - OAtomicOperation atomicOperation, Object key, ORID value, Validator validator); + OAtomicOperation atomicOperation, + Object key, + ORID value, + IndexEngineValidator validator); boolean remove(OAtomicOperation atomicOperation, Object key) throws IOException; diff --git a/core/src/main/java/com/orientechnologies/orient/core/index/engine/OV1IndexEngine.java b/core/src/main/java/com/orientechnologies/orient/core/index/engine/OV1IndexEngine.java index 1f80c193755..eb9ccb598a8 100755 --- a/core/src/main/java/com/orientechnologies/orient/core/index/engine/OV1IndexEngine.java +++ b/core/src/main/java/com/orientechnologies/orient/core/index/engine/OV1IndexEngine.java @@ -1,6 +1,7 @@ package com.orientechnologies.orient.core.index.engine; import com.orientechnologies.common.serialization.types.OBinarySerializer; +import com.orientechnologies.orient.core.config.IndexEngineData; import com.orientechnologies.orient.core.encryption.OEncryption; import com.orientechnologies.orient.core.id.ORID; import com.orientechnologies.orient.core.metadata.schema.OType; @@ -19,6 +20,8 @@ default int getEngineAPIVersion() { return API_VERSION; } + void load(IndexEngineData data); + void load( final String name, final int keySize, diff --git a/core/src/main/java/com/orientechnologies/orient/core/index/engine/UniqueIndexEngineValidator.java b/core/src/main/java/com/orientechnologies/orient/core/index/engine/UniqueIndexEngineValidator.java new file mode 100644 index 00000000000..b0c2dc3bb85 --- /dev/null +++ b/core/src/main/java/com/orientechnologies/orient/core/index/engine/UniqueIndexEngineValidator.java @@ -0,0 +1,46 @@ +package com.orientechnologies.orient.core.index.engine; + +import com.orientechnologies.orient.core.id.ORID; +import com.orientechnologies.orient.core.index.OIndexInternal; +import com.orientechnologies.orient.core.index.OIndexUnique; +import com.orientechnologies.orient.core.record.impl.ODocument; +import com.orientechnologies.orient.core.storage.ORecordDuplicatedException; + +public class UniqueIndexEngineValidator implements IndexEngineValidator { + + /** */ + private final OIndexUnique indexUnique; + + /** @param oIndexUnique */ + public UniqueIndexEngineValidator(OIndexUnique oIndexUnique) { + indexUnique = oIndexUnique; + } + + @Override + public Object validate(Object key, ORID oldValue, ORID newValue) { + if (oldValue != null) { + ODocument metadata = indexUnique.getMetadata(); + // CHECK IF THE ID IS THE SAME OF CURRENT: THIS IS THE UPDATE CASE + if (!oldValue.equals(newValue)) { + final Boolean mergeSameKey = + metadata != null ? (Boolean) metadata.field(OIndexInternal.MERGE_KEYS) : Boolean.FALSE; + if (mergeSameKey == null || !mergeSameKey) { + throw new ORecordDuplicatedException( + String.format( + "Cannot index record %s: found duplicated key '%s' in index '%s' previously assigned to the record %s", + newValue.getIdentity(), key, indexUnique.getName(), oldValue.getIdentity()), + indexUnique.getName(), + oldValue.getIdentity(), + key); + } + } else { + return IndexEngineValidator.IGNORE; + } + } + + if (!newValue.getIdentity().isPersistent()) { + newValue = newValue.getRecord().getIdentity(); + } + return newValue.getIdentity(); + } +} diff --git a/core/src/main/java/com/orientechnologies/orient/core/index/engine/v1/OCellBTreeMultiValueIndexEngine.java b/core/src/main/java/com/orientechnologies/orient/core/index/engine/v1/OCellBTreeMultiValueIndexEngine.java index 3791c4f21aa..4ea491d4a93 100755 --- a/core/src/main/java/com/orientechnologies/orient/core/index/engine/v1/OCellBTreeMultiValueIndexEngine.java +++ b/core/src/main/java/com/orientechnologies/orient/core/index/engine/v1/OCellBTreeMultiValueIndexEngine.java @@ -3,6 +3,8 @@ import com.orientechnologies.common.exception.OException; import com.orientechnologies.common.serialization.types.OBinarySerializer; import com.orientechnologies.common.util.ORawPair; +import com.orientechnologies.orient.core.config.IndexEngineData; +import com.orientechnologies.orient.core.db.record.OCurrentStorageComponentsFactory; import com.orientechnologies.orient.core.db.record.OIdentifiable; import com.orientechnologies.orient.core.encryption.OEncryption; import com.orientechnologies.orient.core.exception.OStorageException; @@ -11,6 +13,7 @@ import com.orientechnologies.orient.core.index.OCompositeKey; import com.orientechnologies.orient.core.index.OIndexDefinition; import com.orientechnologies.orient.core.index.OIndexException; +import com.orientechnologies.orient.core.index.engine.IndexEngineValuesTransformer; import com.orientechnologies.orient.core.index.engine.OMultiValueIndexEngine; import com.orientechnologies.orient.core.metadata.schema.OType; import com.orientechnologies.orient.core.record.impl.ODocument; @@ -44,11 +47,13 @@ public final class OCellBTreeMultiValueIndexEngine private final String name; private final int id; private final String nullTreeName; + private OAbstractPaginatedStorage storage; public OCellBTreeMultiValueIndexEngine( int id, String name, OAbstractPaginatedStorage storage, final int version) { this.id = id; this.name = name; + this.storage = storage; nullTreeName = name + "$null"; if (version == 1) { @@ -225,6 +230,33 @@ private void doClearSVTree(final OAtomicOperation atomicOperation) { } } + @Override + public void load(IndexEngineData data) { + OCurrentStorageComponentsFactory cf = storage.getComponentsFactory(); + final OEncryption encryption = + OAbstractPaginatedStorage.loadEncryption(data.getEncryption(), data.getEncryptionOptions()); + + String name = data.getName(); + int keySize = data.getKeySize(); + OType[] keyTypes = data.getKeyTypes(); + OBinarySerializer keySerializer = + cf.binarySerializerFactory.getObjectSerializer(data.getKeySerializedId()); + + if (mvTree != null) { + //noinspection unchecked + mvTree.load(name, keySize, keyTypes, keySerializer, encryption); + } else { + assert svTree != null; + assert nullTree != null; + + final OType[] sbTypes = calculateTypes(keyTypes); + + svTree.load(name, keySize + 1, sbTypes, new CompositeKeySerializer(), null); + nullTree.load( + nullTreeName, 1, new OType[] {OType.LINK}, OCompactedLinkSerializer.INSTANCE, null); + } + } + @Override public void load( final String name, @@ -342,7 +374,7 @@ public Stream get(Object key) { } @Override - public Stream> stream(ValuesTransformer valuesTransformer) { + public Stream> stream(IndexEngineValuesTransformer valuesTransformer) { if (mvTree != null) { final Object firstKey = mvTree.firstKey(); if (firstKey == null) { @@ -372,7 +404,7 @@ private static Stream> emptyStream() { } @Override - public Stream> descStream(ValuesTransformer valuesTransformer) { + public Stream> descStream(IndexEngineValuesTransformer valuesTransformer) { if (mvTree != null) { final Object lastKey = mvTree.lastKey(); if (lastKey == null) { @@ -442,7 +474,7 @@ public Stream> iterateEntriesBetween( Object rangeTo, boolean toInclusive, boolean ascSortOrder, - ValuesTransformer transformer) { + IndexEngineValuesTransformer transformer) { if (mvTree != null) { return mvTree.iterateEntriesBetween( rangeFrom, fromInclusive, rangeTo, toInclusive, ascSortOrder); @@ -480,7 +512,10 @@ private static OCompositeKey convertToCompositeKey(Object rangeFrom) { @Override public Stream> iterateEntriesMajor( - Object fromKey, boolean isInclusive, boolean ascSortOrder, ValuesTransformer transformer) { + Object fromKey, + boolean isInclusive, + boolean ascSortOrder, + IndexEngineValuesTransformer transformer) { if (mvTree != null) { return mvTree.iterateEntriesMajor(fromKey, isInclusive, ascSortOrder); } @@ -492,7 +527,10 @@ public Stream> iterateEntriesMajor( @Override public Stream> iterateEntriesMinor( - Object toKey, boolean isInclusive, boolean ascSortOrder, ValuesTransformer transformer) { + Object toKey, + boolean isInclusive, + boolean ascSortOrder, + IndexEngineValuesTransformer transformer) { if (mvTree != null) { return mvTree.iterateEntriesMinor(toKey, isInclusive, ascSortOrder); } @@ -503,7 +541,7 @@ public Stream> iterateEntriesMinor( } @Override - public long size(final ValuesTransformer transformer) { + public long size(final IndexEngineValuesTransformer transformer) { if (mvTree != null) { return mvTreeSize(transformer); } @@ -514,7 +552,7 @@ public long size(final ValuesTransformer transformer) { return svTreeEntries(); } - private long mvTreeSize(final ValuesTransformer transformer) { + private long mvTreeSize(final IndexEngineValuesTransformer transformer) { assert mvTree != null; // calculate amount of keys diff --git a/core/src/main/java/com/orientechnologies/orient/core/index/engine/v1/OCellBTreeSingleValueIndexEngine.java b/core/src/main/java/com/orientechnologies/orient/core/index/engine/v1/OCellBTreeSingleValueIndexEngine.java index b4bfe6ff1f4..5b9bb97fcce 100755 --- a/core/src/main/java/com/orientechnologies/orient/core/index/engine/v1/OCellBTreeSingleValueIndexEngine.java +++ b/core/src/main/java/com/orientechnologies/orient/core/index/engine/v1/OCellBTreeSingleValueIndexEngine.java @@ -3,10 +3,14 @@ import com.orientechnologies.common.exception.OException; import com.orientechnologies.common.serialization.types.OBinarySerializer; import com.orientechnologies.common.util.ORawPair; +import com.orientechnologies.orient.core.config.IndexEngineData; +import com.orientechnologies.orient.core.db.record.OCurrentStorageComponentsFactory; import com.orientechnologies.orient.core.encryption.OEncryption; import com.orientechnologies.orient.core.id.ORID; import com.orientechnologies.orient.core.index.OIndexDefinition; import com.orientechnologies.orient.core.index.OIndexException; +import com.orientechnologies.orient.core.index.engine.IndexEngineValidator; +import com.orientechnologies.orient.core.index.engine.IndexEngineValuesTransformer; import com.orientechnologies.orient.core.index.engine.OSingleValueIndexEngine; import com.orientechnologies.orient.core.metadata.schema.OType; import com.orientechnologies.orient.core.record.impl.ODocument; @@ -30,11 +34,13 @@ public final class OCellBTreeSingleValueIndexEngine private final OVersionPositionMap versionPositionMap; private final String name; private final int id; + private OAbstractPaginatedStorage storage; public OCellBTreeSingleValueIndexEngine( int id, String name, OAbstractPaginatedStorage storage, int version) { this.name = name; this.id = id; + this.storage = storage; if (version < 3) { this.sbTree = @@ -119,6 +125,26 @@ private void doClearTree(OAtomicOperation atomicOperation) throws IOException { sbTree.remove(atomicOperation, null); } + @Override + public void load(IndexEngineData data) { + OCurrentStorageComponentsFactory cf = storage.getComponentsFactory(); + final OEncryption encryption = + OAbstractPaginatedStorage.loadEncryption(data.getEncryption(), data.getEncryptionOptions()); + + String name = data.getName(); + int keySize = data.getKeySize(); + OType[] keyTypes = data.getKeyTypes(); + OBinarySerializer keySerializer = + cf.binarySerializerFactory.getObjectSerializer(data.getKeySerializedId()); + sbTree.load(name, keySize, keyTypes, keySerializer, encryption); + try { + versionPositionMap.open(); + } catch (final IOException e) { + throw OException.wrapException( + new OIndexException("Error during VPM load of index " + name), e); + } + } + @Override public void load( String indexName, @@ -170,7 +196,7 @@ public Stream get(Object key) { } @Override - public Stream> stream(ValuesTransformer valuesTransformer) { + public Stream> stream(IndexEngineValuesTransformer valuesTransformer) { final Object firstKey = sbTree.firstKey(); if (firstKey == null) { return Stream.empty(); @@ -179,7 +205,7 @@ public Stream> stream(ValuesTransformer valuesTransformer } @Override - public Stream> descStream(ValuesTransformer valuesTransformer) { + public Stream> descStream(IndexEngineValuesTransformer valuesTransformer) { final Object lastKey = sbTree.lastKey(); if (lastKey == null) { return Stream.empty(); @@ -204,7 +230,10 @@ public void put(OAtomicOperation atomicOperation, Object key, ORID value) { @Override public boolean validatedPut( - OAtomicOperation atomicOperation, Object key, ORID value, Validator validator) { + OAtomicOperation atomicOperation, + Object key, + ORID value, + IndexEngineValidator validator) { try { return sbTree.validatedPut(atomicOperation, key, value, validator); } catch (IOException e) { @@ -220,25 +249,31 @@ public Stream> iterateEntriesBetween( Object rangeTo, boolean toInclusive, boolean ascSortOrder, - ValuesTransformer transformer) { + IndexEngineValuesTransformer transformer) { return sbTree.iterateEntriesBetween( rangeFrom, fromInclusive, rangeTo, toInclusive, ascSortOrder); } @Override public Stream> iterateEntriesMajor( - Object fromKey, boolean isInclusive, boolean ascSortOrder, ValuesTransformer transformer) { + Object fromKey, + boolean isInclusive, + boolean ascSortOrder, + IndexEngineValuesTransformer transformer) { return sbTree.iterateEntriesMajor(fromKey, isInclusive, ascSortOrder); } @Override public Stream> iterateEntriesMinor( - Object toKey, boolean isInclusive, boolean ascSortOrder, ValuesTransformer transformer) { + Object toKey, + boolean isInclusive, + boolean ascSortOrder, + IndexEngineValuesTransformer transformer) { return sbTree.iterateEntriesMinor(toKey, isInclusive, ascSortOrder); } @Override - public long size(final ValuesTransformer transformer) { + public long size(final IndexEngineValuesTransformer transformer) { return sbTree.size(); } diff --git a/core/src/main/java/com/orientechnologies/orient/core/index/multivalue/MultiValuesTransformer.java b/core/src/main/java/com/orientechnologies/orient/core/index/multivalue/MultiValuesTransformer.java index 6d648e92b2d..56bfc7ab837 100644 --- a/core/src/main/java/com/orientechnologies/orient/core/index/multivalue/MultiValuesTransformer.java +++ b/core/src/main/java/com/orientechnologies/orient/core/index/multivalue/MultiValuesTransformer.java @@ -1,10 +1,10 @@ package com.orientechnologies.orient.core.index.multivalue; import com.orientechnologies.orient.core.id.ORID; -import com.orientechnologies.orient.core.index.engine.OBaseIndexEngine; +import com.orientechnologies.orient.core.index.engine.IndexEngineValuesTransformer; import java.util.Collection; -public final class MultiValuesTransformer implements OBaseIndexEngine.ValuesTransformer { +public final class MultiValuesTransformer implements IndexEngineValuesTransformer { public static final MultiValuesTransformer INSTANCE = new MultiValuesTransformer(); @Override diff --git a/core/src/main/java/com/orientechnologies/orient/core/sharding/auto/OAutoShardingClusterSelectionStrategy.java b/core/src/main/java/com/orientechnologies/orient/core/sharding/auto/OAutoShardingClusterSelectionStrategy.java index 9788fc992ff..ca271bf82c3 100755 --- a/core/src/main/java/com/orientechnologies/orient/core/sharding/auto/OAutoShardingClusterSelectionStrategy.java +++ b/core/src/main/java/com/orientechnologies/orient/core/sharding/auto/OAutoShardingClusterSelectionStrategy.java @@ -20,6 +20,7 @@ import com.orientechnologies.orient.core.exception.OConfigurationException; import com.orientechnologies.orient.core.exception.OInvalidIndexEngineIdException; import com.orientechnologies.orient.core.index.OIndex; +import com.orientechnologies.orient.core.index.OIndexInternal; import com.orientechnologies.orient.core.index.engine.OIndexEngine; import com.orientechnologies.orient.core.metadata.schema.OClass; import com.orientechnologies.orient.core.metadata.schema.clusterselection.OClusterSelectionStrategy; @@ -63,7 +64,9 @@ public OAutoShardingClusterSelectionStrategy(final OClass clazz, final OIndex au try { indexEngine = - (OIndexEngine) ((OAbstractPaginatedStorage) stg).getIndexEngine(index.getIndexId()); + (OIndexEngine) + ((OAbstractPaginatedStorage) stg) + .getIndexEngine(((OIndexInternal) index).getIndexId()); } catch (OInvalidIndexEngineIdException e) { throw OException.wrapException( new OConfigurationException( diff --git a/core/src/main/java/com/orientechnologies/orient/core/sharding/auto/OAutoShardingIndexEngine.java b/core/src/main/java/com/orientechnologies/orient/core/sharding/auto/OAutoShardingIndexEngine.java index 2a41fc3bdbb..98d49320d99 100755 --- a/core/src/main/java/com/orientechnologies/orient/core/sharding/auto/OAutoShardingIndexEngine.java +++ b/core/src/main/java/com/orientechnologies/orient/core/sharding/auto/OAutoShardingIndexEngine.java @@ -24,6 +24,8 @@ import com.orientechnologies.common.serialization.types.OBinarySerializer; import com.orientechnologies.common.util.OCommonConst; import com.orientechnologies.common.util.ORawPair; +import com.orientechnologies.orient.core.config.IndexEngineData; +import com.orientechnologies.orient.core.db.record.OCurrentStorageComponentsFactory; import com.orientechnologies.orient.core.db.record.OIdentifiable; import com.orientechnologies.orient.core.encryption.OEncryption; import com.orientechnologies.orient.core.id.ORID; @@ -31,6 +33,8 @@ import com.orientechnologies.orient.core.index.OIndexException; import com.orientechnologies.orient.core.index.OIndexKeyUpdater; import com.orientechnologies.orient.core.index.OIndexUpdateAction; +import com.orientechnologies.orient.core.index.engine.IndexEngineValidator; +import com.orientechnologies.orient.core.index.engine.IndexEngineValuesTransformer; import com.orientechnologies.orient.core.index.engine.OIndexEngine; import com.orientechnologies.orient.core.iterator.OEmptyIterator; import com.orientechnologies.orient.core.metadata.schema.OType; @@ -154,16 +158,16 @@ public void create( } @Override - public void load( - final String indexName, - final OBinarySerializer valueSerializer, - final boolean isAutomatic, - final OBinarySerializer keySerializer, - final OType[] keyTypes, - final boolean nullPointerSupport, - final int keySize, - final Map engineProperties, - OEncryption encryption) { + public void load(IndexEngineData data) { + OCurrentStorageComponentsFactory cf = this.storage.getComponentsFactory(); + OBinarySerializer keySerializer = + cf.binarySerializerFactory.getObjectSerializer(data.getValueSerializerId()); + OBinarySerializer valueSerializer = + cf.binarySerializerFactory.getObjectSerializer(data.getKeySerializedId()); + Map engineProperties = data.getEngineProperties(); + + final OEncryption encryption = + OAbstractPaginatedStorage.loadEncryption(data.getEncryption(), data.getEncryptionOptions()); this.strategy = new OAutoShardingMurmurStrategy(keySerializer); @@ -172,7 +176,7 @@ public void load( if (partitionsAsString == null || partitionsAsString.isEmpty()) throw new OIndexException( "Cannot load autosharding index '" - + indexName + + data.getName() + "' because there is no metadata about the number of partitions"); partitionSize = Integer.parseInt(partitionsAsString); @@ -193,9 +197,9 @@ public void load( for (OHashTable p : partitions) //noinspection unchecked p.load( - indexName + "_" + (i++), - keyTypes, - nullPointerSupport, + data.getName() + "_" + (i++), + data.getKeyTypes(), + data.isNullValuesSupport(), encryption, hashFunction, keySerializer, @@ -333,9 +337,13 @@ else if (updated.isRemove()) { @SuppressWarnings("unchecked") @Override public boolean validatedPut( - OAtomicOperation atomicOperation, Object key, ORID value, Validator validator) { + OAtomicOperation atomicOperation, + Object key, + ORID value, + IndexEngineValidator validator) { try { - return getPartition(key).validatedPut(atomicOperation, key, value, (Validator) validator); + return getPartition(key) + .validatedPut(atomicOperation, key, value, (IndexEngineValidator) validator); } catch (IOException e) { throw OException.wrapException( new OIndexException( @@ -345,7 +353,7 @@ public boolean validatedPut( } @Override - public long size(final ValuesTransformer transformer) { + public long size(final IndexEngineValuesTransformer transformer) { long counter = 0; if (partitions != null) @@ -374,7 +382,8 @@ public boolean hasRangeQuerySupport() { } @Override - public Stream> stream(final ValuesTransformer valuesTransformer) { + public Stream> stream( + final IndexEngineValuesTransformer valuesTransformer) { //noinspection resource return partitions.stream() .flatMap( @@ -384,7 +393,8 @@ public Stream> stream(final ValuesTransformer valuesTrans } @Override - public Stream> descStream(final ValuesTransformer valuesTransformer) { + public Stream> descStream( + final IndexEngineValuesTransformer valuesTransformer) { throw new UnsupportedOperationException("descCursor"); } @@ -463,7 +473,7 @@ public Stream> iterateEntriesBetween( final Object rangeTo, final boolean toInclusive, boolean ascSortOrder, - ValuesTransformer transformer) { + IndexEngineValuesTransformer transformer) { throw new UnsupportedOperationException("iterateEntriesBetween"); } @@ -472,13 +482,16 @@ public Stream> iterateEntriesMajor( final Object fromKey, final boolean isInclusive, final boolean ascSortOrder, - ValuesTransformer transformer) { + IndexEngineValuesTransformer transformer) { throw new UnsupportedOperationException("iterateEntriesMajor"); } @Override public Stream> iterateEntriesMinor( - Object toKey, boolean isInclusive, boolean ascSortOrder, ValuesTransformer transformer) { + Object toKey, + boolean isInclusive, + boolean ascSortOrder, + IndexEngineValuesTransformer transformer) { throw new UnsupportedOperationException("iterateEntriesMinor"); } @@ -514,13 +527,14 @@ private OHashTable getPartition(final Object iKey) { private static final class HashTableSpliterator implements Spliterator> { private int nextEntriesIndex; private OHashTable.Entry[] entries; - private final ValuesTransformer valuesTransformer; + private final IndexEngineValuesTransformer valuesTransformer; private Iterator currentIterator = new OEmptyIterator<>(); private Object currentKey; private final OHashTable hashTable; - private HashTableSpliterator(ValuesTransformer valuesTransformer, OHashTable hashTable) { + private HashTableSpliterator( + IndexEngineValuesTransformer valuesTransformer, OHashTable hashTable) { this.valuesTransformer = valuesTransformer; this.hashTable = hashTable; diff --git a/core/src/main/java/com/orientechnologies/orient/core/storage/impl/local/OAbstractPaginatedStorage.java b/core/src/main/java/com/orientechnologies/orient/core/storage/impl/local/OAbstractPaginatedStorage.java index f96c62b5de7..1416315c3ab 100755 --- a/core/src/main/java/com/orientechnologies/orient/core/storage/impl/local/OAbstractPaginatedStorage.java +++ b/core/src/main/java/com/orientechnologies/orient/core/storage/impl/local/OAbstractPaginatedStorage.java @@ -95,6 +95,8 @@ import com.orientechnologies.orient.core.index.OIndexMetadata; import com.orientechnologies.orient.core.index.OIndexes; import com.orientechnologies.orient.core.index.ORuntimeKeyIndexDefinition; +import com.orientechnologies.orient.core.index.engine.IndexEngineValidator; +import com.orientechnologies.orient.core.index.engine.IndexEngineValuesTransformer; import com.orientechnologies.orient.core.index.engine.OBaseIndexEngine; import com.orientechnologies.orient.core.index.engine.OIndexEngine; import com.orientechnologies.orient.core.index.engine.OMultiValueIndexEngine; @@ -725,37 +727,11 @@ protected final void openIndexes() { engineData.getVersion(), engineData.isMultivalue()); - final OEncryption encryption; - if (engineData.getEncryption() == null - || engineData.getEncryption().toLowerCase().equals(ONothingEncryption.NAME)) { - encryption = null; - } else { - encryption = - OEncryptionFactory.INSTANCE.getEncryption( - engineData.getEncryption(), engineData.getEncryptionOptions()); - } - if (engineData.getApiVersion() < 1) { - ((OIndexEngine) engine) - .load( - engineData.getName(), - cf.binarySerializerFactory.getObjectSerializer(engineData.getValueSerializerId()), - engineData.isAutomatic(), - cf.binarySerializerFactory.getObjectSerializer(engineData.getKeySerializedId()), - engineData.getKeyTypes(), - engineData.isNullValuesSupport(), - engineData.getKeySize(), - engineData.getEngineProperties(), - encryption); + ((OIndexEngine) engine).load(engineData); } else { - ((OV1IndexEngine) engine) - .load( - engineData.getName(), - engineData.getKeySize(), - engineData.getKeyTypes(), - cf.binarySerializerFactory.getObjectSerializer(engineData.getKeySerializedId()), - encryption); + ((OV1IndexEngine) engine).load(engineData); } indexEngineNameMap.put(engineData.getName(), engine); while (engineData.getIndexId() >= indexEngines.size()) { @@ -2720,22 +2696,9 @@ public int loadExternalIndexEngine( engineProperties); if (engineData.getApiVersion() < 1) { - - OBinarySerializer valueSerializer = - getComponentsFactory().binarySerializerFactory.getObjectSerializer(valueSerializerId); - ((OIndexEngine) engine) - .load( - engineName, - valueSerializer, - isAutomatic, - keySerializer, - keyTypes, - nullValuesSupport, - keySize, - engineData.getEngineProperties(), - null); + ((OIndexEngine) engine).load(engineData); } else { - ((OV1IndexEngine) engine).load(engineName, keySize, keyTypes, keySerializer, null); + ((OV1IndexEngine) engine).load(engineData); } atomicOperationsManager.executeInsideAtomicOperation( null, @@ -2916,12 +2879,7 @@ private OBaseIndexEngine addIndexEngineInternal( final String cfgEncryptionKey = ctxCfg.getValueAsString(OGlobalConfiguration.STORAGE_ENCRYPTION_KEY); - final OEncryption encryption; - if (cfgEncryption == null || cfgEncryption.equals(ONothingEncryption.NAME)) { - encryption = null; - } else { - encryption = OEncryptionFactory.INSTANCE.getEncryption(cfgEncryption, cfgEncryptionKey); - } + final OEncryption encryption = loadEncryption(cfgEncryption, cfgEncryptionKey); engine.create( atomicOperation, valueSerializer, @@ -2937,6 +2895,17 @@ private OBaseIndexEngine addIndexEngineInternal( return engine; } + public static OEncryption loadEncryption( + final String cfgEncryption, final String cfgEncryptionKey) { + final OEncryption encryption; + if (cfgEncryption == null || cfgEncryption.toLowerCase().equals(ONothingEncryption.NAME)) { + encryption = null; + } else { + encryption = OEncryptionFactory.INSTANCE.getEncryption(cfgEncryption, cfgEncryptionKey); + } + return encryption; + } + private static int generateIndexId(final int internalId, final OBaseIndexEngine indexEngine) { return indexEngine.getEngineAPIVersion() << (OIntegerSerializer.INT_SIZE * 8 - 5) | internalId; } @@ -3484,14 +3453,14 @@ private void putIndexValueInternal( * @param value the value to put. * @param validator the operation validator. * @return {@code true} if the validator allowed the put, {@code false} otherwise. - * @see OBaseIndexEngine.Validator#validate(Object, Object, Object) + * @see IndexEngineValidator#validate(Object, Object, Object) */ @SuppressWarnings("UnusedReturnValue") public boolean validatedPutIndexValue( final int indexId, final Object key, final ORID value, - final OBaseIndexEngine.Validator validator) + final IndexEngineValidator validator) throws OInvalidIndexEngineIdException { final int internalIndexId = extractInternalId(indexId); @@ -3516,7 +3485,7 @@ private boolean doValidatedPutIndexValue( final int indexId, final Object key, final ORID value, - final OBaseIndexEngine.Validator validator) + final IndexEngineValidator validator) throws OInvalidIndexEngineIdException { try { checkIndexId(indexId); @@ -3550,7 +3519,7 @@ public Stream> iterateIndexEntriesBetween( final Object rangeTo, final boolean toInclusive, final boolean ascSortOrder, - final OBaseIndexEngine.ValuesTransformer transformer) + final IndexEngineValuesTransformer transformer) throws OInvalidIndexEngineIdException { indexId = extractInternalId(indexId); @@ -3588,7 +3557,7 @@ private Stream> doIterateIndexEntriesBetween( final Object rangeTo, final boolean toInclusive, final boolean ascSortOrder, - final OBaseIndexEngine.ValuesTransformer transformer) + final IndexEngineValuesTransformer transformer) throws OInvalidIndexEngineIdException { checkIndexId(indexId); @@ -3604,7 +3573,7 @@ public Stream> iterateIndexEntriesMajor( final Object fromKey, final boolean isInclusive, final boolean ascSortOrder, - final OBaseIndexEngine.ValuesTransformer transformer) + final IndexEngineValuesTransformer transformer) throws OInvalidIndexEngineIdException { indexId = extractInternalId(indexId); @@ -3638,7 +3607,7 @@ private Stream> doIterateIndexEntriesMajor( final Object fromKey, final boolean isInclusive, final boolean ascSortOrder, - final OBaseIndexEngine.ValuesTransformer transformer) + final IndexEngineValuesTransformer transformer) throws OInvalidIndexEngineIdException { checkIndexId(indexId); @@ -3653,7 +3622,7 @@ public Stream> iterateIndexEntriesMinor( final Object toKey, final boolean isInclusive, final boolean ascSortOrder, - final OBaseIndexEngine.ValuesTransformer transformer) + final IndexEngineValuesTransformer transformer) throws OInvalidIndexEngineIdException { indexId = extractInternalId(indexId); @@ -3687,7 +3656,7 @@ private Stream> doIterateIndexEntriesMinor( final Object toKey, final boolean isInclusive, final boolean ascSortOrder, - final OBaseIndexEngine.ValuesTransformer transformer) + final IndexEngineValuesTransformer transformer) throws OInvalidIndexEngineIdException { checkIndexId(indexId); @@ -3698,7 +3667,7 @@ private Stream> doIterateIndexEntriesMinor( } public Stream> getIndexStream( - int indexId, final OBaseIndexEngine.ValuesTransformer valuesTransformer) + int indexId, final IndexEngineValuesTransformer valuesTransformer) throws OInvalidIndexEngineIdException { indexId = extractInternalId(indexId); @@ -3728,7 +3697,7 @@ public Stream> getIndexStream( } private Stream> doGetIndexStream( - final int indexId, final OBaseIndexEngine.ValuesTransformer valuesTransformer) + final int indexId, final IndexEngineValuesTransformer valuesTransformer) throws OInvalidIndexEngineIdException { checkIndexId(indexId); @@ -3739,7 +3708,7 @@ private Stream> doGetIndexStream( } public Stream> getIndexDescStream( - int indexId, final OBaseIndexEngine.ValuesTransformer valuesTransformer) + int indexId, final IndexEngineValuesTransformer valuesTransformer) throws OInvalidIndexEngineIdException { indexId = extractInternalId(indexId); @@ -3769,7 +3738,7 @@ public Stream> getIndexDescStream( } private Stream> doGetIndexDescStream( - final int indexId, final OBaseIndexEngine.ValuesTransformer valuesTransformer) + final int indexId, final IndexEngineValuesTransformer valuesTransformer) throws OInvalidIndexEngineIdException { checkIndexId(indexId); @@ -3817,7 +3786,7 @@ private Stream doGetIndexKeyStream(final int indexId) return engine.keyStream(); } - public long getIndexSize(int indexId, final OBaseIndexEngine.ValuesTransformer transformer) + public long getIndexSize(int indexId, final IndexEngineValuesTransformer transformer) throws OInvalidIndexEngineIdException { indexId = extractInternalId(indexId); @@ -3846,8 +3815,7 @@ public long getIndexSize(int indexId, final OBaseIndexEngine.ValuesTransformer t } } - private long doGetIndexSize( - final int indexId, final OBaseIndexEngine.ValuesTransformer transformer) + private long doGetIndexSize(final int indexId, final IndexEngineValuesTransformer transformer) throws OInvalidIndexEngineIdException { checkIndexId(indexId); diff --git a/core/src/main/java/com/orientechnologies/orient/core/storage/index/engine/OHashTableIndexEngine.java b/core/src/main/java/com/orientechnologies/orient/core/storage/index/engine/OHashTableIndexEngine.java index 5f794b6c478..2d704ed2967 100755 --- a/core/src/main/java/com/orientechnologies/orient/core/storage/index/engine/OHashTableIndexEngine.java +++ b/core/src/main/java/com/orientechnologies/orient/core/storage/index/engine/OHashTableIndexEngine.java @@ -23,6 +23,8 @@ import com.orientechnologies.common.serialization.types.OBinarySerializer; import com.orientechnologies.common.util.OCommonConst; import com.orientechnologies.common.util.ORawPair; +import com.orientechnologies.orient.core.config.IndexEngineData; +import com.orientechnologies.orient.core.db.record.OCurrentStorageComponentsFactory; import com.orientechnologies.orient.core.db.record.OIdentifiable; import com.orientechnologies.orient.core.encryption.OEncryption; import com.orientechnologies.orient.core.id.ORID; @@ -30,6 +32,8 @@ import com.orientechnologies.orient.core.index.OIndexException; import com.orientechnologies.orient.core.index.OIndexKeyUpdater; import com.orientechnologies.orient.core.index.OIndexUpdateAction; +import com.orientechnologies.orient.core.index.engine.IndexEngineValidator; +import com.orientechnologies.orient.core.index.engine.IndexEngineValuesTransformer; import com.orientechnologies.orient.core.index.engine.OIndexEngine; import com.orientechnologies.orient.core.iterator.OEmptyIterator; import com.orientechnologies.orient.core.metadata.schema.OType; @@ -75,8 +79,11 @@ public final class OHashTableIndexEngine implements OIndexEngine { private final OVersionPositionMap versionPositionMap; + private OAbstractPaginatedStorage storage; + public OHashTableIndexEngine( String name, int id, OAbstractPaginatedStorage storage, int version) { + this.storage = storage; this.id = id; if (version < 2) { throw new IllegalStateException("Unsupported version of hash index"); @@ -207,16 +214,15 @@ private void doClearTable(OAtomicOperation atomicOperation) throws IOException { } @Override - public void load( - String indexName, - OBinarySerializer valueSerializer, - boolean isAutomatic, - OBinarySerializer keySerializer, - OType[] keyTypes, - boolean nullPointerSupport, - int keySize, - Map engineProperties, - OEncryption encryption) { + public void load(IndexEngineData data) { + OCurrentStorageComponentsFactory cf = this.storage.getComponentsFactory(); + OBinarySerializer keySerializer = + cf.binarySerializerFactory.getObjectSerializer(data.getKeySerializedId()); + OBinarySerializer valueSerializer = + cf.binarySerializerFactory.getObjectSerializer(data.getValueSerializerId()); + + final OEncryption encryption = + OAbstractPaginatedStorage.loadEncryption(data.getEncryption(), data.getEncryptionOptions()); final OHashFunction hashFunction; @@ -229,9 +235,9 @@ public void load( } //noinspection unchecked hashTable.load( - indexName, - keyTypes, - nullPointerSupport, + data.getName(), + data.getKeyTypes(), + data.isNullValuesSupport(), encryption, hashFunction, keySerializer, @@ -241,7 +247,7 @@ public void load( versionPositionMap.open(); } catch (final IOException e) { throw OException.wrapException( - new OIndexException("Error during VPM load of index " + indexName), e); + new OIndexException("Error during VPM load of index " + data.getName()), e); } } @@ -288,13 +294,16 @@ public void update(OAtomicOperation atomicOperation, Object key, OIndexKeyUpdate @SuppressWarnings("unchecked") @Override public boolean validatedPut( - OAtomicOperation atomicOperation, Object key, ORID value, Validator validator) + OAtomicOperation atomicOperation, + Object key, + ORID value, + IndexEngineValidator validator) throws IOException { - return hashTable.validatedPut(atomicOperation, key, value, (Validator) validator); + return hashTable.validatedPut(atomicOperation, key, value, (IndexEngineValidator) validator); } @Override - public long size(ValuesTransformer transformer) { + public long size(IndexEngineValuesTransformer transformer) { if (transformer == null) { return hashTable.size(); } else { @@ -338,24 +347,31 @@ public Stream> iterateEntriesBetween( Object rangeTo, boolean toInclusive, boolean ascSortOrder, - ValuesTransformer transformer) { + IndexEngineValuesTransformer transformer) { throw new UnsupportedOperationException("iterateEntriesBetween"); } @Override public Stream> iterateEntriesMajor( - Object fromKey, boolean isInclusive, boolean ascSortOrder, ValuesTransformer transformer) { + Object fromKey, + boolean isInclusive, + boolean ascSortOrder, + IndexEngineValuesTransformer transformer) { throw new UnsupportedOperationException("iterateEntriesMajor"); } @Override public Stream> iterateEntriesMinor( - Object toKey, boolean isInclusive, boolean ascSortOrder, ValuesTransformer transformer) { + Object toKey, + boolean isInclusive, + boolean ascSortOrder, + IndexEngineValuesTransformer transformer) { throw new UnsupportedOperationException("iterateEntriesMinor"); } @Override - public Stream> stream(final ValuesTransformer valuesTransformer) { + public Stream> stream( + final IndexEngineValuesTransformer valuesTransformer) { return StreamSupport.stream( new Spliterator>() { private int nextEntriesIndex; @@ -444,7 +460,8 @@ public int characteristics() { } @Override - public Stream> descStream(final ValuesTransformer valuesTransformer) { + public Stream> descStream( + final IndexEngineValuesTransformer valuesTransformer) { return StreamSupport.stream( new Spliterator>() { private int nextEntriesIndex; diff --git a/core/src/main/java/com/orientechnologies/orient/core/storage/index/engine/ORemoteIndexEngine.java b/core/src/main/java/com/orientechnologies/orient/core/storage/index/engine/ORemoteIndexEngine.java index b96d809f1ed..adac69aedda 100755 --- a/core/src/main/java/com/orientechnologies/orient/core/storage/index/engine/ORemoteIndexEngine.java +++ b/core/src/main/java/com/orientechnologies/orient/core/storage/index/engine/ORemoteIndexEngine.java @@ -21,10 +21,13 @@ import com.orientechnologies.common.serialization.types.OBinarySerializer; import com.orientechnologies.common.util.ORawPair; +import com.orientechnologies.orient.core.config.IndexEngineData; import com.orientechnologies.orient.core.encryption.OEncryption; import com.orientechnologies.orient.core.id.ORID; import com.orientechnologies.orient.core.index.OIndexDefinition; import com.orientechnologies.orient.core.index.OIndexKeyUpdater; +import com.orientechnologies.orient.core.index.engine.IndexEngineValidator; +import com.orientechnologies.orient.core.index.engine.IndexEngineValuesTransformer; import com.orientechnologies.orient.core.index.engine.OIndexEngine; import com.orientechnologies.orient.core.metadata.schema.OType; import com.orientechnologies.orient.core.record.impl.ODocument; @@ -97,16 +100,7 @@ public void create( public void delete(OAtomicOperation atomicOperation) {} @Override - public void load( - String indexName, - OBinarySerializer valueSerializer, - boolean isAutomatic, - OBinarySerializer keySerializer, - OType[] keyTypes, - boolean nullPointerSupport, - int keySize, - Map engineProperties, - OEncryption encryption) {} + public void load(IndexEngineData data) {} @Override public boolean remove(OAtomicOperation atomicOperation, Object key) { @@ -133,7 +127,10 @@ public void update( @Override public boolean validatedPut( - OAtomicOperation atomicOperation, Object key, ORID value, Validator validator) { + OAtomicOperation atomicOperation, + Object key, + ORID value, + IndexEngineValidator validator) { return false; } @@ -144,24 +141,30 @@ public Stream> iterateEntriesBetween( Object rangeTo, boolean toInclusive, boolean ascSortOrder, - ValuesTransformer transformer) { + IndexEngineValuesTransformer transformer) { throw new UnsupportedOperationException("stream"); } @Override public Stream> iterateEntriesMajor( - Object fromKey, boolean isInclusive, boolean ascSortOrder, ValuesTransformer transformer) { + Object fromKey, + boolean isInclusive, + boolean ascSortOrder, + IndexEngineValuesTransformer transformer) { throw new UnsupportedOperationException("stream"); } @Override public Stream> iterateEntriesMinor( - Object toKey, boolean isInclusive, boolean ascSortOrder, ValuesTransformer transformer) { + Object toKey, + boolean isInclusive, + boolean ascSortOrder, + IndexEngineValuesTransformer transformer) { throw new UnsupportedOperationException("stream"); } @Override - public long size(ValuesTransformer transformer) { + public long size(IndexEngineValuesTransformer transformer) { return 0; } @@ -171,12 +174,12 @@ public boolean hasRangeQuerySupport() { } @Override - public Stream> stream(ValuesTransformer valuesTransformer) { + public Stream> stream(IndexEngineValuesTransformer valuesTransformer) { throw new UnsupportedOperationException("stream"); } @Override - public Stream> descStream(ValuesTransformer valuesTransformer) { + public Stream> descStream(IndexEngineValuesTransformer valuesTransformer) { throw new UnsupportedOperationException(); } diff --git a/core/src/main/java/com/orientechnologies/orient/core/storage/index/engine/OSBTreeIndexEngine.java b/core/src/main/java/com/orientechnologies/orient/core/storage/index/engine/OSBTreeIndexEngine.java index cf3dbca028b..197c0a258c2 100755 --- a/core/src/main/java/com/orientechnologies/orient/core/storage/index/engine/OSBTreeIndexEngine.java +++ b/core/src/main/java/com/orientechnologies/orient/core/storage/index/engine/OSBTreeIndexEngine.java @@ -23,11 +23,15 @@ import com.orientechnologies.common.exception.OException; import com.orientechnologies.common.serialization.types.OBinarySerializer; import com.orientechnologies.common.util.ORawPair; +import com.orientechnologies.orient.core.config.IndexEngineData; +import com.orientechnologies.orient.core.db.record.OCurrentStorageComponentsFactory; import com.orientechnologies.orient.core.encryption.OEncryption; import com.orientechnologies.orient.core.id.ORID; import com.orientechnologies.orient.core.index.OIndexDefinition; import com.orientechnologies.orient.core.index.OIndexException; import com.orientechnologies.orient.core.index.OIndexKeyUpdater; +import com.orientechnologies.orient.core.index.engine.IndexEngineValidator; +import com.orientechnologies.orient.core.index.engine.IndexEngineValuesTransformer; import com.orientechnologies.orient.core.index.engine.OIndexEngine; import com.orientechnologies.orient.core.metadata.schema.OType; import com.orientechnologies.orient.core.record.impl.ODocument; @@ -60,10 +64,13 @@ public class OSBTreeIndexEngine implements OIndexEngine { private final String name; private final int id; + private OAbstractPaginatedStorage storage; + public OSBTreeIndexEngine( final int id, String name, OAbstractPaginatedStorage storage, int version) { this.id = id; this.name = name; + this.storage = storage; if (version == 1) { sbTree = new OSBTreeV1<>(name, DATA_FILE_EXTENSION, NULL_BUCKET_FILE_EXTENSION, storage); @@ -158,30 +165,26 @@ private void doClearTree(OAtomicOperation atomicOperation) throws IOException { } @Override - public void load( - String indexName, - OBinarySerializer valueSerializer, - boolean isAutomatic, - OBinarySerializer keySerializer, - OType[] keyTypes, - boolean nullPointerSupport, - int keySize, - Map engineProperties, - OEncryption encryption) { - //noinspection unchecked + public void load(IndexEngineData data) { + OCurrentStorageComponentsFactory cf = this.storage.getComponentsFactory(); + final OEncryption encryption = + OAbstractPaginatedStorage.loadEncryption(data.getEncryption(), data.getEncryptionOptions()); + sbTree.load( - indexName, - keySerializer, - valueSerializer, - keyTypes, - keySize, - nullPointerSupport, + data.getName(), + (OBinarySerializer) + cf.binarySerializerFactory.getObjectSerializer(data.getKeySerializedId()), + (OBinarySerializer) + cf.binarySerializerFactory.getObjectSerializer(data.getValueSerializerId()), + data.getKeyTypes(), + data.getKeySize(), + data.isNullValuesSupport(), encryption); try { versionPositionMap.open(); } catch (final IOException e) { throw OException.wrapException( - new OIndexException("Error during VPM load of index " + indexName), e); + new OIndexException("Error during VPM load of index " + data.getName()), e); } } @@ -215,7 +218,7 @@ public Object get(Object key) { } @Override - public Stream> stream(ValuesTransformer valuesTransformer) { + public Stream> stream(IndexEngineValuesTransformer valuesTransformer) { final Object firstKey = sbTree.firstKey(); if (firstKey == null) { return StreamSupport.stream(Spliterators.emptySpliterator(), false); @@ -225,7 +228,7 @@ public Stream> stream(ValuesTransformer valuesTransformer } private static Stream> convertTreeStreamToIndexStream( - ValuesTransformer valuesTransformer, Stream> treeStream) { + IndexEngineValuesTransformer valuesTransformer, Stream> treeStream) { if (valuesTransformer == null) { return treeStream.map((entry) -> new ORawPair<>(entry.first, (ORID) entry.second)); } else { @@ -238,7 +241,7 @@ private static Stream> convertTreeStreamToIndexStream( } @Override - public Stream> descStream(ValuesTransformer valuesTransformer) { + public Stream> descStream(IndexEngineValuesTransformer valuesTransformer) { final Object lastKey = sbTree.lastKey(); if (lastKey == null) { return StreamSupport.stream(Spliterators.emptySpliterator(), false); @@ -277,9 +280,12 @@ public void update( @SuppressWarnings("unchecked") @Override public boolean validatedPut( - OAtomicOperation atomicOperation, Object key, ORID value, Validator validator) { + OAtomicOperation atomicOperation, + Object key, + ORID value, + IndexEngineValidator validator) { try { - return sbTree.validatedPut(atomicOperation, key, value, (Validator) validator); + return sbTree.validatedPut(atomicOperation, key, value, (IndexEngineValidator) validator); } catch (IOException e) { throw OException.wrapException( new OIndexException("Error during insertion of key " + key + " in index " + name), e); @@ -293,7 +299,7 @@ public Stream> iterateEntriesBetween( Object rangeTo, boolean toInclusive, boolean ascSortOrder, - ValuesTransformer transformer) { + IndexEngineValuesTransformer transformer) { return convertTreeStreamToIndexStream( transformer, sbTree.iterateEntriesBetween(rangeFrom, fromInclusive, rangeTo, toInclusive, ascSortOrder)); @@ -301,20 +307,26 @@ public Stream> iterateEntriesBetween( @Override public Stream> iterateEntriesMajor( - Object fromKey, boolean isInclusive, boolean ascSortOrder, ValuesTransformer transformer) { + Object fromKey, + boolean isInclusive, + boolean ascSortOrder, + IndexEngineValuesTransformer transformer) { return convertTreeStreamToIndexStream( transformer, sbTree.iterateEntriesMajor(fromKey, isInclusive, ascSortOrder)); } @Override public Stream> iterateEntriesMinor( - Object toKey, boolean isInclusive, boolean ascSortOrder, ValuesTransformer transformer) { + Object toKey, + boolean isInclusive, + boolean ascSortOrder, + IndexEngineValuesTransformer transformer) { return convertTreeStreamToIndexStream( transformer, sbTree.iterateEntriesMinor(toKey, isInclusive, ascSortOrder)); } @Override - public long size(final ValuesTransformer transformer) { + public long size(final IndexEngineValuesTransformer transformer) { if (transformer == null) { return sbTree.size(); } else { diff --git a/core/src/main/java/com/orientechnologies/orient/core/storage/index/hashindex/local/OHashTable.java b/core/src/main/java/com/orientechnologies/orient/core/storage/index/hashindex/local/OHashTable.java index a575b681686..930c76e0bca 100755 --- a/core/src/main/java/com/orientechnologies/orient/core/storage/index/hashindex/local/OHashTable.java +++ b/core/src/main/java/com/orientechnologies/orient/core/storage/index/hashindex/local/OHashTable.java @@ -22,7 +22,7 @@ import com.orientechnologies.common.comparator.ODefaultComparator; import com.orientechnologies.common.serialization.types.OBinarySerializer; import com.orientechnologies.orient.core.encryption.OEncryption; -import com.orientechnologies.orient.core.index.engine.OBaseIndexEngine; +import com.orientechnologies.orient.core.index.engine.IndexEngineValidator; import com.orientechnologies.orient.core.metadata.schema.OType; import com.orientechnologies.orient.core.storage.impl.local.paginated.atomicoperations.OAtomicOperation; import java.io.IOException; @@ -51,10 +51,10 @@ void create( * @param value the value to put. * @param validator the operation validator. * @return {@code true} if the validator allowed the put, {@code false} otherwise. - * @see OBaseIndexEngine.Validator#validate(Object, Object, Object) + * @see IndexEngineValidator#validate(Object, Object, Object) */ boolean validatedPut( - OAtomicOperation atomicOperation, K key, V value, OBaseIndexEngine.Validator validator) + OAtomicOperation atomicOperation, K key, V value, IndexEngineValidator validator) throws IOException; void put(OAtomicOperation atomicOperation, K key, V value) throws IOException; diff --git a/core/src/main/java/com/orientechnologies/orient/core/storage/index/hashindex/local/v2/LocalHashTableV2.java b/core/src/main/java/com/orientechnologies/orient/core/storage/index/hashindex/local/v2/LocalHashTableV2.java index 1eed9796fce..069a69750b3 100644 --- a/core/src/main/java/com/orientechnologies/orient/core/storage/index/hashindex/local/v2/LocalHashTableV2.java +++ b/core/src/main/java/com/orientechnologies/orient/core/storage/index/hashindex/local/v2/LocalHashTableV2.java @@ -10,8 +10,7 @@ import com.orientechnologies.orient.core.exception.OLocalHashTableV2Exception; import com.orientechnologies.orient.core.exception.OTooBigIndexKeyException; import com.orientechnologies.orient.core.index.OIndexException; -import com.orientechnologies.orient.core.index.engine.OBaseIndexEngine; -import com.orientechnologies.orient.core.index.engine.OIndexEngine; +import com.orientechnologies.orient.core.index.engine.IndexEngineValidator; import com.orientechnologies.orient.core.metadata.schema.OType; import com.orientechnologies.orient.core.storage.cache.OCacheEntry; import com.orientechnologies.orient.core.storage.impl.local.OAbstractPaginatedStorage; @@ -277,7 +276,7 @@ public boolean validatedPut( final OAtomicOperation atomicOperation, final K key, final V value, - final OBaseIndexEngine.Validator validator) { + final IndexEngineValidator validator) { return put(atomicOperation, key, value, validator); } @@ -1309,7 +1308,7 @@ private boolean put( final OAtomicOperation atomicOperation, K k, final V value, - final OBaseIndexEngine.Validator validator) { + final IndexEngineValidator validator) { return calculateInsideComponentOperation( atomicOperation, operation -> { @@ -1350,7 +1349,7 @@ private boolean doPut( final byte[] rawKey, V value, byte[] rawValue, - final OIndexEngine.Validator validator, + final IndexEngineValidator validator, final OAtomicOperation atomicOperation) throws IOException { int sizeDiff = 0; @@ -1381,7 +1380,7 @@ private boolean doPut( if (validator != null) { final Object result = validator.validate(null, oldValue, value); - if (result == OBaseIndexEngine.Validator.IGNORE) { + if (result == IndexEngineValidator.IGNORE) { return false; } @@ -1433,7 +1432,7 @@ private boolean doPut( if (validator != null) { final Object result = validator.validate(key, oldValue, value); - if (result == OBaseIndexEngine.Validator.IGNORE) { + if (result == IndexEngineValidator.IGNORE) { return false; } diff --git a/core/src/main/java/com/orientechnologies/orient/core/storage/index/hashindex/local/v3/OLocalHashTableV3.java b/core/src/main/java/com/orientechnologies/orient/core/storage/index/hashindex/local/v3/OLocalHashTableV3.java index c732951f701..9441f8d1ad6 100755 --- a/core/src/main/java/com/orientechnologies/orient/core/storage/index/hashindex/local/v3/OLocalHashTableV3.java +++ b/core/src/main/java/com/orientechnologies/orient/core/storage/index/hashindex/local/v3/OLocalHashTableV3.java @@ -8,8 +8,7 @@ import com.orientechnologies.orient.core.exception.OLocalHashTableV3Exception; import com.orientechnologies.orient.core.exception.OTooBigIndexKeyException; import com.orientechnologies.orient.core.index.OIndexException; -import com.orientechnologies.orient.core.index.engine.OBaseIndexEngine; -import com.orientechnologies.orient.core.index.engine.OIndexEngine; +import com.orientechnologies.orient.core.index.engine.IndexEngineValidator; import com.orientechnologies.orient.core.metadata.schema.OType; import com.orientechnologies.orient.core.storage.cache.OCacheEntry; import com.orientechnologies.orient.core.storage.impl.local.OAbstractPaginatedStorage; @@ -266,7 +265,7 @@ public boolean validatedPut( OAtomicOperation atomicOperation, final K key, final V value, - final OBaseIndexEngine.Validator validator) { + final IndexEngineValidator validator) { return put(atomicOperation, key, value, validator); } @@ -1252,7 +1251,7 @@ private boolean put( OAtomicOperation atomicOperation, K k, final V value, - final OBaseIndexEngine.Validator validator) { + final IndexEngineValidator validator) { return calculateInsideComponentOperation( atomicOperation, operation -> { @@ -1283,7 +1282,7 @@ private boolean put( private boolean doPut( final K key, V value, - final OIndexEngine.Validator validator, + final IndexEngineValidator validator, final OAtomicOperation atomicOperation) throws IOException { int sizeDiff = 0; @@ -1307,7 +1306,7 @@ private boolean doPut( if (validator != null) { final Object result = validator.validate(null, oldValue, value); - if (result == OBaseIndexEngine.Validator.IGNORE) { + if (result == IndexEngineValidator.IGNORE) { return false; } @@ -1351,7 +1350,7 @@ private boolean doPut( final V oldValue = index > -1 ? bucket.getValue(index) : null; if (validator != null) { final Object result = validator.validate(key, oldValue, value); - if (result == OBaseIndexEngine.Validator.IGNORE) { + if (result == IndexEngineValidator.IGNORE) { return false; } diff --git a/core/src/main/java/com/orientechnologies/orient/core/storage/index/sbtree/local/OSBTree.java b/core/src/main/java/com/orientechnologies/orient/core/storage/index/sbtree/local/OSBTree.java index 2a9681797a5..af8b6f4023e 100755 --- a/core/src/main/java/com/orientechnologies/orient/core/storage/index/sbtree/local/OSBTree.java +++ b/core/src/main/java/com/orientechnologies/orient/core/storage/index/sbtree/local/OSBTree.java @@ -4,7 +4,7 @@ import com.orientechnologies.common.util.ORawPair; import com.orientechnologies.orient.core.encryption.OEncryption; import com.orientechnologies.orient.core.index.OIndexKeyUpdater; -import com.orientechnologies.orient.core.index.engine.OBaseIndexEngine; +import com.orientechnologies.orient.core.index.engine.IndexEngineValidator; import com.orientechnologies.orient.core.metadata.schema.OType; import com.orientechnologies.orient.core.storage.impl.local.paginated.atomicoperations.OAtomicOperation; import java.io.IOException; @@ -28,14 +28,14 @@ void create( void put(OAtomicOperation atomicOperation, K key, V value) throws IOException; boolean validatedPut( - OAtomicOperation atomicOperation, K key, V value, OBaseIndexEngine.Validator validator) + OAtomicOperation atomicOperation, K key, V value, IndexEngineValidator validator) throws IOException; boolean update( OAtomicOperation atomicOperation, K key, OIndexKeyUpdater updater, - OBaseIndexEngine.Validator validator) + IndexEngineValidator validator) throws IOException; void close(boolean flush); diff --git a/core/src/main/java/com/orientechnologies/orient/core/storage/index/sbtree/local/v1/OSBTreeV1.java b/core/src/main/java/com/orientechnologies/orient/core/storage/index/sbtree/local/v1/OSBTreeV1.java index 2e07b135d5d..cb507ef6baa 100755 --- a/core/src/main/java/com/orientechnologies/orient/core/storage/index/sbtree/local/v1/OSBTreeV1.java +++ b/core/src/main/java/com/orientechnologies/orient/core/storage/index/sbtree/local/v1/OSBTreeV1.java @@ -33,7 +33,7 @@ import com.orientechnologies.orient.core.index.OIndexUpdateAction; import com.orientechnologies.orient.core.index.comparator.OAlwaysGreaterKey; import com.orientechnologies.orient.core.index.comparator.OAlwaysLessKey; -import com.orientechnologies.orient.core.index.engine.OBaseIndexEngine; +import com.orientechnologies.orient.core.index.engine.IndexEngineValidator; import com.orientechnologies.orient.core.iterator.OEmptyIterator; import com.orientechnologies.orient.core.metadata.schema.OType; import com.orientechnologies.orient.core.storage.cache.OCacheEntry; @@ -247,7 +247,7 @@ public boolean validatedPut( OAtomicOperation atomicOperation, final K key, final V value, - final OBaseIndexEngine.Validator validator) { + final IndexEngineValidator validator) { return put(atomicOperation, key, value, validator); } @@ -255,7 +255,7 @@ private boolean put( final OAtomicOperation atomicOperation, final K key, final V value, - final OBaseIndexEngine.Validator validator) { + final IndexEngineValidator validator) { return update( atomicOperation, key, (x, bonsayFileId) -> OIndexUpdateAction.changed(value), validator); } @@ -266,7 +266,7 @@ public boolean update( final OAtomicOperation atomicOperation, K k, final OIndexKeyUpdater updater, - final OBaseIndexEngine.Validator validator) { + final IndexEngineValidator validator) { return calculateInsideComponentOperation( atomicOperation, operation -> { @@ -323,7 +323,7 @@ public boolean update( try { final Object result = validator.validate(key, oldValue, value); - if (result == OBaseIndexEngine.Validator.IGNORE) { + if (result == IndexEngineValidator.IGNORE) { ignored = true; failure = false; return false; @@ -427,7 +427,7 @@ public boolean update( if (validator != null) { final Object result = validator.validate(null, oldValue, value); - if (result == OBaseIndexEngine.Validator.IGNORE) { + if (result == IndexEngineValidator.IGNORE) { return false; } } diff --git a/core/src/main/java/com/orientechnologies/orient/core/storage/index/sbtree/local/v2/OSBTreeV2.java b/core/src/main/java/com/orientechnologies/orient/core/storage/index/sbtree/local/v2/OSBTreeV2.java index 4d5627c0c09..ff256746315 100755 --- a/core/src/main/java/com/orientechnologies/orient/core/storage/index/sbtree/local/v2/OSBTreeV2.java +++ b/core/src/main/java/com/orientechnologies/orient/core/storage/index/sbtree/local/v2/OSBTreeV2.java @@ -32,7 +32,7 @@ import com.orientechnologies.orient.core.index.OIndexUpdateAction; import com.orientechnologies.orient.core.index.comparator.OAlwaysGreaterKey; import com.orientechnologies.orient.core.index.comparator.OAlwaysLessKey; -import com.orientechnologies.orient.core.index.engine.OBaseIndexEngine; +import com.orientechnologies.orient.core.index.engine.IndexEngineValidator; import com.orientechnologies.orient.core.metadata.schema.OType; import com.orientechnologies.orient.core.storage.cache.OCacheEntry; import com.orientechnologies.orient.core.storage.impl.local.OAbstractPaginatedStorage; @@ -245,7 +245,7 @@ public boolean validatedPut( final OAtomicOperation atomicOperation, final K key, final V value, - final OBaseIndexEngine.Validator validator) { + final IndexEngineValidator validator) { return put(atomicOperation, key, value, validator); } @@ -253,7 +253,7 @@ private boolean put( final OAtomicOperation atomicOperation, final K key, final V value, - final OBaseIndexEngine.Validator validator) { + final IndexEngineValidator validator) { return update( atomicOperation, key, (x, bonsayFileId) -> OIndexUpdateAction.changed(value), validator); } @@ -264,7 +264,7 @@ public boolean update( OAtomicOperation atomicOperation, final K k, final OIndexKeyUpdater updater, - final OBaseIndexEngine.Validator validator) { + final IndexEngineValidator validator) { return calculateInsideComponentOperation( atomicOperation, operation -> { @@ -319,7 +319,7 @@ public boolean update( try { final Object result = validator.validate(key, oldValue, value); - if (result == OBaseIndexEngine.Validator.IGNORE) { + if (result == IndexEngineValidator.IGNORE) { ignored = true; failure = false; return false; @@ -419,7 +419,7 @@ public boolean update( final int valueSize = valueSerializer.getObjectSize(value); if (validator != null) { final Object result = validator.validate(null, oldValue, value); - if (result == OBaseIndexEngine.Validator.IGNORE) { + if (result == IndexEngineValidator.IGNORE) { return false; } } diff --git a/core/src/main/java/com/orientechnologies/orient/core/storage/index/sbtree/multivalue/v2/CellBTreeMultiValueV2.java b/core/src/main/java/com/orientechnologies/orient/core/storage/index/sbtree/multivalue/v2/CellBTreeMultiValueV2.java index 13e1f5a0de6..eb9d71225ba 100644 --- a/core/src/main/java/com/orientechnologies/orient/core/storage/index/sbtree/multivalue/v2/CellBTreeMultiValueV2.java +++ b/core/src/main/java/com/orientechnologies/orient/core/storage/index/sbtree/multivalue/v2/CellBTreeMultiValueV2.java @@ -35,7 +35,6 @@ import com.orientechnologies.orient.core.index.OCompositeKey; import com.orientechnologies.orient.core.index.comparator.OAlwaysGreaterKey; import com.orientechnologies.orient.core.index.comparator.OAlwaysLessKey; -import com.orientechnologies.orient.core.index.engine.OBaseIndexEngine; import com.orientechnologies.orient.core.iterator.OEmptyIterator; import com.orientechnologies.orient.core.iterator.OEmptyMapEntryIterator; import com.orientechnologies.orient.core.metadata.schema.OType; @@ -481,14 +480,7 @@ public void put(final OAtomicOperation atomicOperation, final K pk, final ORID v atomicOperation, new MultiValueEntry(result, value.getClusterId(), value.getClusterPosition()), (byte) 1, - (k, ov, v) -> { - if (ov != null) { - return OBaseIndexEngine.Validator.IGNORE; - } - - nullBucket.incrementSize(); - return v; - }); + new IndexEngineValidatorNullIncrement(nullBucket)); } } } @@ -519,14 +511,7 @@ private boolean addEntry( atomicOperation, new MultiValueEntry(result, value.getClusterId(), value.getClusterPosition()), (byte) 1, - (k, ov, v) -> { - if (ov != null) { - return OBaseIndexEngine.Validator.IGNORE; - } - - bucketMultiValue.incrementEntriesCount(index); - return v; - }); + new IndexEngineValidatorIncrement(bucketMultiValue, index)); return true; } diff --git a/core/src/main/java/com/orientechnologies/orient/core/storage/index/sbtree/multivalue/v2/IndexEngineValidatorIncrement.java b/core/src/main/java/com/orientechnologies/orient/core/storage/index/sbtree/multivalue/v2/IndexEngineValidatorIncrement.java new file mode 100644 index 00000000000..c0ccd8d4cbd --- /dev/null +++ b/core/src/main/java/com/orientechnologies/orient/core/storage/index/sbtree/multivalue/v2/IndexEngineValidatorIncrement.java @@ -0,0 +1,24 @@ +package com.orientechnologies.orient.core.storage.index.sbtree.multivalue.v2; + +import com.orientechnologies.orient.core.index.engine.IndexEngineValidator; + +public class IndexEngineValidatorIncrement + implements IndexEngineValidator { + private final CellBTreeMultiValueV2Bucket bucket; + private final int index; + + public IndexEngineValidatorIncrement(CellBTreeMultiValueV2Bucket bucketMultiValue, int index) { + this.bucket = bucketMultiValue; + this.index = index; + } + + @Override + public Object validate(MultiValueEntry k, Byte ov, Byte v) { + if (ov != null) { + return IndexEngineValidator.IGNORE; + } + + bucket.incrementEntriesCount(index); + return v; + } +} diff --git a/core/src/main/java/com/orientechnologies/orient/core/storage/index/sbtree/multivalue/v2/IndexEngineValidatorNullIncrement.java b/core/src/main/java/com/orientechnologies/orient/core/storage/index/sbtree/multivalue/v2/IndexEngineValidatorNullIncrement.java new file mode 100644 index 00000000000..05a256411a4 --- /dev/null +++ b/core/src/main/java/com/orientechnologies/orient/core/storage/index/sbtree/multivalue/v2/IndexEngineValidatorNullIncrement.java @@ -0,0 +1,21 @@ +package com.orientechnologies.orient.core.storage.index.sbtree.multivalue.v2; + +import com.orientechnologies.orient.core.index.engine.IndexEngineValidator; + +class IndexEngineValidatorNullIncrement implements IndexEngineValidator { + private final CellBTreeMultiValueV2NullBucket nullBucket; + + IndexEngineValidatorNullIncrement(CellBTreeMultiValueV2NullBucket nullBucket) { + this.nullBucket = nullBucket; + } + + @Override + public Object validate(MultiValueEntry k, Byte ov, Byte v) { + if (ov != null) { + return IndexEngineValidator.IGNORE; + } + + nullBucket.incrementSize(); + return v; + } +} diff --git a/core/src/main/java/com/orientechnologies/orient/core/storage/index/sbtree/singlevalue/OCellBTreeSingleValue.java b/core/src/main/java/com/orientechnologies/orient/core/storage/index/sbtree/singlevalue/OCellBTreeSingleValue.java index 9989f2ca17e..39495889491 100755 --- a/core/src/main/java/com/orientechnologies/orient/core/storage/index/sbtree/singlevalue/OCellBTreeSingleValue.java +++ b/core/src/main/java/com/orientechnologies/orient/core/storage/index/sbtree/singlevalue/OCellBTreeSingleValue.java @@ -4,7 +4,7 @@ import com.orientechnologies.common.util.ORawPair; import com.orientechnologies.orient.core.encryption.OEncryption; import com.orientechnologies.orient.core.id.ORID; -import com.orientechnologies.orient.core.index.engine.OBaseIndexEngine; +import com.orientechnologies.orient.core.index.engine.IndexEngineValidator; import com.orientechnologies.orient.core.metadata.schema.OType; import com.orientechnologies.orient.core.storage.impl.local.paginated.atomicoperations.OAtomicOperation; import java.io.IOException; @@ -24,10 +24,7 @@ void create( void put(OAtomicOperation atomicOperation, K key, ORID value) throws IOException; boolean validatedPut( - OAtomicOperation atomicOperation, - K key, - ORID value, - OBaseIndexEngine.Validator validator) + OAtomicOperation atomicOperation, K key, ORID value, IndexEngineValidator validator) throws IOException; void close(); diff --git a/core/src/main/java/com/orientechnologies/orient/core/storage/index/sbtree/singlevalue/v1/CellBTreeSingleValueV1.java b/core/src/main/java/com/orientechnologies/orient/core/storage/index/sbtree/singlevalue/v1/CellBTreeSingleValueV1.java index 223c8d9401e..66c13b32c8b 100755 --- a/core/src/main/java/com/orientechnologies/orient/core/storage/index/sbtree/singlevalue/v1/CellBTreeSingleValueV1.java +++ b/core/src/main/java/com/orientechnologies/orient/core/storage/index/sbtree/singlevalue/v1/CellBTreeSingleValueV1.java @@ -35,7 +35,7 @@ import com.orientechnologies.orient.core.index.OCompositeKey; import com.orientechnologies.orient.core.index.comparator.OAlwaysGreaterKey; import com.orientechnologies.orient.core.index.comparator.OAlwaysLessKey; -import com.orientechnologies.orient.core.index.engine.OBaseIndexEngine; +import com.orientechnologies.orient.core.index.engine.IndexEngineValidator; import com.orientechnologies.orient.core.iterator.OEmptyIterator; import com.orientechnologies.orient.core.metadata.schema.OType; import com.orientechnologies.orient.core.storage.cache.OCacheEntry; @@ -230,7 +230,7 @@ public boolean validatedPut( OAtomicOperation atomicOperation, final K key, final ORID value, - final OBaseIndexEngine.Validator validator) { + final IndexEngineValidator validator) { return update(atomicOperation, key, value, validator); } @@ -238,7 +238,7 @@ private boolean update( final OAtomicOperation atomicOperation, K k, ORID rid, - final OBaseIndexEngine.Validator validator) { + final IndexEngineValidator validator) { return calculateInsideComponentOperation( atomicOperation, operation -> { @@ -293,7 +293,7 @@ private boolean update( try { final Object result = validator.validate(key, oldValue, value); - if (result == OBaseIndexEngine.Validator.IGNORE) { + if (result == IndexEngineValidator.IGNORE) { ignored = true; failure = false; return false; @@ -377,7 +377,7 @@ private boolean update( if (validator != null) { final Object result = validator.validate(null, oldValue, value); - if (result == OBaseIndexEngine.Validator.IGNORE) { + if (result == IndexEngineValidator.IGNORE) { return false; } } diff --git a/core/src/main/java/com/orientechnologies/orient/core/storage/index/sbtree/singlevalue/v3/CellBTreeSingleValueV3.java b/core/src/main/java/com/orientechnologies/orient/core/storage/index/sbtree/singlevalue/v3/CellBTreeSingleValueV3.java index ce84055244b..5b73e131712 100755 --- a/core/src/main/java/com/orientechnologies/orient/core/storage/index/sbtree/singlevalue/v3/CellBTreeSingleValueV3.java +++ b/core/src/main/java/com/orientechnologies/orient/core/storage/index/sbtree/singlevalue/v3/CellBTreeSingleValueV3.java @@ -34,7 +34,7 @@ import com.orientechnologies.orient.core.index.OCompositeKey; import com.orientechnologies.orient.core.index.comparator.OAlwaysGreaterKey; import com.orientechnologies.orient.core.index.comparator.OAlwaysLessKey; -import com.orientechnologies.orient.core.index.engine.OBaseIndexEngine; +import com.orientechnologies.orient.core.index.engine.IndexEngineValidator; import com.orientechnologies.orient.core.metadata.schema.OType; import com.orientechnologies.orient.core.storage.cache.OCacheEntry; import com.orientechnologies.orient.core.storage.impl.local.OAbstractPaginatedStorage; @@ -214,7 +214,7 @@ public boolean validatedPut( OAtomicOperation atomicOperation, final K key, final ORID value, - final OBaseIndexEngine.Validator validator) { + final IndexEngineValidator validator) { return update(atomicOperation, key, value, validator); } @@ -222,7 +222,7 @@ private boolean update( final OAtomicOperation atomicOperation, final K k, final ORID rid, - final OBaseIndexEngine.Validator validator) { + final IndexEngineValidator validator) { return calculateInsideComponentOperation( atomicOperation, operation -> { @@ -276,7 +276,7 @@ private boolean update( try { final Object result = validator.validate(key, oldValue, value); - if (result == OBaseIndexEngine.Validator.IGNORE) { + if (result == IndexEngineValidator.IGNORE) { ignored = true; failure = false; return false; @@ -358,7 +358,7 @@ private boolean update( if (validator != null) { final Object result = validator.validate(null, oldValue, value); - if (result == OBaseIndexEngine.Validator.IGNORE) { + if (result == IndexEngineValidator.IGNORE) { return false; } } diff --git a/lucene/src/main/java/com/orientechnologies/lucene/engine/OLuceneFullTextIndexEngine.java b/lucene/src/main/java/com/orientechnologies/lucene/engine/OLuceneFullTextIndexEngine.java index 9b67469bcda..c12ba0b1f8f 100755 --- a/lucene/src/main/java/com/orientechnologies/lucene/engine/OLuceneFullTextIndexEngine.java +++ b/lucene/src/main/java/com/orientechnologies/lucene/engine/OLuceneFullTextIndexEngine.java @@ -38,6 +38,8 @@ import com.orientechnologies.orient.core.index.OIndexDefinition; import com.orientechnologies.orient.core.index.OIndexEngineException; import com.orientechnologies.orient.core.index.OIndexKeyUpdater; +import com.orientechnologies.orient.core.index.engine.IndexEngineValidator; +import com.orientechnologies.orient.core.index.engine.IndexEngineValuesTransformer; import com.orientechnologies.orient.core.record.impl.ODocument; import com.orientechnologies.orient.core.sql.parser.ParseException; import com.orientechnologies.orient.core.storage.OStorage; @@ -149,7 +151,10 @@ public void put(final OAtomicOperation atomicOperation, final Object key, final @Override public boolean validatedPut( - OAtomicOperation atomicOperation, Object key, ORID value, Validator validator) { + OAtomicOperation atomicOperation, + Object key, + ORID value, + IndexEngineValidator validator) { throw new UnsupportedOperationException( "Validated put is not supported by OLuceneFullTextIndexEngine"); } @@ -161,7 +166,7 @@ public Stream> iterateEntriesBetween( Object rangeTo, boolean toInclusive, boolean ascSortOrder, - ValuesTransformer transformer) { + IndexEngineValuesTransformer transformer) { return LuceneIndexTransformer.transformToStream((OLuceneResultSet) get(rangeFrom), rangeFrom); } @@ -180,13 +185,19 @@ private Set getResults( @Override public Stream> iterateEntriesMajor( - Object fromKey, boolean isInclusive, boolean ascSortOrder, ValuesTransformer transformer) { + Object fromKey, + boolean isInclusive, + boolean ascSortOrder, + IndexEngineValuesTransformer transformer) { return null; } @Override public Stream> iterateEntriesMinor( - Object toKey, boolean isInclusive, boolean ascSortOrder, ValuesTransformer transformer) { + Object toKey, + boolean isInclusive, + boolean ascSortOrder, + IndexEngineValuesTransformer transformer) { return null; } diff --git a/lucene/src/main/java/com/orientechnologies/lucene/engine/OLuceneIndexEngineAbstract.java b/lucene/src/main/java/com/orientechnologies/lucene/engine/OLuceneIndexEngineAbstract.java index 9c67ee6584f..51f3a01a8cb 100755 --- a/lucene/src/main/java/com/orientechnologies/lucene/engine/OLuceneIndexEngineAbstract.java +++ b/lucene/src/main/java/com/orientechnologies/lucene/engine/OLuceneIndexEngineAbstract.java @@ -32,6 +32,7 @@ import com.orientechnologies.lucene.tx.OLuceneTxChanges; import com.orientechnologies.lucene.tx.OLuceneTxChangesMultiRid; import com.orientechnologies.lucene.tx.OLuceneTxChangesSingleRid; +import com.orientechnologies.orient.core.config.IndexEngineData; import com.orientechnologies.orient.core.db.ODatabaseDocumentInternal; import com.orientechnologies.orient.core.db.ODatabaseRecordThreadLocal; import com.orientechnologies.orient.core.db.record.OIdentifiable; @@ -41,6 +42,7 @@ import com.orientechnologies.orient.core.id.ORID; import com.orientechnologies.orient.core.index.OIndexDefinition; import com.orientechnologies.orient.core.index.OIndexException; +import com.orientechnologies.orient.core.index.engine.IndexEngineValuesTransformer; import com.orientechnologies.orient.core.metadata.schema.OClass; import com.orientechnologies.orient.core.metadata.schema.OProperty; import com.orientechnologies.orient.core.metadata.schema.OType; @@ -556,16 +558,7 @@ private void internalDelete() throws IOException { } @Override - public void load( - String indexName, - OBinarySerializer valueSerializer, - boolean isAutomatic, - OBinarySerializer keySerializer, - OType[] keyTypes, - boolean nullPointerSupport, - int keySize, - Map engineProperties, - OEncryption encryption) {} + public void load(IndexEngineData data) {} @Override public void clear(OAtomicOperation atomicOperation) { @@ -602,12 +595,12 @@ private void doClose(boolean onDelete) { } @Override - public Stream> descStream(ValuesTransformer valuesTransformer) { + public Stream> descStream(IndexEngineValuesTransformer valuesTransformer) { throw new UnsupportedOperationException("Cannot iterate over a lucene index"); } @Override - public Stream> stream(ValuesTransformer valuesTransformer) { + public Stream> stream(IndexEngineValuesTransformer valuesTransformer) { throw new UnsupportedOperationException("Cannot iterate over a lucene index"); } @@ -616,7 +609,7 @@ public Stream keyStream() { throw new UnsupportedOperationException("Cannot iterate over a lucene index"); } - public long size(final ValuesTransformer transformer) { + public long size(final IndexEngineValuesTransformer transformer) { return sizeInTx(null); } diff --git a/lucene/src/main/java/com/orientechnologies/spatial/engine/OLuceneGeoSpatialIndexEngine.java b/lucene/src/main/java/com/orientechnologies/spatial/engine/OLuceneGeoSpatialIndexEngine.java index 6f7ae346eab..69f6bc08e6a 100755 --- a/lucene/src/main/java/com/orientechnologies/spatial/engine/OLuceneGeoSpatialIndexEngine.java +++ b/lucene/src/main/java/com/orientechnologies/spatial/engine/OLuceneGeoSpatialIndexEngine.java @@ -27,6 +27,7 @@ import com.orientechnologies.orient.core.index.OIndexDefinition; import com.orientechnologies.orient.core.index.OIndexEngineException; import com.orientechnologies.orient.core.index.OIndexKeyUpdater; +import com.orientechnologies.orient.core.index.engine.IndexEngineValidator; import com.orientechnologies.orient.core.record.impl.ODocument; import com.orientechnologies.orient.core.storage.OStorage; import com.orientechnologies.orient.core.storage.impl.local.paginated.atomicoperations.OAtomicOperation; @@ -138,7 +139,10 @@ public void update( @Override public boolean validatedPut( - OAtomicOperation atomicOperation, Object key, ORID value, Validator validator) { + OAtomicOperation atomicOperation, + Object key, + ORID value, + IndexEngineValidator validator) { throw new UnsupportedOperationException( "Validated put is not supported by OLuceneGeoSpatialIndexEngine"); } diff --git a/lucene/src/main/java/com/orientechnologies/spatial/engine/OLuceneLegacySpatialIndexEngine.java b/lucene/src/main/java/com/orientechnologies/spatial/engine/OLuceneLegacySpatialIndexEngine.java index cf9044273d2..07df1789a9b 100755 --- a/lucene/src/main/java/com/orientechnologies/spatial/engine/OLuceneLegacySpatialIndexEngine.java +++ b/lucene/src/main/java/com/orientechnologies/spatial/engine/OLuceneLegacySpatialIndexEngine.java @@ -30,6 +30,7 @@ import com.orientechnologies.orient.core.index.OIndexDefinition; import com.orientechnologies.orient.core.index.OIndexEngineException; import com.orientechnologies.orient.core.index.OIndexKeyUpdater; +import com.orientechnologies.orient.core.index.engine.IndexEngineValidator; import com.orientechnologies.orient.core.metadata.schema.OType; import com.orientechnologies.orient.core.record.impl.ODocument; import com.orientechnologies.orient.core.storage.OStorage; @@ -216,7 +217,10 @@ public void update( @Override public boolean validatedPut( - OAtomicOperation atomicOperation, Object key, ORID value, Validator validator) { + OAtomicOperation atomicOperation, + Object key, + ORID value, + IndexEngineValidator validator) { throw new UnsupportedOperationException( "Validated put is not supported by OLuceneLegacySpatialIndexEngine"); } diff --git a/lucene/src/main/java/com/orientechnologies/spatial/engine/OLuceneSpatialIndexEngineAbstract.java b/lucene/src/main/java/com/orientechnologies/spatial/engine/OLuceneSpatialIndexEngineAbstract.java index fde14d05063..eb19a63fae6 100644 --- a/lucene/src/main/java/com/orientechnologies/spatial/engine/OLuceneSpatialIndexEngineAbstract.java +++ b/lucene/src/main/java/com/orientechnologies/spatial/engine/OLuceneSpatialIndexEngineAbstract.java @@ -22,6 +22,7 @@ import com.orientechnologies.orient.core.db.record.OIdentifiable; import com.orientechnologies.orient.core.id.ORID; import com.orientechnologies.orient.core.index.OIndexDefinition; +import com.orientechnologies.orient.core.index.engine.IndexEngineValuesTransformer; import com.orientechnologies.orient.core.record.impl.ODocument; import com.orientechnologies.orient.core.storage.OStorage; import com.orientechnologies.orient.core.storage.impl.local.paginated.atomicoperations.OAtomicOperation; @@ -99,24 +100,30 @@ public Stream> iterateEntriesBetween( Object rangeTo, boolean toInclusive, boolean ascSortOrder, - ValuesTransformer transformer) { + IndexEngineValuesTransformer transformer) { return null; } @Override public Stream> iterateEntriesMajor( - Object fromKey, boolean isInclusive, boolean ascSortOrder, ValuesTransformer transformer) { + Object fromKey, + boolean isInclusive, + boolean ascSortOrder, + IndexEngineValuesTransformer transformer) { return null; } @Override public Stream> iterateEntriesMinor( - Object toKey, boolean isInclusive, boolean ascSortOrder, ValuesTransformer transformer) { + Object toKey, + boolean isInclusive, + boolean ascSortOrder, + IndexEngineValuesTransformer transformer) { return null; } @Override - public Stream> stream(ValuesTransformer valuesTransformer) { + public Stream> stream(IndexEngineValuesTransformer valuesTransformer) { return null; } diff --git a/lucene/src/main/java/com/orientechnologies/spatial/engine/OLuceneSpatialIndexEngineDelegator.java b/lucene/src/main/java/com/orientechnologies/spatial/engine/OLuceneSpatialIndexEngineDelegator.java index 0f5fb87e798..1f36e87cb1d 100755 --- a/lucene/src/main/java/com/orientechnologies/spatial/engine/OLuceneSpatialIndexEngineDelegator.java +++ b/lucene/src/main/java/com/orientechnologies/spatial/engine/OLuceneSpatialIndexEngineDelegator.java @@ -20,6 +20,7 @@ import com.orientechnologies.lucene.engine.OLuceneIndexEngine; import com.orientechnologies.lucene.query.OLuceneQueryContext; import com.orientechnologies.lucene.tx.OLuceneTxChanges; +import com.orientechnologies.orient.core.config.IndexEngineData; import com.orientechnologies.orient.core.db.record.OIdentifiable; import com.orientechnologies.orient.core.encryption.OEncryption; import com.orientechnologies.orient.core.id.OContextualRecordId; @@ -27,6 +28,8 @@ import com.orientechnologies.orient.core.index.OIndexDefinition; import com.orientechnologies.orient.core.index.OIndexException; import com.orientechnologies.orient.core.index.OIndexKeyUpdater; +import com.orientechnologies.orient.core.index.engine.IndexEngineValidator; +import com.orientechnologies.orient.core.index.engine.IndexEngineValuesTransformer; import com.orientechnologies.orient.core.metadata.schema.OClass; import com.orientechnologies.orient.core.metadata.schema.OType; import com.orientechnologies.orient.core.record.impl.ODocument; @@ -112,27 +115,10 @@ public void delete(OAtomicOperation atomicOperation) { } @Override - public void load( - String indexName, - OBinarySerializer valueSerializer, - boolean isAutomatic, - OBinarySerializer keySerializer, - OType[] keyTypes, - boolean nullPointerSupport, - int keySize, - Map engineProperties, - OEncryption encryption) { - if (delegate != null) - delegate.load( - indexName, - valueSerializer, - isAutomatic, - keySerializer, - keyTypes, - nullPointerSupport, - keySize, - engineProperties, - encryption); + public void load(IndexEngineData data) { + if (delegate != null) { + delegate.load(data); + } } @Override @@ -182,7 +168,10 @@ public void update( @Override public boolean validatedPut( - OAtomicOperation atomicOperation, Object key, ORID value, Validator validator) { + OAtomicOperation atomicOperation, + Object key, + ORID value, + IndexEngineValidator validator) { try { return delegate.validatedPut(atomicOperation, key, value, validator); } catch (IOException e) { @@ -199,30 +188,36 @@ public Stream> iterateEntriesBetween( Object rangeTo, boolean toInclusive, boolean ascSortOrder, - ValuesTransformer transformer) { + IndexEngineValuesTransformer transformer) { return delegate.iterateEntriesBetween( rangeFrom, fromInclusive, rangeTo, toInclusive, ascSortOrder, transformer); } @Override public Stream> iterateEntriesMajor( - Object fromKey, boolean isInclusive, boolean ascSortOrder, ValuesTransformer transformer) { + Object fromKey, + boolean isInclusive, + boolean ascSortOrder, + IndexEngineValuesTransformer transformer) { return delegate.iterateEntriesMajor(fromKey, isInclusive, ascSortOrder, transformer); } @Override public Stream> iterateEntriesMinor( - Object toKey, boolean isInclusive, boolean ascSortOrder, ValuesTransformer transformer) { + Object toKey, + boolean isInclusive, + boolean ascSortOrder, + IndexEngineValuesTransformer transformer) { return delegate.iterateEntriesMinor(toKey, isInclusive, ascSortOrder, transformer); } @Override - public Stream> stream(ValuesTransformer valuesTransformer) { + public Stream> stream(IndexEngineValuesTransformer valuesTransformer) { return delegate.stream(valuesTransformer); } @Override - public Stream> descStream(ValuesTransformer valuesTransformer) { + public Stream> descStream(IndexEngineValuesTransformer valuesTransformer) { return delegate.descStream(valuesTransformer); } @@ -232,7 +227,7 @@ public Stream keyStream() { } @Override - public long size(ValuesTransformer transformer) { + public long size(IndexEngineValuesTransformer transformer) { return delegate.size(transformer); } diff --git a/lucene/src/test/java/com/orientechnologies/lucene/test/LuceneCreateJavaApiTest.java b/lucene/src/test/java/com/orientechnologies/lucene/test/LuceneCreateJavaApiTest.java index 0d3170c1594..c2b00e7c822 100755 --- a/lucene/src/test/java/com/orientechnologies/lucene/test/LuceneCreateJavaApiTest.java +++ b/lucene/src/test/java/com/orientechnologies/lucene/test/LuceneCreateJavaApiTest.java @@ -22,6 +22,7 @@ import com.orientechnologies.orient.core.db.record.OIdentifiable; import com.orientechnologies.orient.core.index.OIndex; +import com.orientechnologies.orient.core.index.OIndexInternal; import com.orientechnologies.orient.core.metadata.schema.OClass; import com.orientechnologies.orient.core.metadata.schema.OSchema; import com.orientechnologies.orient.core.metadata.schema.OType; @@ -208,7 +209,8 @@ private List queryIndexEmbeddedMapClass(final String searchTerm, final int ex private void checkCreatedEmbeddedMapIndex(final OClass clazz, final String expectedAlgorithm) { final OIndex index = clazz.getIndexes().iterator().next(); - System.out.println("key-name: " + index.getIndexId() + "-" + index.getName()); + System.out.println( + "key-name: " + ((OIndexInternal) index).getIndexId() + "-" + index.getName()); Assert.assertEquals("index algorithm", expectedAlgorithm, index.getAlgorithm()); Assert.assertEquals("index type", "FULLTEXT", index.getType());