use of org.neo4j.internal.schema.SchemaDescriptor 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.SchemaDescriptor 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.SchemaDescriptor 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);
}
use of org.neo4j.internal.schema.SchemaDescriptor in project neo4j by neo4j.
the class PlainOperationsTest method indexedBackedConstraintCreateMustThrowOnAnyTokenSchemas.
@Test
void indexedBackedConstraintCreateMustThrowOnAnyTokenSchemas() throws Exception {
// given
SchemaDescriptor schema = SchemaDescriptor.forAnyEntityTokens(NODE);
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("any token schema");
}
use of org.neo4j.internal.schema.SchemaDescriptor in project neo4j by neo4j.
the class BuiltInProcedures method asIndexDetails.
private static IndexDetailResult asIndexDetails(TokenNameLookup tokenLookup, SchemaReadCore schemaRead, IndexDescriptor index) {
long id = index.getId();
String name = index.getName();
IndexStatus status = getIndexStatus(schemaRead, index);
String uniqueness = IndexUniqueness.getUniquenessOf(index);
String type = index.getIndexType().name();
String entityType = index.schema().entityType().name();
SchemaDescriptor schema = index.schema();
List<String> labelsOrTypes = Arrays.asList(tokenLookup.entityTokensGetNames(schema.entityType(), schema.getEntityTokenIds()));
List<String> properties = propertyNames(tokenLookup, index);
String provider = index.getIndexProvider().name();
Map<String, Object> indexConfig = asObjectMap(index.getIndexConfig().asMap());
return new IndexDetailResult(id, name, status.state, status.populationProgress, uniqueness, type, entityType, labelsOrTypes, properties, provider, indexConfig, status.failureMessage);
}
Aggregations