@Override public MatchClause append(Filter filter) { clause.append(filter.toCypher("n", clause.indexOf(" WHERE ") == -1)); return this; }
@Override public MatchClause append(Filter filter) { clause.append(filter.toCypher(nodeIdentifier(), clause.indexOf(" WHERE ") == -1)); return this; }
private static void appendFilters(List<Filter> filters, String nodeIdentifier, StringBuilder query, Map<String, Object> properties) { for (Filter filter : filters) { query.append(filter.toCypher(nodeIdentifier, false)); properties.putAll(filter.getFunction().parameters()); } } }
@Override public MatchClause append(Filter filter) { if (clause == null) { clause = new StringBuilder("MATCH (n)"); if (filter.getRelationshipDirection().equals(Relationship.INCOMING)) { clause.append("<"); } // String relationshipIdentifier = filter.isNestedRelationshipEntity() ? relationshipIdentifier() : ""; clause.append(String.format("-[%s:`%s`]-", relationshipIdentifier(), this.relationshipType)); if (filter.getRelationshipDirection().equals(Relationship.OUTGOING)) { clause.append(">"); } clause.append(String.format("(%s) ", nodeIdentifier())); } //TODO this implies support for querying by one relationship entity only clause.append(filter.toCypher(relationshipIdentifier(), clause.indexOf(" WHERE ") == -1)); return this; }
@Test public void toCypher() { Filter filter = new Filter("moons", ComparisonOperator.LESS_THAN, 23); filter.setBooleanOperator(BooleanOperator.AND); assertThat(filter.toCypher("n", true)).isEqualTo("WHERE n.`moons` < { `moons_0` } "); }
@Test public void inCollectionFilterTest() { ContainsAnyComparison filterFunction = new ContainsAnyComparison("test"); Filter filter = new Filter("property", filterFunction); assertThat(filter.toCypher("n", true)) .isEqualTo("WHERE ANY(collectionFields IN {`property_0`} WHERE collectionFields in n.`property`) "); assertThat(filter.parameters().get("property_0")).isEqualTo("test"); }
@Test public void ignoreCaseShouldNotBeApplicableToComparisonOtherThanEquals() { expectedException.expect(IllegalStateException.class); expectedException.expectMessage("ignoreCase is only supported for EQUALS comparison"); Filter filter = new Filter("thing", ComparisonOperator.IS_NULL); filter.setBooleanOperator(BooleanOperator.AND); assertThat(filter.toCypher("n", true)).isEqualTo("WHERE n.`thing` IS NULL "); filter.ignoreCase(); assertThat(filter.toCypher("n", true)).isEqualTo("WHERE n.`thing` IS NULL "); } }
@Test public void isNullComparisionShouldWork() { Filter filter = new Filter("thing", ComparisonOperator.IS_NULL); filter.setBooleanOperator(BooleanOperator.AND); assertThat(filter.toCypher("n", true)).isEqualTo("WHERE n.`thing` IS NULL "); }
@Test public void isExistsComparisionShouldWork() { Filter filter = new Filter("thing", ComparisonOperator.EXISTS); filter.setBooleanOperator(BooleanOperator.AND); assertThat(filter.toCypher("n", true)).isEqualTo("WHERE EXISTS(n.`thing`) "); }
@Test public void isTrueComparisionShouldWork() { Filter filter = new Filter("thing", ComparisonOperator.IS_TRUE); filter.setBooleanOperator(BooleanOperator.AND); assertThat(filter.toCypher("n", true)).isEqualTo("WHERE n.`thing` = true "); }
@Test public void equalComparisionShouldWork() { final String value = "someOtherThing"; Filter filter = new Filter("thing", ComparisonOperator.EQUALS, value); filter.setFunction(new PropertyComparison(value)); assertThat(filter.toCypher("n", true)).isEqualTo("WHERE n.`thing` = { `thing_0` } "); filter = new Filter("thing", ComparisonOperator.EQUALS, value); filter.ignoreCase(); assertThat(filter.toCypher("n", true)).isEqualTo("WHERE toLower(n.`thing`) = toLower({ `thing_0` }) "); }
@Test public void toCypher_function() { DistanceComparison function = new DistanceComparison(new DistanceFromPoint(37.4, 112.1, 1000.0)); Filter filter = new Filter(function, ComparisonOperator.LESS_THAN); filter.setBooleanOperator(BooleanOperator.AND); filter.setNegated(true); assertThat(filter.toCypher("n", true)) .isEqualTo( "WHERE NOT(distance(point({latitude: n.latitude, longitude: n.longitude}),point({latitude:{lat}, longitude:{lon}})) < {distance} ) "); }