use of org.neo4j.internal.helpers.collection.Pair in project neo4j by neo4j.
the class AllNodesInStoreExistInLabelIndexTest method someData.
private List<Pair<Long, Label[]>> someData(int numberOfModifications) {
List<Pair<Long, Label[]>> existingNodes;
existingNodes = new ArrayList<>();
try (Transaction tx = db.beginTx()) {
randomModifications(tx, existingNodes, numberOfModifications);
tx.commit();
}
return existingNodes;
}
use of org.neo4j.internal.helpers.collection.Pair in project neo4j by neo4j.
the class IndexOrderTestBase method shouldNodeIndexScanInOrderPointsOnly.
@ParameterizedTest
@EnumSource(value = IndexOrder.class, names = { "ASCENDING", "DESCENDING" })
void shouldNodeIndexScanInOrderPointsOnly(IndexOrder indexOrder) throws Exception {
List<Pair<Long, Value>> expected = new ArrayList<>();
try (KernelTransaction tx = beginTransaction()) {
expected.add(entityWithProp(tx, pointValue(Cartesian, -500000, -500000)));
expected.add(entityWithProp(tx, pointValue(Cartesian, 500000, -500000)));
expected.add(entityWithProp(tx, pointValue(Cartesian, -500000, 500000)));
expected.add(entityWithProp(tx, pointValue(Cartesian, 500000, 500000)));
tx.commit();
}
createIndex();
// when
try (KernelTransaction tx = beginTransaction()) {
IndexReadSession index = tx.dataRead().indexReadSession(tx.schemaRead().indexGetForName(INDEX_NAME));
try (var cursor = getEntityValueIndexCursor(tx)) {
expected.add(entityWithProp(tx, pointValue(Cartesian, -400000, -400000)));
expected.add(entityWithProp(tx, pointValue(Cartesian, 400000, -400000)));
expected.add(entityWithProp(tx, pointValue(Cartesian, -400000, 400000)));
expected.add(entityWithProp(tx, pointValue(Cartesian, 400000, 400000)));
entityIndexScan(tx, index, cursor, constrained(indexOrder, true));
assertResultsInOrder(expected, cursor, indexOrder);
}
}
}
use of org.neo4j.internal.helpers.collection.Pair in project neo4j by neo4j.
the class IndexOrderTestBase method assertResultsInOrder.
protected void assertResultsInOrder(List<Pair<Long, Value>> expected, ENTITY_VALUE_INDEX_CURSOR cursor, IndexOrder indexOrder) {
Comparator<Pair<Long, Value>> comparator = indexOrder == IndexOrder.ASCENDING ? (a, b) -> Values.COMPARATOR.compare(a.other(), b.other()) : (a, b) -> Values.COMPARATOR.compare(b.other(), a.other());
expected.sort(comparator);
Iterator<Pair<Long, Value>> expectedRows = expected.iterator();
while (cursor.next() && expectedRows.hasNext()) {
Pair<Long, Value> expectedRow = expectedRows.next();
assertThat(entityReference(cursor)).as(expectedRow.other() + " == " + cursor.propertyValue(0)).isEqualTo(expectedRow.first());
for (int i = 0; i < cursor.numberOfProperties(); i++) {
Value value = cursor.propertyValue(i);
assertThat(value).isEqualTo(expectedRow.other());
}
}
assertFalse(expectedRows.hasNext());
assertFalse(cursor.next());
}
use of org.neo4j.internal.helpers.collection.Pair in project neo4j by neo4j.
the class IndexOrderTestBase method shouldNodeCompositeIndexScanInOrderWithPointsAndSingleNodeAfterwards.
@ParameterizedTest
@EnumSource(value = IndexOrder.class, names = { "ASCENDING", "DESCENDING" })
void shouldNodeCompositeIndexScanInOrderWithPointsAndSingleNodeAfterwards(IndexOrder indexOrder) throws Exception {
List<Pair<Long, Value[]>> expected = new ArrayList<>();
try (KernelTransaction tx = beginTransaction()) {
expected.add(entityWithTwoProps(tx, new String[] { "a" }, new String[] { "b" }));
expected.add(entityWithTwoProps(tx, pointValue(Cartesian, -500000, -500000), "a"));
expected.add(entityWithTwoProps(tx, pointValue(Cartesian, 500000, -500000), "a"));
expected.add(entityWithTwoProps(tx, pointValue(Cartesian, -500000, 500000), "a"));
expected.add(entityWithTwoProps(tx, pointValue(Cartesian, 500000, 500000), "a"));
expected.add(entityWithTwoProps(tx, pointValue(Cartesian, -500000, -500000), "b"));
expected.add(entityWithTwoProps(tx, pointValue(Cartesian, 500000, -500000), "b"));
expected.add(entityWithTwoProps(tx, pointValue(Cartesian, -500000, 500000), "b"));
expected.add(entityWithTwoProps(tx, pointValue(Cartesian, 500000, 500000), "b"));
expected.add(entityWithTwoProps(tx, "a", pointValue(Cartesian, 500000, 500000)));
expected.add(entityWithTwoProps(tx, "b", new String[] { "b" }));
expected.add(entityWithTwoProps(tx, "b", pointValue(Cartesian, -500000, -500000)));
expected.add(entityWithTwoProps(tx, "b", pointValue(Cartesian, 500000, -500000)));
expected.add(entityWithTwoProps(tx, "b", pointValue(Cartesian, -500000, 500000)));
expected.add(entityWithTwoProps(tx, "b", pointValue(Cartesian, 500000, 500000)));
expected.add(entityWithTwoProps(tx, "c", new String[] { "b" }));
tx.commit();
}
createCompositeIndex();
// when
try (KernelTransaction tx = beginTransaction()) {
IndexReadSession index = tx.dataRead().indexReadSession(tx.schemaRead().indexGetForName(INDEX_NAME));
try (var cursor = getEntityValueIndexCursor(tx)) {
entityIndexScan(tx, index, cursor, constrained(indexOrder, true));
assertCompositeResultsInOrder(expected, cursor, indexOrder);
}
}
}
use of org.neo4j.internal.helpers.collection.Pair in project neo4j by neo4j.
the class IndexOrderTestBase method shouldRangeScanInOrderWithTxState.
@ParameterizedTest
@EnumSource(value = IndexOrder.class, names = { "ASCENDING", "DESCENDING" })
void shouldRangeScanInOrderWithTxState(IndexOrder indexOrder) throws Exception {
List<Pair<Long, Value>> expected = new ArrayList<>();
try (KernelTransaction tx = beginTransaction()) {
expected.add(entityWithProp(tx, "hello"));
entityWithProp(tx, "bellow");
expected.add(entityWithProp(tx, "schmello"));
expected.add(entityWithProp(tx, "low"));
expected.add(entityWithProp(tx, "trello"));
entityWithProp(tx, "yellow");
expected.add(entityWithProp(tx, "loww"));
entityWithProp(tx, "below");
tx.commit();
}
createIndex();
// when
try (KernelTransaction tx = beginTransaction()) {
int prop = tx.tokenRead().propertyKey(DEFAULT_PROPERTY_NAME);
IndexReadSession index = tx.dataRead().indexReadSession(tx.schemaRead().indexGetForName(INDEX_NAME));
try (var cursor = getEntityValueIndexCursor(tx)) {
entityWithProp(tx, "allow");
expected.add(entityWithProp(tx, "now"));
expected.add(entityWithProp(tx, "jello"));
entityWithProp(tx, "willow");
PropertyIndexQuery query = PropertyIndexQuery.range(prop, "hello", true, "trello", true);
entityIndexSeek(tx, index, cursor, constrained(indexOrder, true), query);
assertResultsInOrder(expected, cursor, indexOrder);
}
}
}
Aggregations