use of com.orientechnologies.orient.core.index.OIndexTxAwareMultiValue in project orientdb by orientechnologies.
the class OrientIndex method create.
private void create(final String indexName, final Class<? extends Element> indexClass, OType iKeyType) {
this.indexClass = indexClass;
if (iKeyType == null)
iKeyType = OType.STRING;
final OIndexFactory factory = OIndexes.getFactory(OClass.INDEX_TYPE.DICTIONARY.toString(), null);
this.recordKeyValueIndex = new OIndexTxAwareOneValue(graph.getRawGraph(), (OIndex<OIdentifiable>) graph.getRawGraph().getMetadata().getIndexManager().createIndex("__@recordmap@___" + indexName, OClass.INDEX_TYPE.DICTIONARY.toString(), new OSimpleKeyIndexDefinition(factory.getLastVersion(), OType.LINK, OType.STRING), null, null, null));
final String className;
if (Vertex.class.isAssignableFrom(indexClass))
className = VERTEX;
else if (Edge.class.isAssignableFrom(indexClass))
className = EDGE;
else
className = indexClass.getName();
final ODocument metadata = new ODocument();
metadata.field(CONFIG_CLASSNAME, className);
metadata.field(CONFIG_RECORD_MAP_NAME, recordKeyValueIndex.getName());
final OIndexFactory nuFactory = OIndexes.getFactory(OClass.INDEX_TYPE.NOTUNIQUE.toString(), null);
// CREATE THE MAP
this.underlying = new OIndexTxAwareMultiValue(graph.getRawGraph(), (OIndex<Set<OIdentifiable>>) graph.getRawGraph().getMetadata().getIndexManager().createIndex(indexName, OClass.INDEX_TYPE.NOTUNIQUE.toString(), new OSimpleKeyIndexDefinition(nuFactory.getLastVersion(), iKeyType), null, null, metadata));
}
use of com.orientechnologies.orient.core.index.OIndexTxAwareMultiValue in project orientdb by orientechnologies.
the class IndexTxAwareMultiValueGetValuesTest method testRemove.
@Test
public void testRemove() {
database.getMetadata().getIndexManager().reload();
database.begin();
final OIndex<?> index = database.getMetadata().getIndexManager().getIndex("idxTxAwareMultiValueGetValuesTest");
Assert.assertTrue(index instanceof OIndexTxAwareMultiValue);
final int clusterId = database.getDefaultClusterId();
final List<Long> positions = getValidPositions(clusterId);
index.put(1, new ORecordId(clusterId, positions.get(0)));
index.put(1, new ORecordId(clusterId, positions.get(1)));
index.put(2, new ORecordId(clusterId, positions.get(2)));
database.commit();
Assert.assertNull(database.getTransaction().getIndexChanges("idxTxAwareMultiValueGetValuesTest"));
Set<OIdentifiable> resultOne = new HashSet<OIdentifiable>();
OIndexCursor cursor = index.iterateEntries(Arrays.asList(1, 2), true);
cursorToSet(cursor, resultOne);
Assert.assertEquals(resultOne.size(), 3);
database.begin();
index.remove(1);
Assert.assertNotNull(database.getTransaction().getIndexChanges("idxTxAwareMultiValueGetValuesTest"));
Set<OIdentifiable> resultTwo = new HashSet<OIdentifiable>();
cursor = index.iterateEntries(Arrays.asList(1, 2), true);
cursorToSet(cursor, resultTwo);
Assert.assertEquals(resultTwo.size(), 1);
database.rollback();
Assert.assertNull(database.getTransaction().getIndexChanges("idxTxAwareMultiValueGetValuesTest"));
Set<OIdentifiable> resultThree = new HashSet<OIdentifiable>();
cursor = index.iterateEntries(Arrays.asList(1, 2), true);
cursorToSet(cursor, resultThree);
Assert.assertEquals(resultThree.size(), 3);
}
use of com.orientechnologies.orient.core.index.OIndexTxAwareMultiValue in project orientdb by orientechnologies.
the class IndexTxAwareMultiValueGetValuesTest method testPutAfterRemove.
@Test
public void testPutAfterRemove() {
database.getMetadata().getIndexManager().reload();
database.begin();
final OIndex<?> index = database.getMetadata().getIndexManager().getIndex("idxTxAwareMultiValueGetValuesTest");
Assert.assertTrue(index instanceof OIndexTxAwareMultiValue);
final int clusterId = database.getDefaultClusterId();
final List<Long> positions = getValidPositions(clusterId);
index.put(1, new ORecordId(clusterId, positions.get(1)));
index.put(2, new ORecordId(clusterId, positions.get(2)));
index.remove(1, new ORecordId(clusterId, positions.get(1)));
index.put(1, new ORecordId(clusterId, positions.get(1)));
Assert.assertNotNull(database.getTransaction().getIndexChanges("idxTxAwareMultiValueGetValuesTest"));
Set<OIdentifiable> result = new HashSet<OIdentifiable>();
OIndexCursor cursor = index.iterateEntries(Arrays.asList(1, 2), true);
cursorToSet(cursor, result);
Assert.assertEquals(result.size(), 2);
database.commit();
cursor = index.iterateEntries(Arrays.asList(1, 2), true);
cursorToSet(cursor, result);
Assert.assertEquals(result.size(), 2);
}
use of com.orientechnologies.orient.core.index.OIndexTxAwareMultiValue in project orientdb by orientechnologies.
the class IndexTxAwareMultiValueGetEntriesTest method testPutAfterTransaction.
@Test
public void testPutAfterTransaction() {
database.begin();
final OIndex<?> index = database.getMetadata().getIndexManager().getIndex("idxTxAwareMultiValueGetEntriesTest");
Assert.assertTrue(index instanceof OIndexTxAwareMultiValue);
final int clusterId = database.getDefaultClusterId();
List<Long> positions = getValidPositions(clusterId);
index.put(1, new ORecordId(clusterId, positions.get(1)));
index.put(2, new ORecordId(clusterId, positions.get(2)));
Assert.assertNotNull(database.getTransaction().getIndexChanges("idxTxAwareMultiValueGetEntriesTest"));
Set<OIdentifiable> result = new HashSet<OIdentifiable>();
OIndexCursor cursor = index.iterateEntries(Arrays.asList(1, 2), true);
cursorToSet(cursor, result);
Assert.assertEquals(result.size(), 2);
database.commit();
index.put(1, new ORecordId(clusterId, positions.get(3)));
cursor = index.iterateEntries(Arrays.asList(1, 2), true);
cursorToSet(cursor, result);
Assert.assertEquals(result.size(), 3);
}
use of com.orientechnologies.orient.core.index.OIndexTxAwareMultiValue in project orientdb by orientechnologies.
the class IndexTxAwareMultiValueGetEntriesTest method testPutAfterRemove.
@Test
public void testPutAfterRemove() {
database.begin();
final OIndex<?> index = database.getMetadata().getIndexManager().getIndex("idxTxAwareMultiValueGetEntriesTest");
Assert.assertTrue(index instanceof OIndexTxAwareMultiValue);
final int clusterId = database.getDefaultClusterId();
List<Long> positions = getValidPositions(clusterId);
index.put(1, new ORecordId(clusterId, positions.get(1)));
index.put(2, new ORecordId(clusterId, positions.get(2)));
index.remove(1, new ORecordId(clusterId, positions.get(1)));
index.put(1, new ORecordId(clusterId, positions.get(1)));
Assert.assertNotNull(database.getTransaction().getIndexChanges("idxTxAwareMultiValueGetEntriesTest"));
Set<OIdentifiable> result = new HashSet<OIdentifiable>();
OIndexCursor cursor = index.iterateEntries(Arrays.asList(1, 2), true);
cursorToSet(cursor, result);
Assert.assertEquals(result.size(), 2);
database.commit();
cursor = index.iterateEntries(Arrays.asList(1, 2), true);
cursorToSet(cursor, result);
Assert.assertEquals(result.size(), 2);
}
Aggregations