You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Schema generation now detects conflicting plural names in types and fails intentionally.
439
440
For example, the following schema will fail due to ambiguous `Techs` plural:
440
441
441
442
[source, graphql, indent=0]
@@ -487,8 +488,7 @@ type Movie @node @fulltext(
487
488
----
488
489
489
490
Full-text search was previously available in two different locations.
490
-
491
-
The following form has now been completely removed:
491
+
The following form has been completely removed:
492
492
493
493
[source, graphql, indent=0]
494
494
----
@@ -583,9 +583,9 @@ The `implicitSet` option of `excludeDeprecatedFields` has been removed.
583
583
584
584
=== `@coalesce` directive affects projection field values
585
585
586
-
In version 7.0.0, the `@coalesce` directive now applies to both filter operations and field projections. Previously, the fallback values specified in the `@coalesce` directive were only used when those fields were used in filters, but not on the returned fields.
587
-
588
-
Now, when you select a field annotated with `@coalesce`, null values will be replaced with the specified fallback value in the query result.
586
+
In version 7.0.0, the `@coalesce` directive now applies to both filter operations and field projections.
587
+
Previously, the fallback values specified in the `@coalesce` directive were only used when those fields were used in filters, but not on the returned fields.
588
+
Now, when you select a field annotated with `@coalesce`, null values are replaced with the specified fallback value in the query result.
589
589
590
590
Consider this schema:
591
591
@@ -621,7 +621,7 @@ query {
621
621
}
622
622
----
623
623
624
-
Now, the same query will return the coalesced value:
624
+
Now, the same query returns the coalesced value:
625
625
626
626
[source, json, indent=0]
627
627
----
@@ -639,7 +639,8 @@ This ensures consistent behavior between filtering and projecting fields with th
639
639
640
640
=== Set `addVersionPrefix` to true by default
641
641
642
-
In version 7.0.0, the `addVersionPrefix` option is now set to `true` by default. This means that all generated Cypher queries will automatically be prefixed with the Cypher version:
642
+
In version 7.0.0, the `addVersionPrefix` option is set to `true` by default.
643
+
This means that all generated Cypher queries are automatically prefixed with the Cypher version:
643
644
644
645
[source, cypher, indent=0]
645
646
----
@@ -648,9 +649,10 @@ CYPHER 5
648
649
MATCH(this:Movie)
649
650
----
650
651
651
-
This ensures that the correct Cypher version is used when queries are executed in Neo4j. However, this change may be incompatible with older versions of Neo4j.
652
+
This ensures that the correct Cypher version is used when queries are executed in Neo4j.
653
+
However, this change may be incompatible with older versions of Neo4j.
652
654
653
-
If you need to disable this behavior, you can set `cypherQueryOptions.addVersionPrefix` to `false` in the context:
655
+
Set `cypherQueryOptions.addVersionPrefix` to `false` to disable this behavior:
=== Changed DateTime and Time value conversion behavior
682
+
=== Changed `DateTime` and `Time` value conversion behavior
681
683
682
-
In version 7.0.0, `DateTime` and `Time` values are now converted from strings into temporal types directly in the generated Cypher queries, rather than in server code using the Neo4j driver.
684
+
In version 7.0.0, `DateTime` and `Time` values are converted from Strings to temporal types directly in the generated Cypher queries, rather than in server code using the Neo4j driver.
683
685
684
-
For example, if you have a date string in your GraphQL query:
686
+
For example, if you have a date String in your GraphQL query:
685
687
686
688
[source, graphql, indent=0]
687
689
----
@@ -702,14 +704,16 @@ WHERE this.releaseDate > datetime($param0)
702
704
RETURN this { .title, .releaseDate } as this
703
705
----
704
706
705
-
=== Mutation operations now follow the relationship direction defined in the `@relationship` argument queryDirection
Mutation operations now respect the `queryDirection` value defined in the `@relationship` directive when matching existing relationships. This ensures consistent behavior between queries and mutations regarding how relationships are traversed.
709
+
Mutation operations now respect the `queryDirection` value defined in the `@relationship` directive when matching existing relationships.
710
+
This ensures consistent behavior between queries and mutations regarding how relationships are traversed.
708
711
709
-
Important to note:
710
-
711
-
- When creating new relationships, the physical direction stored in the database is still determined by the `direction` argument.
712
-
- The change affects only how existing relationships are matched during mutation operations.
712
+
[NOTE]
713
+
====
714
+
When creating new relationships, the physical direction stored in the database is still determined by the `direction` argument.
715
+
The change affects only how existing relationships are matched during mutation operations.
716
+
====
713
717
714
718
For example, consider the following schema:
715
719
@@ -726,13 +730,13 @@ type Person @node {
726
730
}
727
731
----
728
732
729
-
With `queryDirection: UNDIRECTED`, mutations will now traverse existing relationships in both directions when matching nodes, regardless of the base `direction` value. This is consistent with how queries work with the same directive configuration.
730
-
733
+
With `queryDirection: UNDIRECTED`, mutations now traverse existing relationships in both directions when matching nodes, regardless of the base `direction` value.
734
+
This is consistent with how queries work with the same directive configuration.
731
735
Previously, mutations would always follow the explicit `direction` value when matching existing relationships, which could lead to inconsistent behavior between queries and mutations.
732
736
733
737
=== Moved `where` field in nested update operations
734
738
735
-
The `where` field for nested update operations has been removed, in favour of the `where` inside the nested update input.
739
+
The `where` field for nested update operations has been removed in favor of the `where` inside the nested update input.
736
740
737
741
[cols="1,1"]
738
742
|===
@@ -802,7 +806,8 @@ type Actor @node {
802
806
}
803
807
----
804
808
805
-
Previously, when using `single` or `some` filters with unions, conditions inside these filters were evaluated separately for each concrete type in the union, requiring all of them to match. This was incorrect behavior.
809
+
Previously, when using `single` or `some` filters with unions, conditions inside these filters were evaluated separately for each concrete type in the union, requiring all of them to match.
810
+
This behavior was incorrect.
806
811
807
812
[source, graphql, indent=0]
808
813
----
@@ -823,15 +828,55 @@ The fixed behavior in version 7.0.0:
823
828
* `some`: Now correctly returns actors with at least one matching related node of any type in the union.
824
829
825
830
This change provides more logical and consistent results, but may affect existing queries that relied on the previous behavior.
826
-
827
831
This fix applies to both the new filter syntax and the deprecated filters (e.g., `actedIn_SINGLE` and `actedIn_SOME`).
828
832
833
+
=== List of nullable elements no longer supported
834
+
835
+
List of nullable elements such are no longer supported in types annotated with the `@node` directive.
836
+
837
+
The following type definition is no longer supported:
838
+
839
+
[source, graphql, indent=0]
840
+
----
841
+
type Actor @node {
842
+
name: String
843
+
pseudonyms: [String]!
844
+
}
845
+
----
846
+
847
+
This is due the fact that Neo4j does not support storing NULL values as part of a List.
848
+
849
+
=== Interfaces and unions cannot be implemented by a mix of `@nodes` and no `@nodes` types.
850
+
851
+
Interfaces and unions can only be implemented by types that are all annotated with the `@node` directive or none of them.
852
+
853
+
The following type definition is no longer supported:
854
+
855
+
[source, graphql, indent=0]
856
+
----
857
+
interface Production @node {
858
+
title: String
859
+
}
860
+
type Movie @node implements Production {
861
+
title: String
862
+
}
863
+
type Series implements Production {
864
+
title: String
865
+
}
866
+
----
867
+
868
+
=== Relationship fields now require `@node` types
869
+
870
+
The `@relationship` directive can only be applied to fields whose types are annotated with the `@node` directive.
871
+
872
+
This also applies to fields defined as interfaces and unions where they must be implemented exclusively by `@node` types.
The relationship filtering syntax outside dedicated input like `_SOME`, `_ALL`, and `_NONE` is now deprecated. You should use the dedicated input object versions:
1068
+
The relationship filtering syntax outside dedicated input like `_SOME`, `_ALL`, and `_NONE` is now deprecated.
0 commit comments