Skip to content

Commit b419d00

Browse files
authored
This bugfix solves a problem where inverse relationships were incorrectly mapped. (#123)
1 parent 048e1a4 commit b419d00

File tree

3 files changed

+22
-23
lines changed

3 files changed

+22
-23
lines changed

src/main/kotlin/org/neo4j/graphql/handler/projection/ProjectionBase.kt

+6-4
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ open class ProjectionBase {
2020
if (values.isEmpty()) {
2121
return ""
2222
}
23-
return " ORDER BY " + values.joinToString(", ", transform = { (property, direction) -> "$variable.$property $direction" })
23+
return " ORDER BY " + values.joinToString(", ", transform = { (property, direction) -> "$variable.${property.quote()} $direction" })
2424
}
2525

2626
private fun getOrderByArgs(args: MutableList<Argument>): List<Pair<String, Sort>> {
@@ -310,8 +310,10 @@ open class ProjectionBase {
310310
private fun relationshipInfoInCorrectDirection(fieldObjectType: GraphQLFieldsContainer, relInfo0: RelationshipInfo, parent: GraphQLFieldsContainer, relDirectiveField: RelationshipInfo?): RelationshipInfo {
311311
val startField = fieldObjectType.getFieldDefinition(relInfo0.startField)!!
312312
val endField = fieldObjectType.getFieldDefinition(relInfo0.endField)!!
313-
val startFieldTypeName = startField.type.inner().name
314-
val inverse = startFieldTypeName != parent.name || startField.type.name == endField.type.name && relDirectiveField?.out != relInfo0.out
313+
val startFieldTypeName = startField.type.innerName()
314+
val inverse = startFieldTypeName != parent.name
315+
|| startFieldTypeName == endField.type.innerName()
316+
&& relDirectiveField?.out != relInfo0.out
315317
return if (inverse) relInfo0.copy(out = relInfo0.out?.not(), startField = relInfo0.endField, endField = relInfo0.startField) else relInfo0
316318
}
317319

@@ -342,7 +344,7 @@ open class ProjectionBase {
342344

343345
val (endNodePattern, variableSuffix) = when {
344346
isRelFromType -> {
345-
val label = nodeType.getFieldDefinition(relInfo.endField!!)!!.type.inner().name
347+
val label = nodeType.getFieldDefinition(relInfo.endField!!)!!.type.innerName()
346348
("$childVariable${relInfo.endField.capitalize()}:$label" to relInfo.endField)
347349
}
348350
else -> ("$childVariable:${nodeType.name}" to null)

src/test/resources/relationship-tests.adoc

+2-2
Original file line numberDiff line numberDiff line change
@@ -329,8 +329,8 @@ RETURN team {
329329
MATCH (player: Player)
330330
RETURN player {
331331
.id,
332-
memberships: [(player)<-[playerMemberships: MEMBER_OF]-(playerMembershipsPlayer: Player) | playerMemberships {
333-
team: playerMembershipsPlayer { .id },
332+
memberships: [(player)-[playerMemberships: MEMBER_OF]->(playerMembershipsTeam: Team) | playerMemberships {
333+
team: playerMembershipsTeam { .id },
334334
.prop
335335
}]
336336
} AS player

src/test/resources/translator-tests1.adoc

+14-17
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ MATCH (person:Person) RETURN person { .age } AS person ORDER BY person.name ASC
7777
.GraphQL-Query
7878
[source,graphql]
7979
----
80-
{ person { name born { date to { name } } } }
80+
{ person { name born { date to { name } } } }
8181
----
8282

8383
.Cypher params
@@ -97,7 +97,7 @@ MATCH (person:Person) RETURN person { .name, born:[(person)-[personBorn:BORN]->(
9797
.GraphQL-Query
9898
[source,graphql]
9999
----
100-
{ person { name age livedIn { name } } }
100+
{ person { name age livedIn { name } } }
101101
----
102102

103103
.Cypher params
@@ -194,7 +194,7 @@ MATCH (person:Person) RETURN person { .age } AS person SKIP $personOffset
194194
.GraphQL-Query
195195
[source,graphql]
196196
----
197-
{ person { name age livesIn { name } } }
197+
{ person { name age livesIn { name } } }
198198
----
199199

200200
.Cypher params
@@ -214,7 +214,7 @@ MATCH (person:Person) RETURN person { .name, .age, livesIn:[(person)-[:LIVES_IN]
214214
.GraphQL-Query
215215
[source,graphql]
216216
----
217-
{ person { name age } }
217+
{ person { name age } }
218218
----
219219

220220
.Cypher params
@@ -254,7 +254,7 @@ MATCH (person:Person) RETURN person { .name } AS person
254254
.GraphQL-Query
255255
[source,graphql]
256256
----
257-
{ person { name died { date where { name } } } }
257+
{ person { name died { date where { name } } } }
258258
----
259259

260260
.Cypher params
@@ -274,7 +274,7 @@ MATCH (person:Person) RETURN person { .name, died:[(person)-[personDied:DIED]->(
274274
.GraphQL-Query
275275
[source,graphql]
276276
----
277-
{ person { name born { date to { name founded { name } } } } }
277+
{ person { name born { date to { name founded { name } } } } }
278278
----
279279

280280
.Cypher params
@@ -306,7 +306,7 @@ RETURN person {
306306
.GraphQL-Query
307307
[source,graphql]
308308
----
309-
{ person { name born { date to { name founded { name born { date to { name } } } } } } }
309+
{ person { name born { date to { name founded { name born { date to { name } } } } } } }
310310
----
311311

312312
.Cypher params
@@ -326,7 +326,7 @@ MATCH (person:Person) RETURN person { .name, born:[(person)-[personBorn:BORN]->(
326326
.GraphQL-Query
327327
[source,graphql]
328328
----
329-
{ person { name age livesIn(name:"Berlin") { name } } }
329+
{ person { name age livesIn(name:"Berlin") { name } } }
330330
----
331331

332332
.Cypher params
@@ -408,7 +408,7 @@ MATCH (person:Person) RETURN person { .name, .age } AS person
408408
.GraphQL-Query
409409
[source,graphql]
410410
----
411-
{ foo:person { n:name } }
411+
{ foo:person {n:name } }
412412
----
413413

414414
.Cypher params
@@ -516,7 +516,7 @@ SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further detail
516516
.GraphQL-Query
517517
[source,graphql]
518518
----
519-
{ person { livedIn(offset:3) { name } } }
519+
{ person { livedIn(offset:3) { name } } }
520520
----
521521

522522
.Cypher params
@@ -543,7 +543,7 @@ RETURN person {
543543
.GraphQL-Query
544544
[source,graphql]
545545
----
546-
{ person { livedIn(first:2) { name } } }
546+
{ person { livedIn(first:2) { name } } }
547547
----
548548

549549
.Cypher params
@@ -565,14 +565,12 @@ RETURN person {
565565
} AS person
566566
----
567567

568-
line 1:15 token recognition error at: ' '
569-
line 1:35 token recognition error at: ' '
570568
=== nested query 2 nd hop
571569

572570
.GraphQL-Query
573571
[source,graphql]
574572
----
575-
{ person { name age livesIn { name founded {name}} } }
573+
{ person { name age livesIn { name founded {name}} } }
576574
----
577575

578576
.Cypher params
@@ -587,13 +585,12 @@ line 1:35 token recognition error at: ' '
587585
MATCH (person:Person) RETURN person { .name, .age, livesIn:[(person)-[:LIVES_IN]->(personLivesIn:Location) | personLivesIn { .name, founded:[(personLivesIn)<-[:FOUNDED]-(personLivesInFounded:Person) | personLivesInFounded { .name }][0] }][0] } AS person
588586
----
589587

590-
line 1:12 token recognition error at: ' '
591588
=== inline fragment multi fields
592589

593590
.GraphQL-Query
594591
[source,graphql]
595592
----
596-
query { person { ... on Person { name,age } } }
593+
query { person { ... on Person { name,age } } }
597594
----
598595

599596
.Cypher params
@@ -637,7 +634,7 @@ RETURN person { .age } AS person SKIP $personOffset LIMIT $personFirst
637634
.GraphQL-Query
638635
[source,graphql]
639636
----
640-
{ person { livedIn(first:2,offset:3) { name } } }
637+
{ person { livedIn(first:2,offset:3) { name } } }
641638
----
642639

643640
.Cypher params

0 commit comments

Comments
 (0)