GeezerVisonThe World Wide Web, restored to 800 pixels of glory. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Home|About|Gaming cabinet|Archives|How it works|Starter sites | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GeezerVison is showing github.com — Backport to 26.1: Fix covariance checks for SDL type extensions by andimarek · Pull Request #4444 · graphql-java/graphql-java Conversation
Member
Backport of #4420 to the ProblemGraphQL Java incorrectly rejected valid covariant field return types when the subtype relationship was introduced by an SDL extension rather than declared on the base type. Object extension exampleIn this schema, type Query { base: Base } interface Pet { id: ID } type Dog { id: ID } extend type Dog implements Pet type Base { foo: String } interface PetContainer { pet: Pet } extend type Base implements PetContainer { pet: Dog } The schema was incorrectly rejected because the covariance check only inspected the base definition of Interface extension exampleThe same problem affected interfaces inheriting from other interfaces through extensions: type Query { base: Base } interface Pet { id: ID } interface WorkingPet { id: ID } extend interface WorkingPet implements Pet interface PetContainer { pet: Pet } type Base implements PetContainer { pet: WorkingPet }
Union extension exampleUnion members introduced through extensions were also missed: type Query { base: Base } type Cat { id: ID } type Dog { id: ID } union Pets = Cat extend union Pets = Dog interface PetContainer { pet: Pets } type Base implements PetContainer { pet: Dog }
Summary
This matches graphql-js behavior. graphql-js materializes extensions into its schema types before subtype checks; GraphQL Java retains separate AST definitions and now combines them when answering the equivalent registry queries. Wrapped covarianceThe same relationship is preserved while recursively checking list and non-null wrappers: type Query { base: Base } interface Pet { id: ID } type Dog { id: ID } extend type Dog implements Pet interface PetContainer { pets: [Pet]! } type Base implements PetContainer { pets: [Dog!]! }
Unrelated types remain invalidExtension relationships are matched by their declared interface and do not make unrelated types compatible: type Query { base: Base } interface Pet { id: ID } interface Vehicle { id: ID } type Car { id: ID } extend type Car implements Vehicle interface PetContainer { pet: Pet } type Base implements PetContainer { pet: Car } This schema is still rejected because
Sorry, something went wrong. Uh oh!
There was an error while loading. Please reload this page. All reactions
andimarek
force-pushed
the
codex/backport-4420-to-26.x
branch
from
bd2f444 to
8f74506
Compare
Contributor
All reactions
Sorry, something went wrong. Uh oh!
There was an error while loading. Please reload this page. Uh oh!
There was an error while loading. Please reload this page.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
ReviewersNo reviewsUh oh!
There was an error while loading. Please reload this page. AssigneesNo one assignedLabels
None yet
ProjectsMilestoneNo milestoneDevelopmentSuccessfully merging this pull request may close these issues. Uh oh!
There was an error while loading. Please reload this page. Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| You are visitor 01402503 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required. |