use of org.neo4j.exceptions.KernelException in project neo4j by neo4j.
the class TransactionImpl method relationshipsByTypeAndProperty.
private ResourceIterator<Relationship> relationshipsByTypeAndProperty(KernelTransaction transaction, int typeId, PropertyIndexQuery query) {
Read read = transaction.dataRead();
if (query.propertyKeyId() == TokenRead.NO_TOKEN || typeId == TokenRead.NO_TOKEN) {
return emptyResourceIterator();
}
var index = findUsableMatchingIndex(transaction, SchemaDescriptor.forRelType(typeId, query.propertyKeyId()));
if (index != IndexDescriptor.NO_INDEX) {
// Ha! We found an index - let's use it to find matching relationships
try {
var cursor = transaction.cursors().allocateRelationshipValueIndexCursor(transaction.cursorContext(), transaction.memoryTracker());
IndexReadSession indexSession = read.indexReadSession(index);
read.relationshipIndexSeek(indexSession, cursor, unconstrained(), query);
return new CursorIterator<>(cursor, RelationshipIndexCursor::relationshipReference, c -> newRelationshipEntity(c.relationshipReference()), coreApiResourceTracker);
} catch (KernelException e) {
// weird at this point but ignore and fallback to a type scan
}
}
return getRelationshipsByTypeAndPropertyWithoutPropertyIndex(transaction, typeId, query);
}
use of org.neo4j.exceptions.KernelException in project neo4j by neo4j.
the class TransactionImpl method getRelationshipsByTypeAndPropertyWithoutPropertyIndex.
private ResourceIterator<Relationship> getRelationshipsByTypeAndPropertyWithoutPropertyIndex(KernelTransaction ktx, int typeId, PropertyIndexQuery... queries) {
var index = findUsableMatchingIndex(ktx, SchemaDescriptor.forAnyEntityTokens(EntityType.RELATIONSHIP));
if (index != IndexDescriptor.NO_INDEX) {
try {
var session = ktx.dataRead().tokenReadSession(index);
var cursor = ktx.cursors().allocateRelationshipTypeIndexCursor(ktx.cursorContext());
ktx.dataRead().relationshipTypeScan(session, cursor, unconstrained(), new TokenPredicate(typeId));
var relationshipScanCursor = ktx.cursors().allocateRelationshipScanCursor(ktx.cursorContext());
var propertyCursor = ktx.cursors().allocatePropertyCursor(ktx.cursorContext(), ktx.memoryTracker());
return new RelationshipTypePropertyIterator(ktx.dataRead(), cursor, relationshipScanCursor, propertyCursor, c -> newRelationshipEntity(c.relationshipReference()), coreApiResourceTracker, queries);
} catch (KernelException e) {
// ignore, fallback to all node scan
}
}
return getRelationshipsByTypeAndPropertyViaAllRelsScan(ktx, typeId, queries);
}
use of org.neo4j.exceptions.KernelException in project neo4j by neo4j.
the class TransactionImpl method createNode.
@Override
public Node createNode(Label... labels) {
var ktx = kernelTransaction();
try {
TokenWrite tokenWrite = ktx.tokenWrite();
int[] labelIds = new int[labels.length];
String[] labelNames = new String[labels.length];
for (int i = 0; i < labelNames.length; i++) {
labelNames[i] = labels[i].name();
}
tokenWrite.labelGetOrCreateForNames(labelNames, labelIds);
Write write = ktx.dataWrite();
long nodeId = write.nodeCreateWithLabels(labelIds);
return newNodeEntity(nodeId);
} catch (ConstraintValidationException e) {
throw new ConstraintViolationException("Unable to add label.", e);
} catch (SchemaKernelException e) {
throw new IllegalArgumentException(e);
} catch (KernelException e) {
throw new ConstraintViolationException(e.getMessage(), e);
}
}
use of org.neo4j.exceptions.KernelException in project neo4j by neo4j.
the class TransactionImpl method allRelationshipsWithType.
private ResourceIterator<Relationship> allRelationshipsWithType(final RelationshipType type) {
KernelTransaction ktx = kernelTransaction();
int typeId = ktx.tokenRead().relationshipType(type.name());
if (typeId == TokenRead.NO_TOKEN) {
return emptyResourceIterator();
}
var index = findUsableMatchingIndex(ktx, SchemaDescriptor.forAnyEntityTokens(EntityType.RELATIONSHIP));
if (index != IndexDescriptor.NO_INDEX) {
try {
var session = ktx.dataRead().tokenReadSession(index);
var cursor = ktx.cursors().allocateRelationshipTypeIndexCursor(ktx.cursorContext());
ktx.dataRead().relationshipTypeScan(session, cursor, unconstrained(), new TokenPredicate(typeId));
return new CursorIterator<>(cursor, RelationshipIndexCursor::relationshipReference, c -> newRelationshipEntity(c.relationshipReference()), coreApiResourceTracker);
} catch (KernelException e) {
// ignore, fallback to all node scan
}
}
return allRelationshipsByTypeWithoutIndex(ktx, typeId);
}
use of org.neo4j.exceptions.KernelException in project neo4j by neo4j.
the class TransactionImpl method relationshipsByTypeAndProperties.
private ResourceIterator<Relationship> relationshipsByTypeAndProperties(KernelTransaction tx, int typeId, PropertyIndexQuery.ExactPredicate... queries) {
Read read = tx.dataRead();
if (isInvalidQuery(typeId, queries)) {
return emptyResourceIterator();
}
int[] propertyIds = getPropertyIds(queries);
IndexDescriptor index = findUsableMatchingCompositeIndex(tx, SchemaDescriptor.forRelType(typeId, propertyIds), propertyIds, () -> tx.schemaRead().indexesGetForRelationshipType(typeId));
if (index != IndexDescriptor.NO_INDEX) {
try {
RelationshipValueIndexCursor cursor = tx.cursors().allocateRelationshipValueIndexCursor(tx.cursorContext(), tx.memoryTracker());
IndexReadSession indexSession = read.indexReadSession(index);
read.relationshipIndexSeek(indexSession, cursor, unconstrained(), getReorderedIndexQueries(index.schema().getPropertyIds(), queries));
return new CursorIterator<>(cursor, RelationshipIndexCursor::relationshipReference, c -> newRelationshipEntity(c.relationshipReference()), coreApiResourceTracker);
} catch (KernelException e) {
// weird at this point but ignore and fallback to a label scan
}
}
return getRelationshipsByTypeAndPropertyWithoutPropertyIndex(tx, typeId, queries);
}
Aggregations