use of org.neo4j.internal.schema.IndexDescriptor in project neo4j by neo4j.
the class NodeLabelIndexOrderTest method tokenScan.
@Override
protected void tokenScan(IndexOrder indexOrder, KernelTransaction tx, int label, NodeLabelIndexCursor cursor) throws KernelException {
IndexDescriptor index = tx.schemaRead().index(SchemaDescriptor.forAnyEntityTokens(EntityType.NODE)).next();
TokenReadSession tokenReadSession = tx.dataRead().tokenReadSession(index);
tx.dataRead().nodeLabelScan(tokenReadSession, cursor, IndexQueryConstraints.ordered(indexOrder), new TokenPredicate(label));
}
use of org.neo4j.internal.schema.IndexDescriptor in project neo4j by neo4j.
the class KernelReadTracerTxStateTest method shouldTraceRelationshipIndexCursor.
@Test
void shouldTraceRelationshipIndexCursor() throws KernelException, TimeoutException {
// given
int connection;
int name;
String indexName = "myIndex";
IndexDescriptor index;
try (KernelTransaction tx = beginTransaction()) {
connection = tx.tokenWrite().relationshipTypeGetOrCreateForName("Connection");
name = tx.tokenWrite().propertyKeyGetOrCreateForName("name");
tx.commit();
}
try (KernelTransaction tx = beginTransaction()) {
SchemaDescriptor schema = SchemaDescriptor.fulltext(EntityType.RELATIONSHIP, array(connection), array(name));
IndexPrototype prototype = IndexPrototype.forSchema(schema, DESCRIPTOR).withName(indexName).withIndexType(IndexType.FULLTEXT);
index = tx.schemaWrite().indexCreate(prototype);
tx.commit();
}
try (KernelTransaction tx = beginTransaction()) {
Predicates.awaitEx(() -> tx.schemaRead().indexGetState(index) == ONLINE, 1, MINUTES);
long n1 = tx.dataWrite().nodeCreate();
long n2 = tx.dataWrite().nodeCreate();
long r = tx.dataWrite().relationshipCreate(n1, connection, n2);
tx.dataWrite().relationshipSetProperty(r, name, Values.stringValue("transformational"));
tx.commit();
}
// when
TestKernelReadTracer tracer = new TestKernelReadTracer();
try (KernelTransaction tx = beginTransaction();
RelationshipValueIndexCursor cursor = tx.cursors().allocateRelationshipValueIndexCursor(NULL, tx.memoryTracker())) {
cursor.setTracer(tracer);
IndexReadSession indexReadSession = tx.dataRead().indexReadSession(index);
tx.dataRead().relationshipIndexSeek(indexReadSession, cursor, unconstrained(), PropertyIndexQuery.fulltextSearch("transformational"));
assertTrue(cursor.next());
tracer.assertEvents(OnIndexSeek(), OnRelationship(cursor.relationshipReference()));
assertFalse(cursor.next());
tracer.assertEvents();
}
}
use of org.neo4j.internal.schema.IndexDescriptor in project neo4j by neo4j.
the class PlainOperationsTest method indexedBackedConstraintCreateMustThrowOnIndexTypeFullText.
@Test
void indexedBackedConstraintCreateMustThrowOnIndexTypeFullText() throws Exception {
// given
IndexPrototype prototype = IndexPrototype.uniqueForSchema(schema).withName("constraint name").withIndexProvider(GenericNativeIndexProvider.DESCRIPTOR).withIndexType(IndexType.FULLTEXT);
IndexDescriptor constraintIndex = prototype.materialise(42);
when(constraintIndexCreator.createUniquenessConstraintIndex(any(), any(), eq(prototype))).thenReturn(constraintIndex);
IndexProxy indexProxy = mock(IndexProxy.class);
when(indexProxy.getDescriptor()).thenReturn(constraintIndex);
when(indexingService.getIndexProxy(constraintIndex)).thenReturn(indexProxy);
when(storageReader.constraintsGetForSchema(schema)).thenReturn(Collections.emptyIterator());
when(storageReader.indexGetForSchema(schema)).thenReturn(Collections.emptyIterator());
// when
var e = assertThrows(KernelException.class, () -> operations.uniquePropertyConstraintCreate(prototype));
assertThat(e.getUserMessage(new InMemoryTokens())).contains("FULLTEXT");
}
use of org.neo4j.internal.schema.IndexDescriptor in project neo4j by neo4j.
the class PlainOperationsTest method indexedBackedConstraintCreateMustThrowOnRelationshipSchemas.
@Test
void indexedBackedConstraintCreateMustThrowOnRelationshipSchemas() throws Exception {
// given
when(tokenHolders.relationshipTypeTokens().getTokenById(anyInt())).thenReturn(new NamedToken("RelType", 123));
when(tokenHolders.propertyKeyTokens().getTokenById(anyInt())).thenReturn(new NamedToken("prop", 456));
SchemaDescriptor schema = SchemaDescriptor.forRelType(this.schema.getEntityTokenIds()[0], this.schema.getPropertyIds());
IndexPrototype prototype = IndexPrototype.uniqueForSchema(schema).withName("constraint name").withIndexProvider(GenericNativeIndexProvider.DESCRIPTOR);
IndexDescriptor constraintIndex = prototype.materialise(42);
when(constraintIndexCreator.createUniquenessConstraintIndex(any(), any(), eq(prototype))).thenReturn(constraintIndex);
IndexProxy indexProxy = mock(IndexProxy.class);
when(indexProxy.getDescriptor()).thenReturn(constraintIndex);
when(indexingService.getIndexProxy(constraintIndex)).thenReturn(indexProxy);
when(storageReader.constraintsGetForSchema(schema)).thenReturn(Collections.emptyIterator());
when(storageReader.indexGetForSchema(schema)).thenReturn(Collections.emptyIterator());
// when
var e = assertThrows(KernelException.class, () -> operations.uniquePropertyConstraintCreate(prototype));
assertThat(e.getUserMessage(tokenHolders)).contains("relationship type schema");
}
use of org.neo4j.internal.schema.IndexDescriptor in project neo4j by neo4j.
the class PlainOperationsTest method shouldDropAllGeneralIndexesMatchingSchema.
@Test
void shouldDropAllGeneralIndexesMatchingSchema() throws Exception {
SchemaDescriptor schema = SchemaDescriptor.forLabel(0, 0);
SchemaDescriptor ftsSchema = SchemaDescriptor.fulltext(NODE, new int[] { 0 }, new int[] { 0 });
IndexDescriptor indexA = IndexPrototype.forSchema(schema).withName("a").materialise(0);
IndexDescriptor indexB = IndexPrototype.forSchema(ftsSchema).withName("b").withIndexType(IndexType.FULLTEXT).materialise(1);
IndexDescriptor indexC = IndexPrototype.forSchema(schema).withName("c").materialise(2);
// The full-text index would not actually ever match the given schema,
// but let's pretend in order to verify that we have safe-guards in place.
when(storageReader.indexGetForSchema(schema)).thenReturn(Iterators.iterator(indexA, indexB, indexC));
when(storageReader.indexExists(any(IndexDescriptor.class))).thenReturn(true);
// when
operations.indexDrop(schema);
// then
order.verify(locks).acquireExclusive(LockTracer.NONE, ResourceTypes.LABEL, 0);
order.verify(txState).indexDoDrop(indexA);
order.verify(txState).indexDoDrop(indexC);
verify(txState, never()).indexDoDrop(indexB);
}
Aggregations