From 2533b0f4ce05338f4817e6bbedfe1c2adebe9ff6 Mon Sep 17 00:00:00 2001 From: angrykoala Date: Thu, 12 Dec 2024 11:36:36 +0000 Subject: [PATCH] Remove lists from aggregation filter generation --- .../src/schema/generation/aggregate-types.ts | 5 +- ...-aggregation-filter-from-attribute-type.ts | 54 +- .../graphql/tests/schema/aggregations.test.ts | 1195 +++++++++++++++++ 3 files changed, 1203 insertions(+), 51 deletions(-) diff --git a/packages/graphql/src/schema/generation/aggregate-types.ts b/packages/graphql/src/schema/generation/aggregate-types.ts index 1c77f09c2b4..3dec6b47823 100644 --- a/packages/graphql/src/schema/generation/aggregate-types.ts +++ b/packages/graphql/src/schema/generation/aggregate-types.ts @@ -193,8 +193,9 @@ function makeAggregationFields( const fields: InputTypeComposerFieldConfigMapDefinition = {}; for (const attribute of attributes) { addAggregationFieldsByType(attribute, userDefinedDirectivesOnTargetFields?.get(attribute.name), fields); - - fields[attribute.name] = getAggregationFilterFromAttributeType(attribute); + if (attribute.isAggregationWhereField()) { + fields[attribute.name] = getAggregationFilterFromAttributeType(attribute); + } } return fields; } diff --git a/packages/graphql/src/schema/generation/get-aggregation-filter-from-attribute-type.ts b/packages/graphql/src/schema/generation/get-aggregation-filter-from-attribute-type.ts index c2dac152712..06095d8fcf4 100644 --- a/packages/graphql/src/schema/generation/get-aggregation-filter-from-attribute-type.ts +++ b/packages/graphql/src/schema/generation/get-aggregation-filter-from-attribute-type.ts @@ -31,83 +31,39 @@ import { TimeScalarAggregationFilters } from "../../graphql/input-objects/generi import type { AttributeAdapter } from "../../schema-model/attribute/model-adapters/AttributeAdapter"; export function getAggregationFilterFromAttributeType(attribute: AttributeAdapter): GraphQLInputObjectType | string { - // // NOTE: static types returned here must be added to schema-validation > validateUserDefinition - // if (attribute.typeHelper.isBoolean()) { - // if (attribute.typeHelper.isList()) { - // return BooleanListFilters; - // } - // return BooleanScalarFilters; - // } + if (attribute.typeHelper.isList()) { + throw new Error("List types not available for aggregations"); + } + if (attribute.typeHelper.isID()) { - // if (attribute.typeHelper.isList()) { - // return IDListFilters; - // } return IDScalarAggregationFilters; } if (attribute.typeHelper.isString()) { - // if (attribute.typeHelper.isList()) { - // return StringListFilters; - // } return StringScalarAggregationFilters; } if (attribute.typeHelper.isInt()) { - // if (attribute.typeHelper.isList()) { - // return IntListFilters; - // } return IntScalarAggregationFilters; } if (attribute.typeHelper.isFloat()) { - // if (attribute.typeHelper.isList()) { - // return FloatListFilters; - // } return FloatScalarAggregationFilters; } if (attribute.typeHelper.isBigInt()) { - // if (attribute.typeHelper.isList()) { - // return BigIntListFilters; - // } return BigIntScalarAggregationFilters; } if (attribute.typeHelper.isTime()) { - // if (attribute.typeHelper.isList()) { - // return TimeListFilters; - // } return TimeScalarAggregationFilters; } - // if (attribute.typeHelper.isPoint()) { - // if (attribute.typeHelper.isList()) { - // return PointListFilters; - // } - // return PointFilters; - // } - // if (attribute.typeHelper.isCartesianPoint()) { - // if (attribute.typeHelper.isList()) { - // return CartesianPointListFilters; - // } - // return CartesianPointFilters; - // } + if (attribute.typeHelper.isDateTime()) { - // if (attribute.typeHelper.isList()) { - // return DateTimeListFilters; - // } return DateTimeScalarAggregationFilters; } if (attribute.typeHelper.isLocalTime()) { - // if (attribute.typeHelper.isList()) { - // return LocalTimeListFilters; - // } return LocalTimeScalarAggregationFilters; } if (attribute.typeHelper.isLocalDateTime()) { - // if (attribute.typeHelper.isList()) { - // return LocalDateTimeListFilters; - // } return LocalDateTimeScalarAggregationFilters; } if (attribute.typeHelper.isDuration()) { - // if (attribute.typeHelper.isList()) { - // return DurationListFilters; - // } return DurationScalarAggregationFilters; } // if (attribute.typeHelper.isDate()) { diff --git a/packages/graphql/tests/schema/aggregations.test.ts b/packages/graphql/tests/schema/aggregations.test.ts index 78fd6b88eae..be6df5bd6d8 100644 --- a/packages/graphql/tests/schema/aggregations.test.ts +++ b/packages/graphql/tests/schema/aggregations.test.ts @@ -1803,4 +1803,1199 @@ describe("Aggregations", () => { }" `); }); + + test("Where Level Aggregations with arrays", async () => { + const typeDefs = gql` + type User @node { + someId: ID + someString: String + someFloat: Float + someInt: Int + someBigInt: BigInt + someDateTime: DateTime + someLocalDateTime: LocalDateTime + someLocalTime: LocalTime + someTime: Time + someDuration: Duration + } + + type Post @node { + title: String + likes: [User!]! @relationship(type: "LIKES", direction: IN, properties: "Likes") + } + + type Likes @relationshipProperties { + someId: [ID!]! + someString: [String!]! + someFloat: [Float!]! + someInt: [Int!]! + someBigInt: [BigInt!]! + someDateTime: [DateTime!]! + someLocalDateTime: [LocalDateTime!]! + someLocalTime: [LocalTime!]! + someTime: [Time!]! + someDuration: [Duration!]! + } + `; + const neoSchema = new Neo4jGraphQL({ typeDefs }); + const printedSchema = printSchemaWithDirectives(lexicographicSortSchema(await neoSchema.getSchema())); + + expect(printedSchema).toMatchInlineSnapshot(` + "schema { + query: Query + mutation: Mutation + } + + \\"\\"\\" + A BigInt value up to 64 bits in size, which can be a number or a string if used inline, or a string only if used as a variable. Always returned as a string. + \\"\\"\\" + scalar BigInt + + type BigIntAggregateSelection { + average: BigInt + max: BigInt + min: BigInt + sum: BigInt + } + + \\"\\"\\"BigInt list filters\\"\\"\\" + input BigIntListFilters { + eq: [BigIntScalarFilters!] + includes: BigIntScalarFilters + } + + \\"\\"\\"Filters for an aggregation of an BigInt field\\"\\"\\" + input BigIntScalarAggregationFilters { + average: BigIntScalarFilters + max: BigIntScalarFilters + min: BigIntScalarFilters + sum: BigIntScalarFilters + } + + \\"\\"\\"BigInt filters\\"\\"\\" + input BigIntScalarFilters { + eq: BigInt + gt: BigInt + gte: BigInt + in: [BigInt!] + lt: BigInt + lte: BigInt + } + + \\"\\"\\"BigInt mutations\\"\\"\\" + input BigIntScalarMutations { + add: BigInt + set: BigInt + subtract: BigInt + } + + \\"\\"\\" + Information about the number of nodes and relationships created during a create mutation + \\"\\"\\" + type CreateInfo { + nodesCreated: Int! + relationshipsCreated: Int! + } + + type CreatePostsMutationResponse { + info: CreateInfo! + posts: [Post!]! + } + + type CreateUsersMutationResponse { + info: CreateInfo! + users: [User!]! + } + + \\"\\"\\"A date and time, represented as an ISO-8601 string\\"\\"\\" + scalar DateTime + + type DateTimeAggregateSelection { + max: DateTime + min: DateTime + } + + \\"\\"\\"DateTime list filters\\"\\"\\" + input DateTimeListFilters { + eq: [DateTimeScalarFilters!] + includes: DateTimeScalarFilters + } + + \\"\\"\\"Filters for an aggregation of an DateTime input field\\"\\"\\" + input DateTimeScalarAggregationFilters { + max: DateTimeScalarFilters + min: DateTimeScalarFilters + } + + \\"\\"\\"DateTime filters\\"\\"\\" + input DateTimeScalarFilters { + eq: DateTime + gt: DateTime + gte: DateTime + in: [DateTime!] + lt: DateTime + lte: DateTime + } + + \\"\\"\\"DateTime mutations\\"\\"\\" + input DateTimeScalarMutations { + set: DateTime + } + + \\"\\"\\" + Information about the number of nodes and relationships deleted during a delete mutation + \\"\\"\\" + type DeleteInfo { + nodesDeleted: Int! + relationshipsDeleted: Int! + } + + \\"\\"\\"A duration, represented as an ISO 8601 duration string\\"\\"\\" + scalar Duration + + type DurationAggregateSelection { + max: Duration + min: Duration + } + + \\"\\"\\"Duration list filters\\"\\"\\" + input DurationListFilters { + eq: [DurationScalarFilters!] + includes: DurationScalarFilters + } + + \\"\\"\\"Filters for an aggregation of a Dutation input field\\"\\"\\" + input DurationScalarAggregationFilters { + average: DurationScalarFilters + max: DurationScalarFilters + min: DurationScalarFilters + } + + \\"\\"\\"Duration filters\\"\\"\\" + input DurationScalarFilters { + eq: Duration + gt: Duration + gte: Duration + in: [Duration!] + lt: Duration + lte: Duration + } + + \\"\\"\\"Duration mutations\\"\\"\\" + input DurationScalarMutations { + set: Duration + } + + type FloatAggregateSelection { + average: Float + max: Float + min: Float + sum: Float + } + + \\"\\"\\"Float list filters\\"\\"\\" + input FloatListFilters { + eq: [FloatScalarFilters!] + includes: FloatScalarFilters + } + + \\"\\"\\"Filters for an aggregation of a float field\\"\\"\\" + input FloatScalarAggregationFilters { + average: FloatScalarFilters + max: FloatScalarFilters + min: FloatScalarFilters + sum: FloatScalarFilters + } + + \\"\\"\\"Float filters\\"\\"\\" + input FloatScalarFilters { + eq: Float + gt: Float + gte: Float + in: [Float!] + lt: Float + lte: Float + } + + \\"\\"\\"Float mutations\\"\\"\\" + input FloatScalarMutations { + add: Float + divide: Float + multiply: Float + set: Float + subtract: Float + } + + type IDAggregateSelection { + longest: ID + shortest: ID + } + + \\"\\"\\"ID list filters\\"\\"\\" + input IDListFilters { + eq: [IDScalarFilters!] + includes: IDScalarFilters + } + + \\"\\"\\"Filters for an aggregation of an ID input field\\"\\"\\" + input IDScalarAggregationFilters { + max: IDScalarFilters + min: IDScalarFilters + } + + \\"\\"\\"ID filters\\"\\"\\" + input IDScalarFilters { + contains: ID + endsWith: ID + eq: ID + gt: ID + gte: ID + in: [ID!] + lt: ID + lte: ID + matches: ID + startsWith: ID + } + + \\"\\"\\"ID mutations\\"\\"\\" + input IDScalarMutations { + set: ID + } + + type IntAggregateSelection { + average: Float + max: Int + min: Int + sum: Int + } + + \\"\\"\\"Int list filters\\"\\"\\" + input IntListFilters { + eq: [Int!] + includes: Int + } + + \\"\\"\\"Filters for an aggregation of an int field\\"\\"\\" + input IntScalarAggregationFilters { + average: FloatScalarFilters + max: IntScalarFilters + min: IntScalarFilters + sum: IntScalarFilters + } + + \\"\\"\\"Int filters\\"\\"\\" + input IntScalarFilters { + eq: Int + gt: Int + gte: Int + in: [Int!] + lt: Int + lte: Int + } + + \\"\\"\\"Int mutations\\"\\"\\" + input IntScalarMutations { + add: Int + set: Int + subtract: Int + } + + \\"\\"\\" + The edge properties for the following fields: + * Post.likes + \\"\\"\\" + type Likes { + someBigInt: [BigInt!]! + someDateTime: [DateTime!]! + someDuration: [Duration!]! + someFloat: [Float!]! + someId: [ID!]! + someInt: [Int!]! + someLocalDateTime: [LocalDateTime!]! + someLocalTime: [LocalTime!]! + someString: [String!]! + someTime: [Time!]! + } + + input LikesCreateInput { + someBigInt: [BigInt!]! + someDateTime: [DateTime!]! + someDuration: [Duration!]! + someFloat: [Float!]! + someId: [ID!]! + someInt: [Int!]! + someLocalDateTime: [LocalDateTime!]! + someLocalTime: [LocalTime!]! + someString: [String!]! + someTime: [Time!]! + } + + input LikesSort { + someBigInt: SortDirection + someDateTime: SortDirection + someDuration: SortDirection + someFloat: SortDirection + someId: SortDirection + someInt: SortDirection + someLocalDateTime: SortDirection + someLocalTime: SortDirection + someString: SortDirection + someTime: SortDirection + } + + input LikesUpdateInput { + someBigInt: ListBigIntMutations + someBigInt_POP: Int + someBigInt_PUSH: [BigInt!] + someBigInt_SET: [BigInt!] + someDateTime: ListDateTimeMutations + someDateTime_POP: Int + someDateTime_PUSH: [DateTime!] + someDateTime_SET: [DateTime!] + someDuration: ListDurationMutations + someDuration_POP: Int + someDuration_PUSH: [Duration!] + someDuration_SET: [Duration!] + someFloat: ListFloatMutations + someFloat_POP: Int + someFloat_PUSH: [Float!] + someFloat_SET: [Float!] + someId: ListIDMutations + someId_POP: Int + someId_PUSH: [ID!] + someId_SET: [ID!] + someInt: ListIntMutations + someInt_POP: Int + someInt_PUSH: [Int!] + someInt_SET: [Int!] + someLocalDateTime: ListLocalDateTimeMutations + someLocalDateTime_POP: Int + someLocalDateTime_PUSH: [LocalDateTime!] + someLocalDateTime_SET: [LocalDateTime!] + someLocalTime: ListLocalTimeMutations + someLocalTime_POP: Int + someLocalTime_PUSH: [LocalTime!] + someLocalTime_SET: [LocalTime!] + someString: ListStringMutations + someString_POP: Int + someString_PUSH: [String!] + someString_SET: [String!] + someTime: ListTimeMutations + someTime_POP: Int + someTime_PUSH: [Time!] + someTime_SET: [Time!] + } + + input LikesWhere { + AND: [LikesWhere!] + NOT: LikesWhere + OR: [LikesWhere!] + someBigInt: BigIntListFilters + someBigInt_EQ: [BigInt!] + someBigInt_INCLUDES: BigInt + someDateTime: DateTimeListFilters + someDateTime_EQ: [DateTime!] + someDateTime_INCLUDES: DateTime + someDuration: DurationListFilters + someDuration_EQ: [Duration!] + someDuration_INCLUDES: Duration + someFloat: FloatListFilters + someFloat_EQ: [Float!] + someFloat_INCLUDES: Float + someId: IDListFilters + someId_EQ: [ID!] + someId_INCLUDES: ID + someInt: IntListFilters + someInt_EQ: [Int!] + someInt_INCLUDES: Int + someLocalDateTime: LocalDateTimeListFilters + someLocalDateTime_EQ: [LocalDateTime!] + someLocalDateTime_INCLUDES: LocalDateTime + someLocalTime: LocalTimeListFilters + someLocalTime_EQ: [LocalTime!] + someLocalTime_INCLUDES: LocalTime + someString: StringListFilters + someString_EQ: [String!] + someString_INCLUDES: String + someTime: TimeListFilters + someTime_EQ: [Time!] + someTime_INCLUDES: Time + } + + \\"\\"\\"Mutations for a list for BigInt\\"\\"\\" + input ListBigIntMutations { + pop: Int + push: [BigInt!] + set: [BigInt!] + } + + \\"\\"\\"Mutations for a list for DateTime\\"\\"\\" + input ListDateTimeMutations { + pop: Int + push: [DateTime!] + set: [DateTime!] + } + + \\"\\"\\"Mutations for a list for Duration\\"\\"\\" + input ListDurationMutations { + pop: Int + push: [Duration!] + set: [Duration!] + } + + \\"\\"\\"Mutations for a list for Float\\"\\"\\" + input ListFloatMutations { + pop: Int + push: [Float!] + set: [Float!] + } + + \\"\\"\\"Mutations for a list for ID\\"\\"\\" + input ListIDMutations { + pop: Int + push: [ID!] + set: [ID!] + } + + \\"\\"\\"Mutations for a list for Int\\"\\"\\" + input ListIntMutations { + pop: Int + push: [Int!] + set: [Int!] + } + + \\"\\"\\"Mutations for a list for LocalDateTime\\"\\"\\" + input ListLocalDateTimeMutations { + pop: Int + push: [LocalDateTime!] + set: [LocalDateTime!] + } + + \\"\\"\\"Mutations for a list for LocalTime\\"\\"\\" + input ListLocalTimeMutations { + pop: Int + push: [LocalTime!] + set: [LocalTime!] + } + + \\"\\"\\"Mutations for a list for String\\"\\"\\" + input ListStringMutations { + pop: Int + push: [String!] + set: [String!] + } + + \\"\\"\\"Mutations for a list for Time\\"\\"\\" + input ListTimeMutations { + pop: Int + push: [Time!] + set: [Time!] + } + + \\"\\"\\"A local datetime, represented as 'YYYY-MM-DDTHH:MM:SS'\\"\\"\\" + scalar LocalDateTime + + type LocalDateTimeAggregateSelection { + max: LocalDateTime + min: LocalDateTime + } + + \\"\\"\\"LocalDateTime list filters\\"\\"\\" + input LocalDateTimeListFilters { + eq: [LocalDateTimeScalarFilters!] + includes: LocalDateTimeScalarFilters + } + + \\"\\"\\"Filters for an aggregation of an LocalDateTime input field\\"\\"\\" + input LocalDateTimeScalarAggregationFilters { + max: LocalDateTimeScalarFilters + min: LocalDateTimeScalarFilters + } + + \\"\\"\\"LocalDateTime filters\\"\\"\\" + input LocalDateTimeScalarFilters { + eq: LocalDateTime + gt: LocalDateTime + gte: LocalDateTime + in: [LocalDateTime!] + lt: LocalDateTime + lte: LocalDateTime + } + + \\"\\"\\"LocalDateTime mutations\\"\\"\\" + input LocalDateTimeScalarMutations { + set: LocalDateTime + } + + \\"\\"\\" + A local time, represented as a time string without timezone information + \\"\\"\\" + scalar LocalTime + + type LocalTimeAggregateSelection { + max: LocalTime + min: LocalTime + } + + \\"\\"\\"LocalTime list filters\\"\\"\\" + input LocalTimeListFilters { + eq: [LocalTimeScalarFilters!] + includes: LocalTimeScalarFilters + } + + \\"\\"\\"Filters for an aggregation of an LocalTime input field\\"\\"\\" + input LocalTimeScalarAggregationFilters { + max: LocalTimeScalarFilters + min: LocalTimeScalarFilters + } + + \\"\\"\\"LocalTime filters\\"\\"\\" + input LocalTimeScalarFilters { + eq: LocalTime + gt: LocalTime + gte: LocalTime + in: [LocalTime!] + lt: LocalTime + lte: LocalTime + } + + \\"\\"\\"LocalTime mutations\\"\\"\\" + input LocalTimeScalarMutations { + set: LocalTime + } + + type Mutation { + createPosts(input: [PostCreateInput!]!): CreatePostsMutationResponse! + createUsers(input: [UserCreateInput!]!): CreateUsersMutationResponse! + deletePosts(delete: PostDeleteInput, where: PostWhere): DeleteInfo! + deleteUsers(where: UserWhere): DeleteInfo! + updatePosts(update: PostUpdateInput, where: PostWhere): UpdatePostsMutationResponse! + updateUsers(update: UserUpdateInput, where: UserWhere): UpdateUsersMutationResponse! + } + + \\"\\"\\"Pagination information (Relay)\\"\\"\\" + type PageInfo { + endCursor: String + hasNextPage: Boolean! + hasPreviousPage: Boolean! + startCursor: String + } + + type Post { + likes(limit: Int, offset: Int, sort: [UserSort!], where: UserWhere): [User!]! + likesAggregate(where: UserWhere): PostUserLikesAggregationSelection + likesConnection(after: String, first: Int, sort: [PostLikesConnectionSort!], where: PostLikesConnectionWhere): PostLikesConnection! + title: String + } + + type PostAggregateSelection { + count: Int! + title: StringAggregateSelection! + } + + input PostCreateInput { + likes: PostLikesFieldInput + title: String + } + + input PostDeleteInput { + likes: [PostLikesDeleteFieldInput!] + } + + type PostEdge { + cursor: String! + node: Post! + } + + input PostLikesAggregateInput { + AND: [PostLikesAggregateInput!] + NOT: PostLikesAggregateInput + OR: [PostLikesAggregateInput!] + count: IntScalarFilters + count_EQ: Int + count_GT: Int + count_GTE: Int + count_LT: Int + count_LTE: Int + node: PostLikesNodeAggregationWhereInput + } + + input PostLikesConnectFieldInput { + edge: LikesCreateInput! + where: UserConnectWhere + } + + type PostLikesConnection { + edges: [PostLikesRelationship!]! + pageInfo: PageInfo! + totalCount: Int! + } + + input PostLikesConnectionSort { + edge: LikesSort + node: UserSort + } + + input PostLikesConnectionWhere { + AND: [PostLikesConnectionWhere!] + NOT: PostLikesConnectionWhere + OR: [PostLikesConnectionWhere!] + edge: LikesWhere + node: UserWhere + } + + input PostLikesCreateFieldInput { + edge: LikesCreateInput! + node: UserCreateInput! + } + + input PostLikesDeleteFieldInput { + where: PostLikesConnectionWhere + } + + input PostLikesDisconnectFieldInput { + where: PostLikesConnectionWhere + } + + input PostLikesFieldInput { + connect: [PostLikesConnectFieldInput!] + create: [PostLikesCreateFieldInput!] + } + + input PostLikesNodeAggregationWhereInput { + AND: [PostLikesNodeAggregationWhereInput!] + NOT: PostLikesNodeAggregationWhereInput + OR: [PostLikesNodeAggregationWhereInput!] + someBigInt: BigIntScalarAggregationFilters + someBigInt_AVERAGE_EQUAL: BigInt + someBigInt_AVERAGE_GT: BigInt + someBigInt_AVERAGE_GTE: BigInt + someBigInt_AVERAGE_LT: BigInt + someBigInt_AVERAGE_LTE: BigInt + someBigInt_MAX_EQUAL: BigInt + someBigInt_MAX_GT: BigInt + someBigInt_MAX_GTE: BigInt + someBigInt_MAX_LT: BigInt + someBigInt_MAX_LTE: BigInt + someBigInt_MIN_EQUAL: BigInt + someBigInt_MIN_GT: BigInt + someBigInt_MIN_GTE: BigInt + someBigInt_MIN_LT: BigInt + someBigInt_MIN_LTE: BigInt + someBigInt_SUM_EQUAL: BigInt + someBigInt_SUM_GT: BigInt + someBigInt_SUM_GTE: BigInt + someBigInt_SUM_LT: BigInt + someBigInt_SUM_LTE: BigInt + someDateTime: DateTimeScalarAggregationFilters + someDateTime_MAX_EQUAL: DateTime + someDateTime_MAX_GT: DateTime + someDateTime_MAX_GTE: DateTime + someDateTime_MAX_LT: DateTime + someDateTime_MAX_LTE: DateTime + someDateTime_MIN_EQUAL: DateTime + someDateTime_MIN_GT: DateTime + someDateTime_MIN_GTE: DateTime + someDateTime_MIN_LT: DateTime + someDateTime_MIN_LTE: DateTime + someDuration: DurationScalarAggregationFilters + someDuration_AVERAGE_EQUAL: Duration + someDuration_AVERAGE_GT: Duration + someDuration_AVERAGE_GTE: Duration + someDuration_AVERAGE_LT: Duration + someDuration_AVERAGE_LTE: Duration + someDuration_MAX_EQUAL: Duration + someDuration_MAX_GT: Duration + someDuration_MAX_GTE: Duration + someDuration_MAX_LT: Duration + someDuration_MAX_LTE: Duration + someDuration_MIN_EQUAL: Duration + someDuration_MIN_GT: Duration + someDuration_MIN_GTE: Duration + someDuration_MIN_LT: Duration + someDuration_MIN_LTE: Duration + someFloat: FloatScalarAggregationFilters + someFloat_AVERAGE_EQUAL: Float + someFloat_AVERAGE_GT: Float + someFloat_AVERAGE_GTE: Float + someFloat_AVERAGE_LT: Float + someFloat_AVERAGE_LTE: Float + someFloat_MAX_EQUAL: Float + someFloat_MAX_GT: Float + someFloat_MAX_GTE: Float + someFloat_MAX_LT: Float + someFloat_MAX_LTE: Float + someFloat_MIN_EQUAL: Float + someFloat_MIN_GT: Float + someFloat_MIN_GTE: Float + someFloat_MIN_LT: Float + someFloat_MIN_LTE: Float + someFloat_SUM_EQUAL: Float + someFloat_SUM_GT: Float + someFloat_SUM_GTE: Float + someFloat_SUM_LT: Float + someFloat_SUM_LTE: Float + someId: IDScalarAggregationFilters + someId_MAX_EQUAL: ID + someId_MAX_GT: ID + someId_MAX_GTE: ID + someId_MAX_LT: ID + someId_MAX_LTE: ID + someId_MIN_EQUAL: ID + someId_MIN_GT: ID + someId_MIN_GTE: ID + someId_MIN_LT: ID + someId_MIN_LTE: ID + someInt: IntScalarAggregationFilters + someInt_AVERAGE_EQUAL: Float + someInt_AVERAGE_GT: Float + someInt_AVERAGE_GTE: Float + someInt_AVERAGE_LT: Float + someInt_AVERAGE_LTE: Float + someInt_MAX_EQUAL: Int + someInt_MAX_GT: Int + someInt_MAX_GTE: Int + someInt_MAX_LT: Int + someInt_MAX_LTE: Int + someInt_MIN_EQUAL: Int + someInt_MIN_GT: Int + someInt_MIN_GTE: Int + someInt_MIN_LT: Int + someInt_MIN_LTE: Int + someInt_SUM_EQUAL: Int + someInt_SUM_GT: Int + someInt_SUM_GTE: Int + someInt_SUM_LT: Int + someInt_SUM_LTE: Int + someLocalDateTime: LocalDateTimeScalarAggregationFilters + someLocalDateTime_MAX_EQUAL: LocalDateTime + someLocalDateTime_MAX_GT: LocalDateTime + someLocalDateTime_MAX_GTE: LocalDateTime + someLocalDateTime_MAX_LT: LocalDateTime + someLocalDateTime_MAX_LTE: LocalDateTime + someLocalDateTime_MIN_EQUAL: LocalDateTime + someLocalDateTime_MIN_GT: LocalDateTime + someLocalDateTime_MIN_GTE: LocalDateTime + someLocalDateTime_MIN_LT: LocalDateTime + someLocalDateTime_MIN_LTE: LocalDateTime + someLocalTime: LocalTimeScalarAggregationFilters + someLocalTime_MAX_EQUAL: LocalTime + someLocalTime_MAX_GT: LocalTime + someLocalTime_MAX_GTE: LocalTime + someLocalTime_MAX_LT: LocalTime + someLocalTime_MAX_LTE: LocalTime + someLocalTime_MIN_EQUAL: LocalTime + someLocalTime_MIN_GT: LocalTime + someLocalTime_MIN_GTE: LocalTime + someLocalTime_MIN_LT: LocalTime + someLocalTime_MIN_LTE: LocalTime + someString: StringScalarAggregationFilters + someString_AVERAGE_LENGTH_EQUAL: Float + someString_AVERAGE_LENGTH_GT: Float + someString_AVERAGE_LENGTH_GTE: Float + someString_AVERAGE_LENGTH_LT: Float + someString_AVERAGE_LENGTH_LTE: Float + someString_LONGEST_LENGTH_EQUAL: Int + someString_LONGEST_LENGTH_GT: Int + someString_LONGEST_LENGTH_GTE: Int + someString_LONGEST_LENGTH_LT: Int + someString_LONGEST_LENGTH_LTE: Int + someString_SHORTEST_LENGTH_EQUAL: Int + someString_SHORTEST_LENGTH_GT: Int + someString_SHORTEST_LENGTH_GTE: Int + someString_SHORTEST_LENGTH_LT: Int + someString_SHORTEST_LENGTH_LTE: Int + someTime: TimeScalarAggregationFilters + someTime_MAX_EQUAL: Time + someTime_MAX_GT: Time + someTime_MAX_GTE: Time + someTime_MAX_LT: Time + someTime_MAX_LTE: Time + someTime_MIN_EQUAL: Time + someTime_MIN_GT: Time + someTime_MIN_GTE: Time + someTime_MIN_LT: Time + someTime_MIN_LTE: Time + } + + type PostLikesRelationship { + cursor: String! + node: User! + properties: Likes! + } + + input PostLikesUpdateConnectionInput { + edge: LikesUpdateInput + node: UserUpdateInput + } + + input PostLikesUpdateFieldInput { + connect: [PostLikesConnectFieldInput!] + create: [PostLikesCreateFieldInput!] + delete: [PostLikesDeleteFieldInput!] + disconnect: [PostLikesDisconnectFieldInput!] + update: PostLikesUpdateConnectionInput + where: PostLikesConnectionWhere + } + + \\"\\"\\" + Fields to sort Posts by. The order in which sorts are applied is not guaranteed when specifying many fields in one PostSort object. + \\"\\"\\" + input PostSort { + title: SortDirection + } + + input PostUpdateInput { + likes: [PostLikesUpdateFieldInput!] + title: StringScalarMutations + title_SET: String + } + + type PostUserLikesAggregationSelection { + count: Int! + node: PostUserLikesNodeAggregateSelection + } + + type PostUserLikesNodeAggregateSelection { + someBigInt: BigIntAggregateSelection! + someDateTime: DateTimeAggregateSelection! + someDuration: DurationAggregateSelection! + someFloat: FloatAggregateSelection! + someId: IDAggregateSelection! + someInt: IntAggregateSelection! + someLocalDateTime: LocalDateTimeAggregateSelection! + someLocalTime: LocalTimeAggregateSelection! + someString: StringAggregateSelection! + someTime: TimeAggregateSelection! + } + + input PostWhere { + AND: [PostWhere!] + NOT: PostWhere + OR: [PostWhere!] + likesAggregate: PostLikesAggregateInput + \\"\\"\\" + Return Posts where all of the related PostLikesConnections match this filter + \\"\\"\\" + likesConnection_ALL: PostLikesConnectionWhere + \\"\\"\\" + Return Posts where none of the related PostLikesConnections match this filter + \\"\\"\\" + likesConnection_NONE: PostLikesConnectionWhere + \\"\\"\\" + Return Posts where one of the related PostLikesConnections match this filter + \\"\\"\\" + likesConnection_SINGLE: PostLikesConnectionWhere + \\"\\"\\" + Return Posts where some of the related PostLikesConnections match this filter + \\"\\"\\" + likesConnection_SOME: PostLikesConnectionWhere + \\"\\"\\"Return Posts where all of the related Users match this filter\\"\\"\\" + likes_ALL: UserWhere + \\"\\"\\"Return Posts where none of the related Users match this filter\\"\\"\\" + likes_NONE: UserWhere + \\"\\"\\"Return Posts where one of the related Users match this filter\\"\\"\\" + likes_SINGLE: UserWhere + \\"\\"\\"Return Posts where some of the related Users match this filter\\"\\"\\" + likes_SOME: UserWhere + title: StringScalarFilters + title_CONTAINS: String + title_ENDS_WITH: String + title_EQ: String + title_IN: [String] + title_STARTS_WITH: String + } + + type PostsConnection { + edges: [PostEdge!]! + pageInfo: PageInfo! + totalCount: Int! + } + + type Query { + posts(limit: Int, offset: Int, sort: [PostSort!], where: PostWhere): [Post!]! + postsAggregate(where: PostWhere): PostAggregateSelection! + postsConnection(after: String, first: Int, sort: [PostSort!], where: PostWhere): PostsConnection! + users(limit: Int, offset: Int, sort: [UserSort!], where: UserWhere): [User!]! + usersAggregate(where: UserWhere): UserAggregateSelection! + usersConnection(after: String, first: Int, sort: [UserSort!], where: UserWhere): UsersConnection! + } + + \\"\\"\\"An enum for sorting in either ascending or descending order.\\"\\"\\" + enum SortDirection { + \\"\\"\\"Sort by field values in ascending order.\\"\\"\\" + ASC + \\"\\"\\"Sort by field values in descending order.\\"\\"\\" + DESC + } + + type StringAggregateSelection { + longest: String + shortest: String + } + + \\"\\"\\"String list filters\\"\\"\\" + input StringListFilters { + eq: [String!] + includes: String + } + + \\"\\"\\"Filters for an aggregation of a string field\\"\\"\\" + input StringScalarAggregationFilters { + averageLength: FloatScalarFilters + longestLength: IntScalarFilters + shortestLength: IntScalarFilters + } + + \\"\\"\\"String filters\\"\\"\\" + input StringScalarFilters { + contains: String + endsWith: String + eq: String + gt: String + gte: String + in: [String!] + lt: String + lte: String + matches: String + startsWith: String + } + + \\"\\"\\"String mutations\\"\\"\\" + input StringScalarMutations { + set: String + } + + \\"\\"\\"A time, represented as an RFC3339 time string\\"\\"\\" + scalar Time + + type TimeAggregateSelection { + max: Time + min: Time + } + + \\"\\"\\"Time list filters\\"\\"\\" + input TimeListFilters { + eq: [Time!] + includes: Time + } + + \\"\\"\\"Filters for an aggregation of an Time input field\\"\\"\\" + input TimeScalarAggregationFilters { + max: TimeScalarFilters + min: TimeScalarFilters + } + + \\"\\"\\"Time filters\\"\\"\\" + input TimeScalarFilters { + eq: Time + gt: Time + gte: Time + in: [Time!] + lt: Time + lte: Time + } + + \\"\\"\\"Time mutations\\"\\"\\" + input TimeScalarMutations { + set: Time + } + + \\"\\"\\" + Information about the number of nodes and relationships created and deleted during an update mutation + \\"\\"\\" + type UpdateInfo { + nodesCreated: Int! + nodesDeleted: Int! + relationshipsCreated: Int! + relationshipsDeleted: Int! + } + + type UpdatePostsMutationResponse { + info: UpdateInfo! + posts: [Post!]! + } + + type UpdateUsersMutationResponse { + info: UpdateInfo! + users: [User!]! + } + + type User { + someBigInt: BigInt + someDateTime: DateTime + someDuration: Duration + someFloat: Float + someId: ID + someInt: Int + someLocalDateTime: LocalDateTime + someLocalTime: LocalTime + someString: String + someTime: Time + } + + type UserAggregateSelection { + count: Int! + someBigInt: BigIntAggregateSelection! + someDateTime: DateTimeAggregateSelection! + someDuration: DurationAggregateSelection! + someFloat: FloatAggregateSelection! + someId: IDAggregateSelection! + someInt: IntAggregateSelection! + someLocalDateTime: LocalDateTimeAggregateSelection! + someLocalTime: LocalTimeAggregateSelection! + someString: StringAggregateSelection! + someTime: TimeAggregateSelection! + } + + input UserConnectWhere { + node: UserWhere! + } + + input UserCreateInput { + someBigInt: BigInt + someDateTime: DateTime + someDuration: Duration + someFloat: Float + someId: ID + someInt: Int + someLocalDateTime: LocalDateTime + someLocalTime: LocalTime + someString: String + someTime: Time + } + + type UserEdge { + cursor: String! + node: User! + } + + \\"\\"\\" + Fields to sort Users by. The order in which sorts are applied is not guaranteed when specifying many fields in one UserSort object. + \\"\\"\\" + input UserSort { + someBigInt: SortDirection + someDateTime: SortDirection + someDuration: SortDirection + someFloat: SortDirection + someId: SortDirection + someInt: SortDirection + someLocalDateTime: SortDirection + someLocalTime: SortDirection + someString: SortDirection + someTime: SortDirection + } + + input UserUpdateInput { + someBigInt: BigIntScalarMutations + someBigInt_DECREMENT: BigInt + someBigInt_INCREMENT: BigInt + someBigInt_SET: BigInt + someDateTime: DateTimeScalarMutations + someDateTime_SET: DateTime + someDuration: DurationScalarMutations + someDuration_SET: Duration + someFloat: FloatScalarMutations + someFloat_ADD: Float + someFloat_DIVIDE: Float + someFloat_MULTIPLY: Float + someFloat_SET: Float + someFloat_SUBTRACT: Float + someId: IDScalarMutations + someId_SET: ID + someInt: IntScalarMutations + someInt_DECREMENT: Int + someInt_INCREMENT: Int + someInt_SET: Int + someLocalDateTime: LocalDateTimeScalarMutations + someLocalDateTime_SET: LocalDateTime + someLocalTime: LocalTimeScalarMutations + someLocalTime_SET: LocalTime + someString: StringScalarMutations + someString_SET: String + someTime: TimeScalarMutations + someTime_SET: Time + } + + input UserWhere { + AND: [UserWhere!] + NOT: UserWhere + OR: [UserWhere!] + someBigInt: BigIntScalarFilters + someBigInt_EQ: BigInt + someBigInt_GT: BigInt + someBigInt_GTE: BigInt + someBigInt_IN: [BigInt] + someBigInt_LT: BigInt + someBigInt_LTE: BigInt + someDateTime: DateTimeScalarFilters + someDateTime_EQ: DateTime + someDateTime_GT: DateTime + someDateTime_GTE: DateTime + someDateTime_IN: [DateTime] + someDateTime_LT: DateTime + someDateTime_LTE: DateTime + someDuration: DurationScalarFilters + someDuration_EQ: Duration + someDuration_GT: Duration + someDuration_GTE: Duration + someDuration_IN: [Duration] + someDuration_LT: Duration + someDuration_LTE: Duration + someFloat: FloatScalarFilters + someFloat_EQ: Float + someFloat_GT: Float + someFloat_GTE: Float + someFloat_IN: [Float] + someFloat_LT: Float + someFloat_LTE: Float + someId: IDScalarFilters + someId_CONTAINS: ID + someId_ENDS_WITH: ID + someId_EQ: ID + someId_IN: [ID] + someId_STARTS_WITH: ID + someInt: IntScalarFilters + someInt_EQ: Int + someInt_GT: Int + someInt_GTE: Int + someInt_IN: [Int] + someInt_LT: Int + someInt_LTE: Int + someLocalDateTime: LocalDateTimeScalarFilters + someLocalDateTime_EQ: LocalDateTime + someLocalDateTime_GT: LocalDateTime + someLocalDateTime_GTE: LocalDateTime + someLocalDateTime_IN: [LocalDateTime] + someLocalDateTime_LT: LocalDateTime + someLocalDateTime_LTE: LocalDateTime + someLocalTime: LocalTimeScalarFilters + someLocalTime_EQ: LocalTime + someLocalTime_GT: LocalTime + someLocalTime_GTE: LocalTime + someLocalTime_IN: [LocalTime] + someLocalTime_LT: LocalTime + someLocalTime_LTE: LocalTime + someString: StringScalarFilters + someString_CONTAINS: String + someString_ENDS_WITH: String + someString_EQ: String + someString_IN: [String] + someString_STARTS_WITH: String + someTime: TimeScalarFilters + someTime_EQ: Time + someTime_GT: Time + someTime_GTE: Time + someTime_IN: [Time] + someTime_LT: Time + someTime_LTE: Time + } + + type UsersConnection { + edges: [UserEdge!]! + pageInfo: PageInfo! + totalCount: Int! + }" + `); + }); });