Search in sources :

Example 11 with Label

use of org.neo4j.graphdb.Label in project neo4j by neo4j.

the class LabelMutation method perform.

@Override
public void perform(long nodeId, String value) {
    Node node = db.getNodeById(nodeId);
    Label label = Label.label(value);
    if (node.hasLabel(label)) {
        node.removeLabel(label);
    } else {
        node.addLabel(label);
    }
}
Also used : Node(org.neo4j.graphdb.Node) Label(org.neo4j.graphdb.Label)

Example 12 with Label

use of org.neo4j.graphdb.Label in project neo4j by neo4j.

the class IdReuseTest method sequentialOperationRelationshipIdReuse.

@Test
public void sequentialOperationRelationshipIdReuse() {
    Label marker = Label.label("marker");
    long relationship1 = createRelationship(marker);
    long relationship2 = createRelationship(marker);
    long relationship3 = createRelationship(marker);
    assertEquals("Ids should be sequential", relationship1 + 1, relationship2);
    assertEquals("Ids should be sequential", relationship2 + 1, relationship3);
    final IdController idMaintenanceController = getIdMaintenanceController();
    deleteRelationshipByLabelAndRelationshipType(marker);
    idMaintenanceController.maintenance();
    assertEquals("Relationships have reused id", relationship1, createRelationship(marker));
    assertEquals("Relationships have reused id", relationship2, createRelationship(marker));
    assertEquals("Relationships have reused id", relationship3, createRelationship(marker));
}
Also used : Label(org.neo4j.graphdb.Label) IdController(org.neo4j.kernel.impl.storageengine.impl.recordstorage.id.IdController) Test(org.junit.Test)

Example 13 with Label

use of org.neo4j.graphdb.Label in project neo4j by neo4j.

the class IdReuseTest method relationshipIdReusableOnlyAfterTransactionFinish.

@Test
public void relationshipIdReusableOnlyAfterTransactionFinish() {
    Label testLabel = Label.label("testLabel");
    long relationshipId = createRelationship(testLabel);
    final IdController idMaintenanceController = getIdMaintenanceController();
    try (Transaction transaction = dbRule.beginTx();
        ResourceIterator<Node> nodes = dbRule.findNodes(testLabel)) {
        List<Node> nodeList = Iterators.asList(nodes);
        for (Node node : nodeList) {
            Iterable<Relationship> relationships = node.getRelationships(TestRelationshipType.MARKER);
            for (Relationship relationship : relationships) {
                relationship.delete();
            }
        }
        idMaintenanceController.maintenance();
        Node node1 = dbRule.createNode(testLabel);
        Node node2 = dbRule.createNode(testLabel);
        Relationship relationshipTo = node1.createRelationshipTo(node2, TestRelationshipType.MARKER);
        assertNotEquals("Relatioships should have different ids.", relationshipId, relationshipTo.getId());
        transaction.success();
    }
}
Also used : Transaction(org.neo4j.graphdb.Transaction) Node(org.neo4j.graphdb.Node) Relationship(org.neo4j.graphdb.Relationship) Label(org.neo4j.graphdb.Label) IdController(org.neo4j.kernel.impl.storageengine.impl.recordstorage.id.IdController) Test(org.junit.Test)

Example 14 with Label

use of org.neo4j.graphdb.Label in project neo4j by neo4j.

the class ConstraintIndexConcurrencyTest method shouldNotAllowConcurrentViolationOfConstraint.

@Test
public void shouldNotAllowConcurrentViolationOfConstraint() throws Exception {
    // Given
    GraphDatabaseAPI graphDb = db.getGraphDatabaseAPI();
    Supplier<Statement> statementSupplier = graphDb.getDependencyResolver().resolveDependency(ThreadToStatementContextBridge.class);
    Label label = label("Foo");
    String propertyKey = "bar";
    String conflictingValue = "baz";
    // a constraint
    try (Transaction tx = graphDb.beginTx()) {
        graphDb.schema().constraintFor(label).assertPropertyIsUnique(propertyKey).create();
        tx.success();
    }
    // When
    try (Transaction tx = graphDb.beginTx()) {
        // create a statement and perform a lookup
        Statement statement = statementSupplier.get();
        int labelId = statement.readOperations().labelGetForName(label.name());
        int propertyKeyId = statement.readOperations().propertyKeyGetForName(propertyKey);
        NewIndexDescriptor index = NewIndexDescriptorFactory.uniqueForLabel(labelId, propertyKeyId);
        statement.readOperations().indexQuery(index, IndexQuery.exact(index.schema().getPropertyId(), "The value is irrelevant, we just want to perform some sort of lookup against this index"));
        // then let another thread come in and create a node
        threads.execute(db -> {
            try (Transaction transaction = db.beginTx()) {
                db.createNode(label).setProperty(propertyKey, conflictingValue);
                transaction.success();
            }
            return null;
        }, graphDb).get();
        // before we create a node with the same property ourselves - using the same statement that we have
        // already used for lookup against that very same index
        long node = statement.dataWriteOperations().nodeCreate();
        statement.dataWriteOperations().nodeAddLabel(node, labelId);
        try {
            statement.dataWriteOperations().nodeSetProperty(node, property(propertyKeyId, conflictingValue));
            fail("exception expected");
        }// Then
         catch (UniquePropertyValueValidationException e) {
            assertEquals(ConstraintDescriptorFactory.uniqueForLabel(labelId, propertyKeyId), e.constraint());
            IndexEntryConflictException conflict = Iterators.single(e.conflicts().iterator());
            assertEquals(conflictingValue, conflict.getSinglePropertyValue());
        }
        tx.success();
    }
}
Also used : ImpermanentDatabaseRule(org.neo4j.test.rule.ImpermanentDatabaseRule) Label(org.neo4j.graphdb.Label) IndexQuery(org.neo4j.kernel.api.schema_new.IndexQuery) ThreadToStatementContextBridge(org.neo4j.kernel.impl.core.ThreadToStatementContextBridge) Iterators(org.neo4j.helpers.collection.Iterators) NewIndexDescriptorFactory(org.neo4j.kernel.api.schema_new.index.NewIndexDescriptorFactory) Test(org.junit.Test) Label.label(org.neo4j.graphdb.Label.label) Statement(org.neo4j.kernel.api.Statement) NewIndexDescriptor(org.neo4j.kernel.api.schema_new.index.NewIndexDescriptor) Property.property(org.neo4j.kernel.api.properties.Property.property) Supplier(java.util.function.Supplier) DatabaseRule(org.neo4j.test.rule.DatabaseRule) GraphDatabaseAPI(org.neo4j.kernel.internal.GraphDatabaseAPI) Rule(org.junit.Rule) IndexEntryConflictException(org.neo4j.kernel.api.exceptions.index.IndexEntryConflictException) ConstraintDescriptorFactory(org.neo4j.kernel.api.schema_new.constaints.ConstraintDescriptorFactory) UniquePropertyValueValidationException(org.neo4j.kernel.api.exceptions.schema.UniquePropertyValueValidationException) ThreadingRule(org.neo4j.test.rule.concurrent.ThreadingRule) Assert.fail(org.junit.Assert.fail) Transaction(org.neo4j.graphdb.Transaction) Assert.assertEquals(org.junit.Assert.assertEquals) UniquePropertyValueValidationException(org.neo4j.kernel.api.exceptions.schema.UniquePropertyValueValidationException) NewIndexDescriptor(org.neo4j.kernel.api.schema_new.index.NewIndexDescriptor) GraphDatabaseAPI(org.neo4j.kernel.internal.GraphDatabaseAPI) Transaction(org.neo4j.graphdb.Transaction) Statement(org.neo4j.kernel.api.Statement) Label(org.neo4j.graphdb.Label) IndexEntryConflictException(org.neo4j.kernel.api.exceptions.index.IndexEntryConflictException) Test(org.junit.Test)

Example 15 with Label

use of org.neo4j.graphdb.Label in project neo4j by neo4j.

the class DatabaseActions method createNode.

// Nodes
public NodeRepresentation createNode(Map<String, Object> properties, Label... labels) throws PropertyValueException {
    Node node = graphDb.createNode();
    propertySetter.setProperties(node, properties);
    if (labels != null) {
        for (Label label : labels) {
            node.addLabel(label);
        }
    }
    return new NodeRepresentation(node);
}
Also used : ScoredNodeRepresentation(org.neo4j.server.rest.repr.ScoredNodeRepresentation) NodeRepresentation(org.neo4j.server.rest.repr.NodeRepresentation) Node(org.neo4j.graphdb.Node) Label(org.neo4j.graphdb.Label)

Aggregations

Label (org.neo4j.graphdb.Label)82 Test (org.junit.Test)55 Node (org.neo4j.graphdb.Node)48 Transaction (org.neo4j.graphdb.Transaction)44 GraphDatabaseService (org.neo4j.graphdb.GraphDatabaseService)12 RelationshipType (org.neo4j.graphdb.RelationshipType)8 DependencyResolver (org.neo4j.graphdb.DependencyResolver)6 DynamicLabel (org.neo4j.graphdb.DynamicLabel)6 KernelTransaction (org.neo4j.kernel.api.KernelTransaction)6 Statement (org.neo4j.kernel.api.Statement)6 ArrayList (java.util.ArrayList)5 ConstraintViolationException (org.neo4j.graphdb.ConstraintViolationException)5 Relationship (org.neo4j.graphdb.Relationship)5 GraphDatabaseAPI (org.neo4j.kernel.internal.GraphDatabaseAPI)5 TestGraphDatabaseFactory (org.neo4j.test.TestGraphDatabaseFactory)5 File (java.io.File)4 HashSet (java.util.HashSet)4 CoreMatchers.containsString (org.hamcrest.CoreMatchers.containsString)4 Matchers.containsString (org.hamcrest.Matchers.containsString)4 TransactionFailureException (org.neo4j.graphdb.TransactionFailureException)4