Skip to content

Latest commit

 

History

History
1397 lines (1268 loc) · 36.7 KB

augmentation-tests.adoc

File metadata and controls

1397 lines (1268 loc) · 36.7 KB

Augmentation Tests

Setup

Schema
interface HasMovies { movies:[Movie] }
enum MovieType { documentary, action }
type Person0 { name: String, born: _Neo4jTime, location: _Neo4jPoint }
type Person1 { name: String, born: _Neo4jDate }
type Person2 { name: String, age: Int, born: _Neo4jDateTime }
type Person3 { name: String!, born: _Neo4jLocalTime }
type Person4 { id:ID!, name: String, born: _Neo4jLocalDateTime }
type Person5 implements HasMovies { id:ID!, movies:[Movie] @relation(name: "LIKES")}
type Movie { id:ID!, movieType: MovieType, publishedBy: Publisher @relation(name: "PUBLISHED_BY")}
type Publisher { name:ID! }
type Knows0 @relation(name:"KNOWS", from: "source", to: "knows"){
  id: ID!
  source: Person0!
  knows: Person0!
  json: DynamicProperties @dynamic(prefix: "prefix.")
}
type Knows1 @relation(name:"KNOWS", from: "source", to: "knows"){
  id: ID!
  source: Person0!
  knows: Person0!
}
type Knows4 @relation(name:"KNOWS", from: "source", to: "knows"){
  _id: ID!
  source: Person4!
  knows: Person4!
  json: DynamicProperties @dynamic(prefix: "prefix.")
}

type Query {
  PersonByLocation(location: _Neo4jPointInput): [Person0!]!
}

schema {
  query: Query
}

Augmentation

Disable Queries

Configuration
{
  "query": {
    "enabled": false
  },
  "mutation": {
    "enabled": true,
    "exclude": [
      "Person0"
    ]
  }
}
Augmented Schema
schema {
  query: Query
  mutation: Mutation
}

interface HasMovies {
  movies(first: Int, offset: Int, orderBy: [_MovieOrdering!]): [Movie]
}

type Knows0 {
  id: ID!
  json: DynamicProperties
  knows: Person0!
  source: Person0!
}

type Knows1 {
  id: ID!
  knows: Person0!
  source: Person0!
}

type Knows4 {
  _id: ID!
  json: DynamicProperties
  knows: Person4!
  source: Person4!
}

type Movie {
  id: ID!
  movieType: MovieType
  publishedBy: Publisher
}

type Mutation {
  addMoviePublishedBy(id: ID!, publishedBy: ID!): Movie!
  addPerson5Movies(id: ID!, movies: [ID!]!): Person5!
  createKnows4(json: DynamicProperties, knows_id: ID!, source_id: ID!): Knows4!
  createMovie(id: ID!, movieType: MovieType): Movie!
  createPerson1(born: _Neo4jDateInput, name: String): Person1!
  createPerson2(age: Int, born: _Neo4jDateTimeInput, name: String): Person2!
  createPerson3(born: _Neo4jLocalTimeInput, name: String!): Person3!
  createPerson4(born: _Neo4jLocalDateTimeInput, id: ID!, name: String): Person4!
  createPerson5(id: ID!): Person5!
  createPublisher(name: ID!): Publisher!
  "Deletes Knows0 and returns the type itself"
  deleteKnows0(id: ID!): Knows0
  "Deletes Knows1 and returns the type itself"
  deleteKnows1(id: ID!): Knows1
  "Deletes Knows4 and returns the type itself"
  deleteKnows4(_id: ID!): Knows4
  "Deletes Movie and returns the type itself"
  deleteMovie(id: ID!): Movie
  deleteMoviePublishedBy(id: ID!, publishedBy: ID!): Movie
  "Deletes Person4 and returns the type itself"
  deletePerson4(id: ID!): Person4
  "Deletes Person5 and returns the type itself"
  deletePerson5(id: ID!): Person5
  deletePerson5Movies(id: ID!, movies: [ID!]!): Person5
  "Deletes Publisher and returns the type itself"
  deletePublisher(name: ID!): Publisher
  mergeKnows0(id: ID!, json: DynamicProperties): Knows0!
  mergeKnows4(_id: ID!, json: DynamicProperties): Knows4!
  mergeMovie(id: ID!, movieType: MovieType): Movie!
  mergePerson4(born: _Neo4jLocalDateTimeInput, id: ID!, name: String): Person4!
  updateKnows0(id: ID!, json: DynamicProperties): Knows0
  updateKnows4(_id: ID!, json: DynamicProperties): Knows4
  updateMovie(id: ID!, movieType: MovieType): Movie
  updatePerson4(born: _Neo4jLocalDateTimeInput, id: ID!, name: String): Person4
}

type Person0 {
  born: _Neo4jTime
  location: _Neo4jPoint
  name: String
}

type Person1 {
  born: _Neo4jDate
  name: String
}

type Person2 {
  age: Int
  born: _Neo4jDateTime
  name: String
}

type Person3 {
  born: _Neo4jLocalTime
  name: String!
}

type Person4 {
  born: _Neo4jLocalDateTime
  id: ID!
  name: String
}

type Person5 implements HasMovies {
  id: ID!
  movies(first: Int, offset: Int, orderBy: [_MovieOrdering!]): [Movie]
}

type Publisher {
  name: ID!
}

type Query {
  PersonByLocation(first: Int, location: _Neo4jPointInput, offset: Int, orderBy: [_Person0Ordering!]): [Person0!]!
}

type _Neo4jDate {
  day: Int
  formatted: String
  month: Int
  year: Int
}

type _Neo4jDateTime {
  day: Int
  formatted: String
  hour: Int
  microsecond: Int
  millisecond: Int
  minute: Int
  month: Int
  nanosecond: Int
  second: Int
  timezone: String
  year: Int
}

type _Neo4jLocalDateTime {
  day: Int
  formatted: String
  hour: Int
  microsecond: Int
  millisecond: Int
  minute: Int
  month: Int
  nanosecond: Int
  second: Int
  year: Int
}

type _Neo4jLocalTime {
  formatted: String
  hour: Int
  microsecond: Int
  millisecond: Int
  minute: Int
  nanosecond: Int
  second: Int
}

type _Neo4jPoint {
  """
   The coordinate reference systems (CRS)
   -------------------------------------
   posible values:
   * `wgs-84`: A 2D geographic point in the WGS 84 CRS is specified in one of two ways:
     * longitude and latitude (if these are specified, and the crs is not, then the crs is assumed to be WGS-84)
     * x and y (in this case the crs must be specified, or will be assumed to be Cartesian)
   * `wgs-84-3d`: A 3D geographic point in the WGS 84 CRS is specified one of in two ways:
     * longitude, latitude and either height or z (if these are specified, and the crs is not, then the crs is assumed to be WGS-84-3D)
     * x, y and z (in this case the crs must be specified, or will be assumed to be Cartesian-3D)
   * `cartesian`: A 2D point in the Cartesian CRS is specified with a map containing x and y coordinate values
   * `cartesian-3d`: A 3D point in the Cartesian CRS is specified with a map containing x, y and z coordinate values
  """
  crs: String
  " The third element of the Coordinate for geographic CRS, meters above the ellipsoid defined by the datum (WGS-84)"
  height: Float
  """
   The second element of the Coordinate for geographic CRS, degrees North of the equator
   Range -90.0 to 90.0
  """
  latitude: Float
  """
   The first element of the Coordinate for geographic CRS, degrees East of the prime meridian
   Range -180.0 to 180.0
  """
  longitude: Float
  """
   The internal Neo4j ID for the CRS
   One of:
   * `4326`: represents CRS `wgs-84`
   * `4979`: represents CRS `wgs-84-3d`
   * `7203`: represents CRS `cartesian`
   * `9157`: represents CRS `cartesian-3d`
  """
  srid: Int
  " The first element of the Coordinate"
  x: Float
  " The second element of the Coordinate"
  y: Float
  " The third element of the Coordinate"
  z: Float
}

type _Neo4jTime {
  formatted: String
  hour: Int
  microsecond: Int
  millisecond: Int
  minute: Int
  nanosecond: Int
  second: Int
  timezone: String
}

enum MovieType {
  action
  documentary
}

enum RelationDirection {
  BOTH
  IN
  OUT
}

enum _MovieOrdering {
  id_asc
  id_desc
  movieType_asc
  movieType_desc
}

enum _Person0Ordering {
  born_asc
  born_desc
  location_asc
  location_desc
  name_asc
  name_desc
}

scalar DynamicProperties

input _Neo4jDateInput {
  day: Int
  formatted: String
  month: Int
  year: Int
}

input _Neo4jDateTimeInput {
  day: Int
  formatted: String
  hour: Int
  microsecond: Int
  millisecond: Int
  minute: Int
  month: Int
  nanosecond: Int
  second: Int
  timezone: String
  year: Int
}

input _Neo4jLocalDateTimeInput {
  day: Int
  formatted: String
  hour: Int
  microsecond: Int
  millisecond: Int
  minute: Int
  month: Int
  nanosecond: Int
  second: Int
  year: Int
}

input _Neo4jLocalTimeInput {
  formatted: String
  hour: Int
  microsecond: Int
  millisecond: Int
  minute: Int
  nanosecond: Int
  second: Int
}

input _Neo4jPointInput {
  crs: String
  height: Float
  latitude: Float
  longitude: Float
  srid: Int
  x: Float
  y: Float
  z: Float
}

Disable Mutations

Configuration
{
  "query": {
    "enabled": true,
    "exclude": [
      "Person0"
    ]
  },
  "mutation": {
    "enabled": false
  }
}
Augmented Schema
schema {
  query: Query
}

interface HasMovies {
  movies(filter: _MovieFilter, first: Int, id: ID, id_contains: ID, id_ends_with: ID, id_gt: ID, id_gte: ID, id_in: [ID!], id_lt: ID, id_lte: ID, id_matches: ID, id_not: ID, id_not_contains: ID, id_not_ends_with: ID, id_not_in: [ID!], id_not_starts_with: ID, id_starts_with: ID, movieType: MovieType, movieType_in: [MovieType!], movieType_not: MovieType, movieType_not_in: [MovieType!], offset: Int, orderBy: [_MovieOrdering!]): [Movie]
}

type Knows0 {
  id: ID!
  json: DynamicProperties
  knows: Person0!
  source: Person0!
}

type Knows1 {
  id: ID!
  knows: Person0!
  source: Person0!
}

type Knows4 {
  _id: ID!
  json: DynamicProperties
  knows: Person4!
  source: Person4!
}

type Movie {
  id: ID!
  movieType: MovieType
  publishedBy: Publisher
}

type Person0 {
  born: _Neo4jTime
  location: _Neo4jPoint
  name: String
}

type Person1 {
  born: _Neo4jDate
  name: String
}

type Person2 {
  age: Int
  born: _Neo4jDateTime
  name: String
}

type Person3 {
  born: _Neo4jLocalTime
  name: String!
}

type Person4 {
  born: _Neo4jLocalDateTime
  id: ID!
  name: String
}

type Person5 implements HasMovies {
  id: ID!
  movies(filter: _MovieFilter, first: Int, id: ID, id_contains: ID, id_ends_with: ID, id_gt: ID, id_gte: ID, id_in: [ID!], id_lt: ID, id_lte: ID, id_matches: ID, id_not: ID, id_not_contains: ID, id_not_ends_with: ID, id_not_in: [ID!], id_not_starts_with: ID, id_starts_with: ID, movieType: MovieType, movieType_in: [MovieType!], movieType_not: MovieType, movieType_not_in: [MovieType!], offset: Int, orderBy: [_MovieOrdering!]): [Movie]
}

type Publisher {
  name: ID!
}

type Query {
  PersonByLocation(first: Int, location: _Neo4jPointInput, offset: Int, orderBy: [_Person0Ordering!]): [Person0!]!
  hasMovies(filter: _HasMoviesFilter, first: Int, offset: Int): [HasMovies!]!
  knows0(filter: _Knows0Filter, first: Int, id: ID, id_contains: ID, id_ends_with: ID, id_gt: ID, id_gte: ID, id_in: [ID!], id_lt: ID, id_lte: ID, id_matches: ID, id_not: ID, id_not_contains: ID, id_not_ends_with: ID, id_not_in: [ID!], id_not_starts_with: ID, id_starts_with: ID, offset: Int, orderBy: [_Knows0Ordering!]): [Knows0!]!
  knows1(filter: _Knows1Filter, first: Int, id: ID, id_contains: ID, id_ends_with: ID, id_gt: ID, id_gte: ID, id_in: [ID!], id_lt: ID, id_lte: ID, id_matches: ID, id_not: ID, id_not_contains: ID, id_not_ends_with: ID, id_not_in: [ID!], id_not_starts_with: ID, id_starts_with: ID, offset: Int, orderBy: [_Knows1Ordering!]): [Knows1!]!
  knows4(_id: ID, filter: _Knows4Filter, first: Int, offset: Int, orderBy: [_Knows4Ordering!]): [Knows4!]!
  movie(filter: _MovieFilter, first: Int, id: ID, id_contains: ID, id_ends_with: ID, id_gt: ID, id_gte: ID, id_in: [ID!], id_lt: ID, id_lte: ID, id_matches: ID, id_not: ID, id_not_contains: ID, id_not_ends_with: ID, id_not_in: [ID!], id_not_starts_with: ID, id_starts_with: ID, movieType: MovieType, movieType_in: [MovieType!], movieType_not: MovieType, movieType_not_in: [MovieType!], offset: Int, orderBy: [_MovieOrdering!]): [Movie!]!
  person1(born: _Neo4jDateInput, born_in: [_Neo4jDateInput!], born_not: _Neo4jDateInput, born_not_in: [_Neo4jDateInput!], filter: _Person1Filter, first: Int, name: String, name_contains: String, name_ends_with: String, name_gt: String, name_gte: String, name_in: [String!], name_lt: String, name_lte: String, name_matches: String, name_not: String, name_not_contains: String, name_not_ends_with: String, name_not_in: [String!], name_not_starts_with: String, name_starts_with: String, offset: Int, orderBy: [_Person1Ordering!]): [Person1!]!
  person2(age: Int, age_gt: Int, age_gte: Int, age_in: [Int!], age_lt: Int, age_lte: Int, age_not: Int, age_not_in: [Int!], born: _Neo4jDateTimeInput, born_in: [_Neo4jDateTimeInput!], born_not: _Neo4jDateTimeInput, born_not_in: [_Neo4jDateTimeInput!], filter: _Person2Filter, first: Int, name: String, name_contains: String, name_ends_with: String, name_gt: String, name_gte: String, name_in: [String!], name_lt: String, name_lte: String, name_matches: String, name_not: String, name_not_contains: String, name_not_ends_with: String, name_not_in: [String!], name_not_starts_with: String, name_starts_with: String, offset: Int, orderBy: [_Person2Ordering!]): [Person2!]!
  person3(born: _Neo4jLocalTimeInput, born_in: [_Neo4jLocalTimeInput!], born_not: _Neo4jLocalTimeInput, born_not_in: [_Neo4jLocalTimeInput!], filter: _Person3Filter, first: Int, name: String, name_contains: String, name_ends_with: String, name_gt: String, name_gte: String, name_in: [String!], name_lt: String, name_lte: String, name_matches: String, name_not: String, name_not_contains: String, name_not_ends_with: String, name_not_in: [String!], name_not_starts_with: String, name_starts_with: String, offset: Int, orderBy: [_Person3Ordering!]): [Person3!]!
  person4(born: _Neo4jLocalDateTimeInput, born_in: [_Neo4jLocalDateTimeInput!], born_not: _Neo4jLocalDateTimeInput, born_not_in: [_Neo4jLocalDateTimeInput!], filter: _Person4Filter, first: Int, id: ID, id_contains: ID, id_ends_with: ID, id_gt: ID, id_gte: ID, id_in: [ID!], id_lt: ID, id_lte: ID, id_matches: ID, id_not: ID, id_not_contains: ID, id_not_ends_with: ID, id_not_in: [ID!], id_not_starts_with: ID, id_starts_with: ID, name: String, name_contains: String, name_ends_with: String, name_gt: String, name_gte: String, name_in: [String!], name_lt: String, name_lte: String, name_matches: String, name_not: String, name_not_contains: String, name_not_ends_with: String, name_not_in: [String!], name_not_starts_with: String, name_starts_with: String, offset: Int, orderBy: [_Person4Ordering!]): [Person4!]!
  person5(filter: _Person5Filter, first: Int, id: ID, id_contains: ID, id_ends_with: ID, id_gt: ID, id_gte: ID, id_in: [ID!], id_lt: ID, id_lte: ID, id_matches: ID, id_not: ID, id_not_contains: ID, id_not_ends_with: ID, id_not_in: [ID!], id_not_starts_with: ID, id_starts_with: ID, offset: Int, orderBy: [_Person5Ordering!]): [Person5!]!
  publisher(filter: _PublisherFilter, first: Int, name: ID, name_contains: ID, name_ends_with: ID, name_gt: ID, name_gte: ID, name_in: [ID!], name_lt: ID, name_lte: ID, name_matches: ID, name_not: ID, name_not_contains: ID, name_not_ends_with: ID, name_not_in: [ID!], name_not_starts_with: ID, name_starts_with: ID, offset: Int, orderBy: [_PublisherOrdering!]): [Publisher!]!
}

type _Neo4jDate {
  day: Int
  formatted: String
  month: Int
  year: Int
}

type _Neo4jDateTime {
  day: Int
  formatted: String
  hour: Int
  microsecond: Int
  millisecond: Int
  minute: Int
  month: Int
  nanosecond: Int
  second: Int
  timezone: String
  year: Int
}

type _Neo4jLocalDateTime {
  day: Int
  formatted: String
  hour: Int
  microsecond: Int
  millisecond: Int
  minute: Int
  month: Int
  nanosecond: Int
  second: Int
  year: Int
}

type _Neo4jLocalTime {
  formatted: String
  hour: Int
  microsecond: Int
  millisecond: Int
  minute: Int
  nanosecond: Int
  second: Int
}

type _Neo4jPoint {
  """
   The coordinate reference systems (CRS)
   -------------------------------------
   posible values:
   * `wgs-84`: A 2D geographic point in the WGS 84 CRS is specified in one of two ways:
     * longitude and latitude (if these are specified, and the crs is not, then the crs is assumed to be WGS-84)
     * x and y (in this case the crs must be specified, or will be assumed to be Cartesian)
   * `wgs-84-3d`: A 3D geographic point in the WGS 84 CRS is specified one of in two ways:
     * longitude, latitude and either height or z (if these are specified, and the crs is not, then the crs is assumed to be WGS-84-3D)
     * x, y and z (in this case the crs must be specified, or will be assumed to be Cartesian-3D)
   * `cartesian`: A 2D point in the Cartesian CRS is specified with a map containing x and y coordinate values
   * `cartesian-3d`: A 3D point in the Cartesian CRS is specified with a map containing x, y and z coordinate values
  """
  crs: String
  " The third element of the Coordinate for geographic CRS, meters above the ellipsoid defined by the datum (WGS-84)"
  height: Float
  """
   The second element of the Coordinate for geographic CRS, degrees North of the equator
   Range -90.0 to 90.0
  """
  latitude: Float
  """
   The first element of the Coordinate for geographic CRS, degrees East of the prime meridian
   Range -180.0 to 180.0
  """
  longitude: Float
  """
   The internal Neo4j ID for the CRS
   One of:
   * `4326`: represents CRS `wgs-84`
   * `4979`: represents CRS `wgs-84-3d`
   * `7203`: represents CRS `cartesian`
   * `9157`: represents CRS `cartesian-3d`
  """
  srid: Int
  " The first element of the Coordinate"
  x: Float
  " The second element of the Coordinate"
  y: Float
  " The third element of the Coordinate"
  z: Float
}

type _Neo4jTime {
  formatted: String
  hour: Int
  microsecond: Int
  millisecond: Int
  minute: Int
  nanosecond: Int
  second: Int
  timezone: String
}

enum MovieType {
  action
  documentary
}

enum RelationDirection {
  BOTH
  IN
  OUT
}

enum _Knows0Ordering {
  id_asc
  id_desc
  json_asc
  json_desc
}

enum _Knows1Ordering {
  id_asc
  id_desc
}

enum _Knows4Ordering {
  _id_asc
  _id_desc
  json_asc
  json_desc
}

enum _MovieOrdering {
  id_asc
  id_desc
  movieType_asc
  movieType_desc
}

enum _Person0Ordering {
  born_asc
  born_desc
  location_asc
  location_desc
  name_asc
  name_desc
}

enum _Person1Ordering {
  born_asc
  born_desc
  name_asc
  name_desc
}

enum _Person2Ordering {
  age_asc
  age_desc
  born_asc
  born_desc
  name_asc
  name_desc
}

enum _Person3Ordering {
  born_asc
  born_desc
  name_asc
  name_desc
}

enum _Person4Ordering {
  born_asc
  born_desc
  id_asc
  id_desc
  name_asc
  name_desc
}

enum _Person5Ordering {
  id_asc
  id_desc
}

enum _PublisherOrdering {
  name_asc
  name_desc
}

scalar DynamicProperties

input _HasMoviesFilter {
  AND: [_HasMoviesFilter!]
  NOT: [_HasMoviesFilter!]
  OR: [_HasMoviesFilter!]
  "Filters only those `HasMovies` for which all `movies`-relationship matches this filter. If `null` is passed to this field, only those `HasMovies` will be filtered which has no `movies`-relations"
  movies: _MovieFilter
  "Filters only those `HasMovies` for which all `movies`-relationships matches this filter"
  movies_every: _MovieFilter
  "Filters only those `HasMovies` for which none of the `movies`-relationships matches this filter"
  movies_none: _MovieFilter
  "Filters only those `HasMovies` for which all `movies`-relationship does not match this filter. If `null` is passed to this field, only those `HasMovies` will be filtered which has any `movies`-relation"
  movies_not: _MovieFilter
  "Filters only those `HasMovies` for which exactly one `movies`-relationship matches this filter"
  movies_single: _MovieFilter
  "Filters only those `HasMovies` for which at least one `movies`-relationship matches this filter"
  movies_some: _MovieFilter
}

input _Knows0Filter {
  AND: [_Knows0Filter!]
  NOT: [_Knows0Filter!]
  OR: [_Knows0Filter!]
  id: ID
  id_contains: ID
  id_ends_with: ID
  id_gt: ID
  id_gte: ID
  id_in: [ID]
  id_lt: ID
  id_lte: ID
  id_matches: ID
  id_not: ID
  id_not_contains: ID
  id_not_ends_with: ID
  id_not_in: [ID]
  id_not_starts_with: ID
  id_starts_with: ID
  "Filters only those `Knows0` for which the `knows`-relationship matches this filter. If `null` is passed to this field, only those `Knows0` will be filtered which has no `knows`-relations"
  knows: _Person0Filter
  "@deprecated Use the `knows_not`-field"
  knows_none: _Person0Filter
  "Filters only those `Knows0` for which the `knows`-relationship does not match this filter. If `null` is passed to this field, only those `Knows0` will be filtered which has any `knows`-relation"
  knows_not: _Person0Filter
  "@deprecated Use the `knows`-field directly (without any suffix)"
  knows_single: _Person0Filter
  "@deprecated Use the `knows`-field directly (without any suffix)"
  knows_some: _Person0Filter
  "Filters only those `Knows0` for which the `source`-relationship matches this filter. If `null` is passed to this field, only those `Knows0` will be filtered which has no `source`-relations"
  source: _Person0Filter
  "@deprecated Use the `source_not`-field"
  source_none: _Person0Filter
  "Filters only those `Knows0` for which the `source`-relationship does not match this filter. If `null` is passed to this field, only those `Knows0` will be filtered which has any `source`-relation"
  source_not: _Person0Filter
  "@deprecated Use the `source`-field directly (without any suffix)"
  source_single: _Person0Filter
  "@deprecated Use the `source`-field directly (without any suffix)"
  source_some: _Person0Filter
}

input _Knows1Filter {
  AND: [_Knows1Filter!]
  NOT: [_Knows1Filter!]
  OR: [_Knows1Filter!]
  id: ID
  id_contains: ID
  id_ends_with: ID
  id_gt: ID
  id_gte: ID
  id_in: [ID]
  id_lt: ID
  id_lte: ID
  id_matches: ID
  id_not: ID
  id_not_contains: ID
  id_not_ends_with: ID
  id_not_in: [ID]
  id_not_starts_with: ID
  id_starts_with: ID
  "Filters only those `Knows1` for which the `knows`-relationship matches this filter. If `null` is passed to this field, only those `Knows1` will be filtered which has no `knows`-relations"
  knows: _Person0Filter
  "@deprecated Use the `knows_not`-field"
  knows_none: _Person0Filter
  "Filters only those `Knows1` for which the `knows`-relationship does not match this filter. If `null` is passed to this field, only those `Knows1` will be filtered which has any `knows`-relation"
  knows_not: _Person0Filter
  "@deprecated Use the `knows`-field directly (without any suffix)"
  knows_single: _Person0Filter
  "@deprecated Use the `knows`-field directly (without any suffix)"
  knows_some: _Person0Filter
  "Filters only those `Knows1` for which the `source`-relationship matches this filter. If `null` is passed to this field, only those `Knows1` will be filtered which has no `source`-relations"
  source: _Person0Filter
  "@deprecated Use the `source_not`-field"
  source_none: _Person0Filter
  "Filters only those `Knows1` for which the `source`-relationship does not match this filter. If `null` is passed to this field, only those `Knows1` will be filtered which has any `source`-relation"
  source_not: _Person0Filter
  "@deprecated Use the `source`-field directly (without any suffix)"
  source_single: _Person0Filter
  "@deprecated Use the `source`-field directly (without any suffix)"
  source_some: _Person0Filter
}

input _Knows4Filter {
  AND: [_Knows4Filter!]
  NOT: [_Knows4Filter!]
  OR: [_Knows4Filter!]
  _id: ID
  _id_contains: ID
  _id_ends_with: ID
  _id_gt: ID
  _id_gte: ID
  _id_in: [ID]
  _id_lt: ID
  _id_lte: ID
  _id_matches: ID
  _id_not: ID
  _id_not_contains: ID
  _id_not_ends_with: ID
  _id_not_in: [ID]
  _id_not_starts_with: ID
  _id_starts_with: ID
  "Filters only those `Knows4` for which the `knows`-relationship matches this filter. If `null` is passed to this field, only those `Knows4` will be filtered which has no `knows`-relations"
  knows: _Person4Filter
  "@deprecated Use the `knows_not`-field"
  knows_none: _Person4Filter
  "Filters only those `Knows4` for which the `knows`-relationship does not match this filter. If `null` is passed to this field, only those `Knows4` will be filtered which has any `knows`-relation"
  knows_not: _Person4Filter
  "@deprecated Use the `knows`-field directly (without any suffix)"
  knows_single: _Person4Filter
  "@deprecated Use the `knows`-field directly (without any suffix)"
  knows_some: _Person4Filter
  "Filters only those `Knows4` for which the `source`-relationship matches this filter. If `null` is passed to this field, only those `Knows4` will be filtered which has no `source`-relations"
  source: _Person4Filter
  "@deprecated Use the `source_not`-field"
  source_none: _Person4Filter
  "Filters only those `Knows4` for which the `source`-relationship does not match this filter. If `null` is passed to this field, only those `Knows4` will be filtered which has any `source`-relation"
  source_not: _Person4Filter
  "@deprecated Use the `source`-field directly (without any suffix)"
  source_single: _Person4Filter
  "@deprecated Use the `source`-field directly (without any suffix)"
  source_some: _Person4Filter
}

input _MovieFilter {
  AND: [_MovieFilter!]
  NOT: [_MovieFilter!]
  OR: [_MovieFilter!]
  id: ID
  id_contains: ID
  id_ends_with: ID
  id_gt: ID
  id_gte: ID
  id_in: [ID]
  id_lt: ID
  id_lte: ID
  id_matches: ID
  id_not: ID
  id_not_contains: ID
  id_not_ends_with: ID
  id_not_in: [ID]
  id_not_starts_with: ID
  id_starts_with: ID
  movieType: MovieType
  movieType_in: [MovieType]
  movieType_not: MovieType
  movieType_not_in: [MovieType]
  "Filters only those `Movie` for which the `publishedBy`-relationship matches this filter. If `null` is passed to this field, only those `Movie` will be filtered which has no `publishedBy`-relations"
  publishedBy: _PublisherFilter
  "@deprecated Use the `publishedBy_not`-field"
  publishedBy_none: _PublisherFilter
  "Filters only those `Movie` for which the `publishedBy`-relationship does not match this filter. If `null` is passed to this field, only those `Movie` will be filtered which has any `publishedBy`-relation"
  publishedBy_not: _PublisherFilter
  "@deprecated Use the `publishedBy`-field directly (without any suffix)"
  publishedBy_single: _PublisherFilter
  "@deprecated Use the `publishedBy`-field directly (without any suffix)"
  publishedBy_some: _PublisherFilter
}

input _Neo4jDateInput {
  day: Int
  formatted: String
  month: Int
  year: Int
}

input _Neo4jDateTimeInput {
  day: Int
  formatted: String
  hour: Int
  microsecond: Int
  millisecond: Int
  minute: Int
  month: Int
  nanosecond: Int
  second: Int
  timezone: String
  year: Int
}

input _Neo4jLocalDateTimeInput {
  day: Int
  formatted: String
  hour: Int
  microsecond: Int
  millisecond: Int
  minute: Int
  month: Int
  nanosecond: Int
  second: Int
  year: Int
}

input _Neo4jLocalTimeInput {
  formatted: String
  hour: Int
  microsecond: Int
  millisecond: Int
  minute: Int
  nanosecond: Int
  second: Int
}

input _Neo4jPointDistanceFilter {
  distance: Float!
  point: _Neo4jPointInput!
}

input _Neo4jPointInput {
  crs: String
  height: Float
  latitude: Float
  longitude: Float
  srid: Int
  x: Float
  y: Float
  z: Float
}

input _Neo4jTimeInput {
  formatted: String
  hour: Int
  microsecond: Int
  millisecond: Int
  minute: Int
  nanosecond: Int
  second: Int
  timezone: String
}

input _Person0Filter {
  AND: [_Person0Filter!]
  NOT: [_Person0Filter!]
  OR: [_Person0Filter!]
  born: _Neo4jTimeInput
  born_in: [_Neo4jTimeInput]
  born_not: _Neo4jTimeInput
  born_not_in: [_Neo4jTimeInput]
  location: _Neo4jPointInput
  location_distance: _Neo4jPointDistanceFilter
  location_distance_gt: _Neo4jPointDistanceFilter
  location_distance_gte: _Neo4jPointDistanceFilter
  location_distance_lt: _Neo4jPointDistanceFilter
  location_distance_lte: _Neo4jPointDistanceFilter
  location_not: _Neo4jPointInput
  name: String
  name_contains: String
  name_ends_with: String
  name_gt: String
  name_gte: String
  name_in: [String]
  name_lt: String
  name_lte: String
  name_matches: String
  name_not: String
  name_not_contains: String
  name_not_ends_with: String
  name_not_in: [String]
  name_not_starts_with: String
  name_starts_with: String
}

input _Person1Filter {
  AND: [_Person1Filter!]
  NOT: [_Person1Filter!]
  OR: [_Person1Filter!]
  born: _Neo4jDateInput
  born_in: [_Neo4jDateInput]
  born_not: _Neo4jDateInput
  born_not_in: [_Neo4jDateInput]
  name: String
  name_contains: String
  name_ends_with: String
  name_gt: String
  name_gte: String
  name_in: [String]
  name_lt: String
  name_lte: String
  name_matches: String
  name_not: String
  name_not_contains: String
  name_not_ends_with: String
  name_not_in: [String]
  name_not_starts_with: String
  name_starts_with: String
}

input _Person2Filter {
  AND: [_Person2Filter!]
  NOT: [_Person2Filter!]
  OR: [_Person2Filter!]
  age: Int
  age_gt: Int
  age_gte: Int
  age_in: [Int]
  age_lt: Int
  age_lte: Int
  age_not: Int
  age_not_in: [Int]
  born: _Neo4jDateTimeInput
  born_in: [_Neo4jDateTimeInput]
  born_not: _Neo4jDateTimeInput
  born_not_in: [_Neo4jDateTimeInput]
  name: String
  name_contains: String
  name_ends_with: String
  name_gt: String
  name_gte: String
  name_in: [String]
  name_lt: String
  name_lte: String
  name_matches: String
  name_not: String
  name_not_contains: String
  name_not_ends_with: String
  name_not_in: [String]
  name_not_starts_with: String
  name_starts_with: String
}

input _Person3Filter {
  AND: [_Person3Filter!]
  NOT: [_Person3Filter!]
  OR: [_Person3Filter!]
  born: _Neo4jLocalTimeInput
  born_in: [_Neo4jLocalTimeInput]
  born_not: _Neo4jLocalTimeInput
  born_not_in: [_Neo4jLocalTimeInput]
  name: String
  name_contains: String
  name_ends_with: String
  name_gt: String
  name_gte: String
  name_in: [String]
  name_lt: String
  name_lte: String
  name_matches: String
  name_not: String
  name_not_contains: String
  name_not_ends_with: String
  name_not_in: [String]
  name_not_starts_with: String
  name_starts_with: String
}

input _Person4Filter {
  AND: [_Person4Filter!]
  NOT: [_Person4Filter!]
  OR: [_Person4Filter!]
  born: _Neo4jLocalDateTimeInput
  born_in: [_Neo4jLocalDateTimeInput]
  born_not: _Neo4jLocalDateTimeInput
  born_not_in: [_Neo4jLocalDateTimeInput]
  id: ID
  id_contains: ID
  id_ends_with: ID
  id_gt: ID
  id_gte: ID
  id_in: [ID]
  id_lt: ID
  id_lte: ID
  id_matches: ID
  id_not: ID
  id_not_contains: ID
  id_not_ends_with: ID
  id_not_in: [ID]
  id_not_starts_with: ID
  id_starts_with: ID
  name: String
  name_contains: String
  name_ends_with: String
  name_gt: String
  name_gte: String
  name_in: [String]
  name_lt: String
  name_lte: String
  name_matches: String
  name_not: String
  name_not_contains: String
  name_not_ends_with: String
  name_not_in: [String]
  name_not_starts_with: String
  name_starts_with: String
}

input _Person5Filter {
  AND: [_Person5Filter!]
  NOT: [_Person5Filter!]
  OR: [_Person5Filter!]
  id: ID
  id_contains: ID
  id_ends_with: ID
  id_gt: ID
  id_gte: ID
  id_in: [ID]
  id_lt: ID
  id_lte: ID
  id_matches: ID
  id_not: ID
  id_not_contains: ID
  id_not_ends_with: ID
  id_not_in: [ID]
  id_not_starts_with: ID
  id_starts_with: ID
  "Filters only those `Person5` for which all `movies`-relationship matches this filter. If `null` is passed to this field, only those `Person5` will be filtered which has no `movies`-relations"
  movies: _MovieFilter
  "Filters only those `Person5` for which all `movies`-relationships matches this filter"
  movies_every: _MovieFilter
  "Filters only those `Person5` for which none of the `movies`-relationships matches this filter"
  movies_none: _MovieFilter
  "Filters only those `Person5` for which all `movies`-relationship does not match this filter. If `null` is passed to this field, only those `Person5` will be filtered which has any `movies`-relation"
  movies_not: _MovieFilter
  "Filters only those `Person5` for which exactly one `movies`-relationship matches this filter"
  movies_single: _MovieFilter
  "Filters only those `Person5` for which at least one `movies`-relationship matches this filter"
  movies_some: _MovieFilter
}

input _PublisherFilter {
  AND: [_PublisherFilter!]
  NOT: [_PublisherFilter!]
  OR: [_PublisherFilter!]
  name: ID
  name_contains: ID
  name_ends_with: ID
  name_gt: ID
  name_gte: ID
  name_in: [ID]
  name_lt: ID
  name_lte: ID
  name_matches: ID
  name_not: ID
  name_not_contains: ID
  name_not_ends_with: ID
  name_not_in: [ID]
  name_not_starts_with: ID
  name_starts_with: ID
}

Filter on Relation Mutations

Configuration
{
  "query": {
    "enabled": false
  },
  "mutation": {
    "enabled": true,
    "exclude": [
      "Person0",
      "Person1",
      "Person2",
      "Person3",
      "Person4"
    ]
  }
}
Augmented Schema
schema {
  query: Query
  mutation: Mutation
}

interface HasMovies {
  movies(first: Int, offset: Int, orderBy: [_MovieOrdering!]): [Movie]
}

type Knows0 {
  id: ID!
  json: DynamicProperties
  knows: Person0!
  source: Person0!
}

type Knows1 {
  id: ID!
  knows: Person0!
  source: Person0!
}

type Knows4 {
  _id: ID!
  json: DynamicProperties
  knows: Person4!
  source: Person4!
}

type Movie {
  id: ID!
  movieType: MovieType
  publishedBy: Publisher
}

type Mutation {
  addMoviePublishedBy(id: ID!, publishedBy: ID!): Movie!
  addPerson5Movies(id: ID!, movies: [ID!]!): Person5!
  createKnows4(json: DynamicProperties, knows_id: ID!, source_id: ID!): Knows4!
  createMovie(id: ID!, movieType: MovieType): Movie!
  createPerson5(id: ID!): Person5!
  createPublisher(name: ID!): Publisher!
  "Deletes Knows0 and returns the type itself"
  deleteKnows0(id: ID!): Knows0
  "Deletes Knows1 and returns the type itself"
  deleteKnows1(id: ID!): Knows1
  "Deletes Knows4 and returns the type itself"
  deleteKnows4(_id: ID!): Knows4
  "Deletes Movie and returns the type itself"
  deleteMovie(id: ID!): Movie
  deleteMoviePublishedBy(id: ID!, publishedBy: ID!): Movie
  "Deletes Person5 and returns the type itself"
  deletePerson5(id: ID!): Person5
  deletePerson5Movies(id: ID!, movies: [ID!]!): Person5
  "Deletes Publisher and returns the type itself"
  deletePublisher(name: ID!): Publisher
  mergeKnows0(id: ID!, json: DynamicProperties): Knows0!
  mergeKnows4(_id: ID!, json: DynamicProperties): Knows4!
  mergeMovie(id: ID!, movieType: MovieType): Movie!
  updateKnows0(id: ID!, json: DynamicProperties): Knows0
  updateKnows4(_id: ID!, json: DynamicProperties): Knows4
  updateMovie(id: ID!, movieType: MovieType): Movie
}

type Person0 {
  born: _Neo4jTime
  location: _Neo4jPoint
  name: String
}

type Person1 {
  born: _Neo4jDate
  name: String
}

type Person2 {
  age: Int
  born: _Neo4jDateTime
  name: String
}

type Person3 {
  born: _Neo4jLocalTime
  name: String!
}

type Person4 {
  born: _Neo4jLocalDateTime
  id: ID!
  name: String
}

type Person5 implements HasMovies {
  id: ID!
  movies(first: Int, offset: Int, orderBy: [_MovieOrdering!]): [Movie]
}

type Publisher {
  name: ID!
}

type Query {
  PersonByLocation(first: Int, location: _Neo4jPointInput, offset: Int, orderBy: [_Person0Ordering!]): [Person0!]!
}

type _Neo4jDate {
  day: Int
  formatted: String
  month: Int
  year: Int
}

type _Neo4jDateTime {
  day: Int
  formatted: String
  hour: Int
  microsecond: Int
  millisecond: Int
  minute: Int
  month: Int
  nanosecond: Int
  second: Int
  timezone: String
  year: Int
}

type _Neo4jLocalDateTime {
  day: Int
  formatted: String
  hour: Int
  microsecond: Int
  millisecond: Int
  minute: Int
  month: Int
  nanosecond: Int
  second: Int
  year: Int
}

type _Neo4jLocalTime {
  formatted: String
  hour: Int
  microsecond: Int
  millisecond: Int
  minute: Int
  nanosecond: Int
  second: Int
}

type _Neo4jPoint {
  """
   The coordinate reference systems (CRS)
   -------------------------------------
   posible values:
   * `wgs-84`: A 2D geographic point in the WGS 84 CRS is specified in one of two ways:
     * longitude and latitude (if these are specified, and the crs is not, then the crs is assumed to be WGS-84)
     * x and y (in this case the crs must be specified, or will be assumed to be Cartesian)
   * `wgs-84-3d`: A 3D geographic point in the WGS 84 CRS is specified one of in two ways:
     * longitude, latitude and either height or z (if these are specified, and the crs is not, then the crs is assumed to be WGS-84-3D)
     * x, y and z (in this case the crs must be specified, or will be assumed to be Cartesian-3D)
   * `cartesian`: A 2D point in the Cartesian CRS is specified with a map containing x and y coordinate values
   * `cartesian-3d`: A 3D point in the Cartesian CRS is specified with a map containing x, y and z coordinate values
  """
  crs: String
  " The third element of the Coordinate for geographic CRS, meters above the ellipsoid defined by the datum (WGS-84)"
  height: Float
  """
   The second element of the Coordinate for geographic CRS, degrees North of the equator
   Range -90.0 to 90.0
  """
  latitude: Float
  """
   The first element of the Coordinate for geographic CRS, degrees East of the prime meridian
   Range -180.0 to 180.0
  """
  longitude: Float
  """
   The internal Neo4j ID for the CRS
   One of:
   * `4326`: represents CRS `wgs-84`
   * `4979`: represents CRS `wgs-84-3d`
   * `7203`: represents CRS `cartesian`
   * `9157`: represents CRS `cartesian-3d`
  """
  srid: Int
  " The first element of the Coordinate"
  x: Float
  " The second element of the Coordinate"
  y: Float
  " The third element of the Coordinate"
  z: Float
}

type _Neo4jTime {
  formatted: String
  hour: Int
  microsecond: Int
  millisecond: Int
  minute: Int
  nanosecond: Int
  second: Int
  timezone: String
}

enum MovieType {
  action
  documentary
}

enum RelationDirection {
  BOTH
  IN
  OUT
}

enum _MovieOrdering {
  id_asc
  id_desc
  movieType_asc
  movieType_desc
}

enum _Person0Ordering {
  born_asc
  born_desc
  location_asc
  location_desc
  name_asc
  name_desc
}

scalar DynamicProperties

input _Neo4jPointInput {
  crs: String
  height: Float
  latitude: Float
  longitude: Float
  srid: Int
  x: Float
  y: Float
  z: Float
}