Skip to content

Commit

Permalink
Upgrade to GraphQL-Java 17.3
Browse files Browse the repository at this point in the history
  • Loading branch information
Andy2003 committed Jan 3, 2022
1 parent 520264a commit bafa3be
Show file tree
Hide file tree
Showing 10 changed files with 38 additions and 27 deletions.
2 changes: 1 addition & 1 deletion core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
<dependency>
<groupId>com.graphql-java</groupId>
<artifactId>graphql-java</artifactId>
<version>16.2</version>
<version>17.3</version>
</dependency>
<dependency>
<groupId>org.atteo</groupId>
Expand Down
6 changes: 3 additions & 3 deletions core/src/main/kotlin/org/neo4j/graphql/DynamicProperties.kt
Original file line number Diff line number Diff line change
Expand Up @@ -20,18 +20,18 @@ object DynamicProperties {
}

@Throws(CoercingParseLiteralException::class)
override fun parseLiteral(o: Any): Any? {
override fun parseLiteral(o: Any): Any {
return parse(o, emptyMap())
}
})
.build()


@Throws(CoercingParseLiteralException::class)
private fun parse(input: Any, variables: Map<String, Any>): Any? {
private fun parse(input: Any, variables: Map<String, Any>): Any {
return when (input) {
!is Value<*> -> throw CoercingParseLiteralException("Expected AST type 'StringValue' but was '${input::class.java.simpleName}'.")
is NullValue -> null
is NullValue -> throw CoercingParseLiteralException("Expected non null value.")
is ObjectValue -> input.objectFields.associate { it.name to parseNested(it.value, variables) }
else -> Assert.assertShouldNeverHappen("Only maps structures are expected")
}
Expand Down
11 changes: 6 additions & 5 deletions core/src/main/kotlin/org/neo4j/graphql/GraphQLExtensions.kt
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ fun GraphQLFieldsContainer.label(): String = when {
this.isRelationType() ->
(this as? GraphQLDirectiveContainer)
?.getDirective(DirectiveConstants.RELATION)
?.getArgument(RELATION_NAME)?.value?.toJavaValue()?.toString()
?.getArgument(RELATION_NAME)?.argumentValue?.value?.toJavaValue()?.toString()
?: this.name
else -> name
}
Expand Down Expand Up @@ -150,10 +150,11 @@ fun <T> GraphQLDirective.getMandatoryArgument(argumentName: String, defaultValue
fun <T> GraphQLDirective.getArgument(argumentName: String, defaultValue: T? = null): T? {
val argument = getArgument(argumentName)
@Suppress("UNCHECKED_CAST")
return argument?.value as T?
?: argument.defaultValue as T?
?: defaultValue
?: throw IllegalStateException("No default value for @${this.name}::$argumentName")
return when {
argument.argumentValue.isSet && argument.argumentValue.value != null -> argument.argumentValue.value?.toJavaValue() as T?
argument.argumentDefaultValue.isSet -> argument.argumentDefaultValue.value?.toJavaValue() as T?
else -> defaultValue ?: throw IllegalStateException("No default value for @${this.name}::$argumentName")
}
}

fun GraphQLFieldDefinition.cypherDirective(): CypherDirective? = getDirective(CYPHER)?.let {
Expand Down
9 changes: 7 additions & 2 deletions core/src/main/kotlin/org/neo4j/graphql/NoOpCoercing.kt
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
package org.neo4j.graphql

import graphql.schema.Coercing
import graphql.schema.CoercingParseLiteralException
import graphql.schema.CoercingParseValueException

object NoOpCoercing : Coercing<Any, Any> {
override fun parseLiteral(input: Any?) = input?.toJavaValue()

override fun serialize(dataFetcherResult: Any?) = dataFetcherResult
override fun parseLiteral(input: Any) = input.toJavaValue()
?: throw CoercingParseLiteralException("literal should not be null")

override fun serialize(dataFetcherResult: Any) = dataFetcherResult

override fun parseValue(input: Any) = input.toJavaValue()
?: throw CoercingParseValueException("literal should not be null")
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ abstract class BaseDataFetcherForContainer(schemaConfig: SchemaConfig) : BaseDat
.arguments
.filterNot { listOf(FIRST, OFFSET, ORDER_BY, NATIVE_ID, OPTIONS).contains(it.name) }
.onEach { arg ->
if (arg.defaultValue != null) {
defaultFields[arg.name] = arg.defaultValue
if (arg.argumentDefaultValue.isSet) {
arg.argumentDefaultValue.value?.let { defaultFields[arg.name] = it }
}
}
.mapNotNull { type.getRelevantFieldDefinition(it.name) }
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.neo4j.graphql.handler.projection

import graphql.Scalars.GraphQLString
import graphql.schema.*
import org.neo4j.cypherdsl.core.*
import org.neo4j.cypherdsl.core.Cypher.*
Expand Down Expand Up @@ -49,8 +50,10 @@ open class ProjectionBase(
override fun getName(): String = TYPE_NAME
override fun getQualifiedName(): String = TYPE_NAME
override fun getFullyQualifiedName(): String = TYPE_NAME
override fun getObjectType(): GraphQLObjectType? = null
override fun getFieldDefinition(): GraphQLFieldDefinition? = null
override fun getObjectTypes(): List<GraphQLObjectType> = emptyList()
override fun getObjectTypeNames(): List<String> = emptyList()
override fun getFieldDefinitions(): List<GraphQLFieldDefinition> = emptyList()
override fun getType(): GraphQLOutputType = GraphQLString
override fun getArguments(): Map<String, Any> = emptyMap()
override fun getLevel(): Int = 0
override fun isConditional(): Boolean = false
Expand Down Expand Up @@ -81,7 +84,8 @@ open class ProjectionBase(
val options = args[OPTIONS] as? Map<*, *>
val defaultOptions = (fieldDefinition?.getArgument(OPTIONS)?.type as? GraphQLInputObjectType)

val sortArray = (options?.get(SORT) ?: defaultOptions?.getField(SORT)?.defaultValue?.toJavaValue())
val sortArray = (options?.get(SORT)
?: defaultOptions?.getField(SORT)?.inputFieldDefaultValue?.value?.toJavaValue())
as? List<*> ?: return null

return sortArray
Expand All @@ -100,7 +104,7 @@ open class ProjectionBase(
): List<SortItem>? {

val orderBy = args[ORDER_BY]
?: fieldDefinition?.getArgument(ORDER_BY)?.defaultValue
?: fieldDefinition?.getArgument(ORDER_BY)?.argumentDefaultValue?.value
return orderBy
?.let { it ->
when (it) {
Expand Down Expand Up @@ -257,7 +261,8 @@ open class ProjectionBase(
}
projectField(propertyContainer, variable, it, nodeType, env, variableSuffix)
} else {
projectField(propertyContainer, variable, it, it.objectType, env, variableSuffix)
projectField(propertyContainer, variable, it, it.objectTypes.firstOrNull()
?: throw IllegalStateException("only one object type is supported"), env, variableSuffix)
}
projections.addAll(pro)
subQueries += sub
Expand Down Expand Up @@ -391,8 +396,8 @@ open class ProjectionBase(
.forEach { (name, value) -> args[name] = queryParameter(value, ctxVariable.value, name).`as`(name) }
fieldDefinition.arguments
.filterNot { SPECIAL_FIELDS.contains(it.name) }
.filter { it.defaultValue != null && !args.containsKey(it.name) }
.forEach { args[it.name] = queryParameter(it.defaultValue, ctxVariable.value, it.name).`as`(it.name) }
.filter { it.argumentDefaultValue.value != null && !args.containsKey(it.name) }
.forEach { args[it.name] = queryParameter(it.argumentDefaultValue.value, ctxVariable.value, it.name).`as`(it.name) }

var reading: OrderableOngoingReadingAndWithWithoutWhere? = null
if (thisValue != null) {
Expand Down Expand Up @@ -594,14 +599,14 @@ open class ProjectionBase(

private fun convertArgument(variable: String, arguments: Map<String, Any>, fieldDefinition: GraphQLFieldDefinition?, name: String): Parameter<*>? {
val value = arguments[name]
?: fieldDefinition?.getArgument(name)?.defaultValue
?: fieldDefinition?.getArgument(name)?.argumentDefaultValue?.value
?: return null
return queryParameter(value, variable, name)
}

private fun convertOptionField(variable: String, options: Map<*, *>?, defaultOptions: GraphQLInputObjectType?, name: String): Parameter<*>? {
val value = options?.get(name)
?: defaultOptions?.getField(name)?.defaultValue
?: defaultOptions?.getField(name)?.inputFieldDefaultValue?.value
?: return null
return queryParameter(value, variable, name)
}
Expand Down
4 changes: 2 additions & 2 deletions core/src/main/kotlin/org/neo4j/graphql/parser/QueryParser.kt
Original file line number Diff line number Diff line change
Expand Up @@ -118,11 +118,11 @@ object QueryParser {
.toMap(mutableMapOf())
var index = queriedFields.size
fieldDefinition.arguments
.filter { it.defaultValue != null }
.filter { it.argumentDefaultValue.value != null }
.filterNot { queriedFields.containsKey(it.name) }
.filterNot { ProjectionBase.SPECIAL_FIELDS.contains(it.name) }
.forEach { argument ->
queriedFields[argument.name] = index++ to argument.defaultValue
queriedFields[argument.name] = index++ to argument.argumentDefaultValue.value
}

return createParsedQuery(queriedFields, type)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,6 @@ internal class AdditionalDataFetcherTest(

companion object {
@Container
private val neo4jServer = Neo4jContainer<Nothing>("neo4j:4.2.4")
private val neo4jServer = Neo4jContainer<Nothing>("neo4j:4.4.1")
}
}
2 changes: 1 addition & 1 deletion examples/graphql-spring-boot/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

<properties>
<testcontainers.version>1.16.2</testcontainers.version>
<graphql-kotlin.version>5.2.0</graphql-kotlin.version>
<graphql-kotlin.version>5.3.1</graphql-kotlin.version>
<spring-boot.version>2.6.1</spring-boot.version>
</properties>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ internal class QueriesIT(

companion object {
@Container
private val neo4jServer = Neo4jContainer<Nothing>("neo4j:4.2.4")
private val neo4jServer = Neo4jContainer<Nothing>("neo4j:4.4.1")

}

Expand Down

0 comments on commit bafa3be

Please sign in to comment.