private LoadClauseBuilder loadNodeClauseBuilder(int depth) { if (depth < 0) { return new PathNodeLoadClauseBuilder(); } switch (loadStrategy) { case PATH_LOAD_STRATEGY: return new PathNodeLoadClauseBuilder(); case SCHEMA_LOAD_STRATEGY: return new SchemaNodeLoadClauseBuilder(metaData.getSchema()); default: throw new IllegalStateException("Unknown loadStrategy " + loadStrategy); } }
public String build(String variable, String label, int depth) { if (depth < 0) { throw new IllegalArgumentException("Only queries with depth >= 0 can be built, depth=" + depth); } StringBuilder sb = new StringBuilder(); newLine(sb); sb.append(" RETURN "); newLine(sb); sb.append(variable); newLine(sb); Node node = schema.findNode(label); expand(sb, variable, node, depth); return sb.toString(); }
@Test public void buildQueryFromPerson() throws Exception { SchemaNodeLoadClauseBuilder queryBuilder = createQueryBuilder(); String query = queryBuilder.build("n", "Person", 2); assertThat(query).isEqualTo(" RETURN n,[ " + "[ (n)-[r_f1:`FOUNDED`]->(o1:`Organisation`) | [ r_f1, o1 ] ], " + "[ (n)-[r_e1:`EMPLOYED_BY`]->(o1:`Organisation`) | [ r_e1, o1 ] ], " + "[ (n)-[r_l1:`LIVES_AT`]->(l1:`Location`) | [ r_l1, l1, " + "[ [ (l1)<-[r_l2:`LIVES_AT`]-(p2:`Person`) | [ r_l2, p2 ] ] ] " + "] ] " + "]"); }
@Test public void buildQuery() throws Exception { SchemaNodeLoadClauseBuilder queryBuilder = createQueryBuilder(); String query = queryBuilder.build("n", "Person", 0); assertThat(query).isEqualTo(" RETURN n"); }
private SchemaNodeLoadClauseBuilder createQueryBuilder() { DomainInfo domainInfo = DomainInfo.create("org.neo4j.ogm.metadata.schema.simple"); Schema schema = new DomainInfoSchemaBuilder(domainInfo).build(); return new SchemaNodeLoadClauseBuilder(schema); }
@Test public void buildQueryFromLocation() throws Exception { SchemaNodeLoadClauseBuilder queryBuilder = createQueryBuilder(); String query = queryBuilder.build("n", "Location", 1); assertThat(query).isEqualTo(" RETURN n,[ [ (n)<-[r_l1:`LIVES_AT`]-(p1:`Person`) | [ r_l1, p1 ] ] ]"); }
@Test public void givenNodeWithNoRelationships_thenCreateSimpleQuery() throws Exception { SchemaNodeLoadClauseBuilder queryBuilder = createQueryBuilder(); String query = queryBuilder.build("n", "Organisation", 1); assertThat(query).isEqualTo(" RETURN n"); }
@Test public void givenLabelStartingWithR_thenNodeNameAndrelationshipNameShouldNotConflict() throws Exception { SchemaNodeLoadClauseBuilder queryBuilder = createQueryBuilder(); String query = queryBuilder.build("n", "Restaurant", 1); assertThat(query).isEqualTo(" RETURN n,[ [ (n)-[r_s1:`SIMILAR_TO`]->(r1:`Restaurant`) | [ r_s1, r1 ] ] ]"); }