Search in sources :

Example 11 with Schema

use of org.neo4j.graphdb.schema.Schema in project neo4j-apoc-procedures by neo4j-contrib.

the class NodesAndRelsSubGraph method getConstraints.

@Override
public Iterable<ConstraintDefinition> getConstraints() {
    Schema schema = db.schema();
    ArrayList<ConstraintDefinition> constraints = new ArrayList<>(labels.size() * 2);
    for (String label : labels) {
        Iterables.addAll(constraints, schema.getConstraints(Label.label(label)));
    }
    return constraints;
}
Also used : Schema(org.neo4j.graphdb.schema.Schema) ArrayList(java.util.ArrayList) ConstraintDefinition(org.neo4j.graphdb.schema.ConstraintDefinition)

Example 12 with Schema

use of org.neo4j.graphdb.schema.Schema in project neo4j-apoc-procedures by neo4j-contrib.

the class Schemas method assertConstraints.

public List<AssertSchemaResult> assertConstraints(Map<String, List<String>> constraints0, boolean dropExisting) throws ExecutionException, InterruptedException {
    Map<String, List<String>> constraints = copy(constraints0);
    List<AssertSchemaResult> result = new ArrayList<>(constraints.size());
    Schema schema = db.schema();
    for (ConstraintDefinition definition : schema.getConstraints()) {
        if (!definition.isConstraintType(ConstraintType.UNIQUENESS))
            continue;
        String label = definition.getLabel().name();
        String key = Iterables.single(definition.getPropertyKeys());
        AssertSchemaResult info = new AssertSchemaResult(label, key).unique();
        if (!constraints.containsKey(label) || !constraints.get(label).remove(key)) {
            if (dropExisting) {
                definition.drop();
                info.dropped();
            }
        }
        result.add(info);
    }
    for (Map.Entry<String, List<String>> constraint : constraints.entrySet()) {
        for (String key : constraint.getValue()) {
            schema.constraintFor(label(constraint.getKey())).assertPropertyIsUnique(key).create();
            result.add(new AssertSchemaResult(constraint.getKey(), key).unique().created());
        }
    }
    return result;
}
Also used : AssertSchemaResult(apoc.result.AssertSchemaResult) Schema(org.neo4j.graphdb.schema.Schema) ConstraintDefinition(org.neo4j.graphdb.schema.ConstraintDefinition)

Example 13 with Schema

use of org.neo4j.graphdb.schema.Schema in project neo4j-apoc-procedures by neo4j-contrib.

the class Schemas method assertIndexes.

public List<AssertSchemaResult> assertIndexes(Map<String, List<Object>> indexes0, boolean dropExisting) throws ExecutionException, InterruptedException, IllegalArgumentException {
    Schema schema = db.schema();
    Map<String, List<Object>> indexes = copyMapOfObjects(indexes0);
    List<AssertSchemaResult> result = new ArrayList<>(indexes.size());
    for (IndexDefinition definition : schema.getIndexes()) {
        if (definition.isConstraintIndex())
            continue;
        String label = definition.getLabel().name();
        List<String> keys = new ArrayList<>();
        definition.getPropertyKeys().forEach(keys::add);
        AssertSchemaResult info = new AssertSchemaResult(label, keys);
        if (indexes.containsKey(label)) {
            if (keys.size() > 1) {
                indexes.get(label).remove(keys);
            } else if (keys.size() == 1) {
                indexes.get(label).remove(keys.get(0));
            } else
                throw new IllegalArgumentException("Label given with no keys.");
        }
        if (dropExisting) {
            definition.drop();
            info.dropped();
        }
        result.add(info);
    }
    if (dropExisting)
        indexes = copyMapOfObjects(indexes0);
    for (Map.Entry<String, List<Object>> index : indexes.entrySet()) {
        for (Object key : index.getValue()) {
            if (key instanceof String) {
                result.add(createSinglePropertyIndex(schema, index.getKey(), (String) key));
            } else if (key instanceof List) {
                result.add(createCompoundIndex(index.getKey(), (List<String>) key));
            }
        }
    }
    return result;
}
Also used : AssertSchemaResult(apoc.result.AssertSchemaResult) Schema(org.neo4j.graphdb.schema.Schema) IndexDefinition(org.neo4j.graphdb.schema.IndexDefinition)

Example 14 with Schema

use of org.neo4j.graphdb.schema.Schema in project neo4j-apoc-procedures by neo4j-contrib.

the class Schemas method indexesAndConstraintsForNode.

/**
 * Collects indexes and constraints for nodes
 *
 * @return
 */
private Stream<IndexConstraintNodeInfo> indexesAndConstraintsForNode() {
    Schema schema = db.schema();
    // Indexes
    Stream<IndexConstraintNodeInfo> indexes = StreamSupport.stream(schema.getIndexes().spliterator(), false).filter(indexDefinition -> !indexDefinition.isConstraintIndex()).map(indexDefinition -> this.nodeInfoFromIndexDefinition(indexDefinition, schema));
    // Constraints
    Stream<IndexConstraintNodeInfo> constraints = StreamSupport.stream(schema.getConstraints().spliterator(), false).filter(constraintDefinition -> !constraintDefinition.isConstraintType(ConstraintType.RELATIONSHIP_PROPERTY_EXISTENCE)).map(this::nodeInfoFromConstraintDefinition);
    return Stream.concat(indexes, constraints);
}
Also used : AssertSchemaResult(apoc.result.AssertSchemaResult) ConstraintRelationshipInfo(apoc.result.ConstraintRelationshipInfo) java.util(java.util) Label(org.neo4j.graphdb.Label) org.neo4j.procedure(org.neo4j.procedure) Label.label(org.neo4j.graphdb.Label.label) IndexConstraintNodeInfo(apoc.result.IndexConstraintNodeInfo) StringUtils(org.apache.commons.lang3.StringUtils) Schema(org.neo4j.graphdb.schema.Schema) ExecutionException(java.util.concurrent.ExecutionException) ConstraintDefinition(org.neo4j.graphdb.schema.ConstraintDefinition) Iterables(org.neo4j.helpers.collection.Iterables) Stream(java.util.stream.Stream) GraphDatabaseService(org.neo4j.graphdb.GraphDatabaseService) ConstraintType(org.neo4j.graphdb.schema.ConstraintType) KernelTransaction(org.neo4j.kernel.api.KernelTransaction) RelationshipType(org.neo4j.graphdb.RelationshipType) StreamSupport(java.util.stream.StreamSupport) IndexDefinition(org.neo4j.graphdb.schema.IndexDefinition) Schema(org.neo4j.graphdb.schema.Schema) IndexConstraintNodeInfo(apoc.result.IndexConstraintNodeInfo)

Example 15 with Schema

use of org.neo4j.graphdb.schema.Schema in project neo4j by neo4j.

the class BatchInsertIndexTest method shouldThrowWhenPopulatingWithNonUniquePoints.

@ParameterizedTest
@EnumSource(SchemaIndex.class)
void shouldThrowWhenPopulatingWithNonUniquePoints(SchemaIndex schemaIndex) throws Exception {
    configure(schemaIndex);
    BatchInserter inserter = newBatchInserter();
    PointValue point = Values.pointValue(CoordinateReferenceSystem.WGS84, 0.0, 0.0);
    inserter.createNode(MapUtil.map("prop", point), LABEL_ONE);
    inserter.createNode(MapUtil.map("prop", point), LABEL_ONE);
    inserter.createDeferredConstraint(LABEL_ONE).assertPropertyIsUnique("prop").create();
    inserter.shutdown();
    GraphDatabaseService db = startGraphDatabaseService();
    try (Transaction tx = db.beginTx()) {
        assertThrows(IllegalStateException.class, () -> tx.schema().awaitIndexesOnline(10, TimeUnit.SECONDS));
    }
    try (Transaction tx = db.beginTx()) {
        var schema = tx.schema();
        Iterator<IndexDefinition> indexes = schema.getIndexes().iterator();
        assertTrue(indexes.hasNext());
        IndexDefinition index = indexes.next();
        Schema.IndexState indexState = schema.getIndexState(index);
        assertEquals(Schema.IndexState.FAILED, indexState);
        assertFalse(indexes.hasNext());
        tx.commit();
    }
}
Also used : BatchInserter(org.neo4j.batchinsert.BatchInserter) GraphDatabaseService(org.neo4j.graphdb.GraphDatabaseService) InternalTransaction(org.neo4j.kernel.impl.coreapi.InternalTransaction) Transaction(org.neo4j.graphdb.Transaction) KernelTransaction(org.neo4j.kernel.api.KernelTransaction) IndexDefinition(org.neo4j.graphdb.schema.IndexDefinition) PointValue(org.neo4j.values.storable.PointValue) Schema(org.neo4j.graphdb.schema.Schema) EnumSource(org.junit.jupiter.params.provider.EnumSource) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Aggregations

Schema (org.neo4j.graphdb.schema.Schema)19 IndexDefinition (org.neo4j.graphdb.schema.IndexDefinition)10 Transaction (org.neo4j.graphdb.Transaction)9 ConstraintDefinition (org.neo4j.graphdb.schema.ConstraintDefinition)5 ArrayList (java.util.ArrayList)4 GraphDatabaseService (org.neo4j.graphdb.GraphDatabaseService)4 Label (org.neo4j.graphdb.Label)4 AssertSchemaResult (apoc.result.AssertSchemaResult)3 Test (org.junit.Test)3 Test (org.junit.jupiter.api.Test)3 Node (org.neo4j.graphdb.Node)3 KernelTransaction (org.neo4j.kernel.api.KernelTransaction)3 ParameterizedTest (org.junit.jupiter.params.ParameterizedTest)2 ResourceIterator (org.neo4j.graphdb.ResourceIterator)2 InternalTransaction (org.neo4j.kernel.impl.coreapi.InternalTransaction)2 ConstraintRelationshipInfo (apoc.result.ConstraintRelationshipInfo)1 IndexConstraintNodeInfo (apoc.result.IndexConstraintNodeInfo)1 VirtualNode (apoc.result.VirtualNode)1 File (java.io.File)1 java.util (java.util)1