use of org.neo4j.internal.kernel.api.IndexReadSession in project neo4j by neo4j.
the class EntityValueIndexCursorTestBase method shouldRespectOrderCapabilitiesForWildcard.
@Test
void shouldRespectOrderCapabilitiesForWildcard() throws Exception {
// given
boolean needsValues = false;
int prop = token.propertyKey(PROP_NAME);
IndexReadSession index = read.indexReadSession(schemaRead.indexGetForName(PROP_INDEX_NAME));
IndexOrderCapability orderCapabilities = index.reference().getCapability().orderCapability(ValueCategory.UNKNOWN);
try (var cursor = entityParams.allocateEntityValueIndexCursor(tx, cursors)) {
if (orderCapabilities.supportsAsc()) {
// when
entityParams.entityIndexSeek(tx, index, cursor, constrained(IndexOrder.ASCENDING, needsValues), PropertyIndexQuery.exists(prop));
// then
assertFoundEntitiesInOrder(cursor, IndexOrder.ASCENDING);
}
if (orderCapabilities.supportsDesc()) {
// when
entityParams.entityIndexSeek(tx, index, cursor, constrained(IndexOrder.DESCENDING, needsValues), PropertyIndexQuery.exists(prop));
// then
assertFoundEntitiesInOrder(cursor, IndexOrder.DESCENDING);
}
}
}
use of org.neo4j.internal.kernel.api.IndexReadSession in project neo4j by neo4j.
the class EntityValueIndexCursorTestBase method shouldPerformStringRangeSearch.
@Test
void shouldPerformStringRangeSearch() throws Exception {
// given
boolean needsValues = indexParams.indexProvidesStringValues();
IndexQueryConstraints constraints = unordered(needsValues);
int prop = token.propertyKey(PROP_NAME);
IndexReadSession index = read.indexReadSession(schemaRead.indexGetForName(PROP_INDEX_NAME));
IndexValueCapability stringCapability = index.reference().getCapability().valueCapability(ValueCategory.TEXT);
try (var cursor = entityParams.allocateEntityValueIndexCursor(tx, cursors)) {
MutableLongSet uniqueIds = new LongHashSet();
// when
entityParams.entityIndexSeek(tx, index, cursor, constraints, PropertyIndexQuery.range(prop, "one", true, "three", true));
// then
assertFoundEntitiesAndValue(cursor, uniqueIds, stringCapability, needsValues, strOne, strThree1, strThree2, strThree3);
// when
entityParams.entityIndexSeek(tx, index, cursor, constraints, PropertyIndexQuery.range(prop, "one", true, "three", false));
// then
assertFoundEntitiesAndValue(cursor, uniqueIds, stringCapability, needsValues, strOne);
// when
entityParams.entityIndexSeek(tx, index, cursor, constraints, PropertyIndexQuery.range(prop, "one", false, "three", true));
// then
assertFoundEntitiesAndValue(cursor, uniqueIds, stringCapability, needsValues, strThree1, strThree2, strThree3);
// when
entityParams.entityIndexSeek(tx, index, cursor, constraints, PropertyIndexQuery.range(prop, "one", false, "two", false));
// then
assertFoundEntitiesAndValue(cursor, uniqueIds, stringCapability, needsValues, strThree1, strThree2, strThree3);
// when
entityParams.entityIndexSeek(tx, index, cursor, constraints, PropertyIndexQuery.range(prop, "one", true, "two", true));
// then
assertFoundEntitiesAndValue(cursor, uniqueIds, stringCapability, needsValues, strOne, strThree1, strThree2, strThree3, strTwo1, strTwo2);
}
}
use of org.neo4j.internal.kernel.api.IndexReadSession in project neo4j by neo4j.
the class EntityValueIndexCursorTestBase method shouldPerformStringPrefixSearch.
@Test
void shouldPerformStringPrefixSearch() throws Exception {
// given
boolean needsValues = indexParams.indexProvidesStringValues();
int prop = token.propertyKey(PROP_NAME);
IndexReadSession index = read.indexReadSession(schemaRead.indexGetForName(PROP_INDEX_NAME));
IndexValueCapability stringCapability = index.reference().getCapability().valueCapability(ValueCategory.TEXT);
try (var cursor = entityParams.allocateEntityValueIndexCursor(tx, cursors)) {
MutableLongSet uniqueIds = new LongHashSet();
// when
entityParams.entityIndexSeek(tx, index, cursor, unordered(needsValues), PropertyIndexQuery.stringPrefix(prop, stringValue("t")));
// then
assertThat(cursor.numberOfProperties()).isEqualTo(1);
assertFoundEntitiesAndValue(cursor, uniqueIds, stringCapability, needsValues, strTwo1, strTwo2, strThree1, strThree2, strThree3);
}
}
use of org.neo4j.internal.kernel.api.IndexReadSession in project neo4j by neo4j.
the class EntityValueIndexCursorTestBase method shouldRespectOrderCapabilitiesForStringArray.
@Test
void shouldRespectOrderCapabilitiesForStringArray() throws KernelException {
// given
boolean needsValues = indexParams.indexProvidesSpatialValues();
int prop = token.propertyKey(PROP_NAME);
IndexReadSession index = read.indexReadSession(schemaRead.indexGetForName(PROP_INDEX_NAME));
IndexOrderCapability orderCapabilities = index.reference().getCapability().orderCapability(ValueCategory.TEXT_ARRAY);
try (var cursor = entityParams.allocateEntityValueIndexCursor(tx, cursors)) {
if (orderCapabilities.supportsAsc()) {
// when
entityParams.entityIndexSeek(tx, index, cursor, constrained(IndexOrder.ASCENDING, needsValues), PropertyIndexQuery.range(prop, Values.of(new String[] { "first", "second", "third" }), true, Values.of(new String[] { "fourth", "fifth", "sixth", "seventh" }), true));
// then
assertFoundEntitiesInOrder(cursor, IndexOrder.ASCENDING);
}
if (orderCapabilities.supportsDesc()) {
// when
entityParams.entityIndexSeek(tx, index, cursor, constrained(IndexOrder.DESCENDING, needsValues), PropertyIndexQuery.range(prop, Values.of(new String[] { "first", "second", "third" }), true, Values.of(new String[] { "fourth", "fifth", "sixth", "seventh" }), true));
// then
assertFoundEntitiesInOrder(cursor, IndexOrder.DESCENDING);
}
}
}
use of org.neo4j.internal.kernel.api.IndexReadSession in project neo4j by neo4j.
the class EntityValueIndexCursorTestBase method shouldPerformTemporalRangeSearch.
@Test
void shouldPerformTemporalRangeSearch() throws KernelException {
// given
boolean needsValues = indexParams.indexProvidesTemporalValues();
IndexQueryConstraints constraints = unordered(needsValues);
int prop = token.propertyKey(PROP_NAME);
IndexReadSession index = read.indexReadSession(schemaRead.indexGetForName(PROP_INDEX_NAME));
IndexValueCapability temporalCapability = index.reference().getCapability().valueCapability(ValueCategory.TEMPORAL);
try (var cursor = entityParams.allocateEntityValueIndexCursor(tx, cursors)) {
MutableLongSet uniqueIds = new LongHashSet();
// when
entityParams.entityIndexSeek(tx, index, cursor, constraints, PropertyIndexQuery.range(prop, DateValue.date(1986, 11, 18), true, DateValue.date(1989, 3, 24), true));
// then
assertFoundEntitiesAndValue(cursor, uniqueIds, temporalCapability, needsValues, date86, date891, date892);
// when
entityParams.entityIndexSeek(tx, index, cursor, constraints, PropertyIndexQuery.range(prop, DateValue.date(1986, 11, 18), true, DateValue.date(1989, 3, 24), false));
// then
assertFoundEntitiesAndValue(cursor, uniqueIds, temporalCapability, needsValues, date86);
// when
entityParams.entityIndexSeek(tx, index, cursor, constraints, PropertyIndexQuery.range(prop, DateValue.date(1986, 11, 18), false, DateValue.date(1989, 3, 24), true));
// then
assertFoundEntitiesAndValue(cursor, uniqueIds, temporalCapability, needsValues, date891, date892);
// when
entityParams.entityIndexSeek(tx, index, cursor, constraints, PropertyIndexQuery.range(prop, DateValue.date(1986, 11, 18), false, DateValue.date(1989, 3, 24), false));
// then
assertFoundEntitiesAndValue(cursor, uniqueIds, temporalCapability, needsValues);
}
}
Aggregations