From 66597602016a428d94e6036512240ff72ae3cf39 Mon Sep 17 00:00:00 2001 From: Michael Hunger Date: Sun, 6 Mar 2011 21:02:44 +0100 Subject: [PATCH] support for exact matches of numeric indexed values --- .gitignore | 1 + .../data/graph/neo4j/finder/AbstractFinder.java | 9 ++++++--- .../data/graph/neo4j/support/IndexTest.java | 9 +++++++++ 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 55b3d0f62..6bf41057d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +.DS_Store target .springBeans .ant-targets-build.xml diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/finder/AbstractFinder.java b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/finder/AbstractFinder.java index ef6a1ec83..924b351c7 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/finder/AbstractFinder.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/finder/AbstractFinder.java @@ -81,7 +81,10 @@ public abstract class AbstractFinder getIndexHits(String indexName, String property, Object value) { - if (value instanceof Number) value = ValueContext.numeric((Number) value); + if (value instanceof Number) { + Number number = (Number) value; + return getIndex(indexName).query(createInclusiveRangeQuery(property, number,number)); + } return getIndex(indexName).get(property, value); } @@ -146,12 +149,12 @@ public abstract class AbstractFinder findAllByRange(final String indexName, final String property, final Number from, final Number to) { return query(indexName, new Query() { public IndexHits query(Index index) { - return index.query(property, createRangeQuery(property, from, to)); + return index.query(property, createInclusiveRangeQuery(property, from, to)); } }); } - protected NumericRangeQuery createRangeQuery(String property, Number from, Number to) { + protected NumericRangeQuery createInclusiveRangeQuery(String property, Number from, Number to) { if (from instanceof Long) return (NumericRangeQuery) NumericRangeQuery.newLongRange(property, from.longValue(),to.longValue(),true,true); if (from instanceof Integer) return (NumericRangeQuery) NumericRangeQuery.newIntRange(property, from.intValue(), to.intValue(), true, true); if (from instanceof Double) return (NumericRangeQuery) NumericRangeQuery.newDoubleRange(property, from.doubleValue(), to.doubleValue(), true, true); diff --git a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/IndexTest.java b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/IndexTest.java index 9ba9f35ec..b01c68d90 100644 --- a/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/IndexTest.java +++ b/spring-data-neo4j/src/test/java/org/springframework/data/graph/neo4j/support/IndexTest.java @@ -9,6 +9,7 @@ import org.junit.runner.RunWith; import org.neo4j.graphdb.DynamicRelationshipType; import org.neo4j.graphdb.Node; import org.neo4j.graphdb.Relationship; +import org.neo4j.graphdb.Transaction; import org.neo4j.graphdb.index.Index; import org.neo4j.helpers.collection.IteratorUtil; import org.springframework.beans.factory.annotation.Autowired; @@ -219,6 +220,14 @@ public class IndexTest { assertEquals(person, found); } + @Test + public void findsPersonByIndexOnAnnotatedIntFieldInSeparateTransactions() { + Person person = persistedPerson(NAME_VALUE, 35); + final NodeFinder finder = finderFactory.createNodeEntityFinder(Person.class); + final Person found = finder.findByPropertyValue(null, "Person.age", 35); + assertEquals("person found inside range", person, found); + } + @Test @Transactional public void testRangeQueryPersonByIndexOnAnnotatedField() {