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;
}
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;
}
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;
}
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);
}
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();
}
}
Aggregations