Skip to content

refactor!: remove DataLoaderPreparedRequestExecutor #305

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 0 additions & 21 deletions docs/content/Reference/Type System/objects-and-interfaces.md
Original file line number Diff line number Diff line change
Expand Up @@ -173,23 +173,12 @@ people in the second query. That's what the `dataProperty` will solve for you.

### Setting up

Using DataLoaders requires the `DataLoaderPrepared` executor:

```kotlin
configure {
executor = Executor.DataLoaderPrepared
}
```

*Example*

```kotlin
data class Person(val id: Int, val name: String)
val people = (1..5).map { Person(it, "Name-$it") }
...
configure {
executor = Executor.DataLoaderPrepared
}
query("people") {
resolver { -> people }
}
Expand Down Expand Up @@ -257,13 +246,3 @@ Returns:
}
}
```

### Current known issues

This feature can be used in production but does currently have some issues:

1. The `useDefaultPrettyPrint` doesn't work
1. Order of fields are not guaranteed to match the order that was requested
1. Custom generic type resolvers are not supported
1. Schema stitching is not supported
1. Other than that it should work as expected
1 change: 0 additions & 1 deletion docs/content/Reference/configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ KGraphQL schema allows configuration of the following properties:
| objectMapper | Schema is using Jackson ObjectMapper from this property | result of `jacksonObjectMapper()` from [jackson-kotlin-module](https://github.com/FasterXML/jackson-module-kotlin) |
| acceptSingleValueAsArray | Schema accepts single argument values as singleton list | `true` |
| coroutineDispatcher | Schema is using CoroutineDispatcher from this property | [CommonPool](https://github.com/Kotlin/kotlinx.coroutines/blob/master/kotlinx-coroutines-core/src/main/kotlin/kotlinx/coroutines/experimental/CommonPool.kt) |
| executor | | [Executor.Parallel](https://github.com/aPureBase/KGraphQL/blob/master/kgraphql/src/main/kotlin/com/apurebase/kgraphql/schema/execution/Executor.kt) |
| genericTypeResolver | Schema is using generic type resolver from this property | [GenericTypeResolver.DEFAULT](https://github.com/aPureBase/KGraphQL/blob/master/kgraphql/src/main/kotlin/com/apurebase/kgraphql/schema/execution/GenericTypeResolver.kt) |
| wrapErrors | | `true` |
| timeout | | `null` |
Expand Down
1 change: 0 additions & 1 deletion gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serializa
jackson-core-databind = { module = "com.fasterxml.jackson.core:jackson-databind", version.ref = "jackson" }
jackson-module-kotlin = { module = "com.fasterxml.jackson.module:jackson-module-kotlin", version.ref = "jackson" }
aedile = { module = "com.sksamuel.aedile:aedile-core", version = "2.1.2" }
deferredJsonBuilder = { module = "com.apurebase:DeferredJsonBuilder", version = "1.0.0" }
ktor-client-core = { module = "io.ktor:ktor-client-core", version.ref = "ktor" }
ktor-client-cio = { module = "io.ktor:ktor-client-cio", version.ref = "ktor" }
ktor-server-core = { module = "io.ktor:ktor-server-core", version.ref = "ktor" }
Expand Down
4 changes: 2 additions & 2 deletions kgraphql-ktor-stitched/api/kgraphql-ktor-stitched.api
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,8 @@ public final class com/apurebase/kgraphql/stitched/StitchedKGraphQL {
}

public final class com/apurebase/kgraphql/stitched/schema/configuration/StitchedSchemaConfiguration : com/apurebase/kgraphql/configuration/SchemaConfiguration {
public fun <init> (ZJLcom/fasterxml/jackson/databind/ObjectMapper;ZLkotlinx/coroutines/CoroutineDispatcher;ZLcom/apurebase/kgraphql/schema/execution/Executor;Ljava/lang/Long;ZLjava/util/Map;Lcom/apurebase/kgraphql/schema/execution/GenericTypeResolver;Lcom/apurebase/kgraphql/schema/execution/ArgumentTransformer;Lcom/apurebase/kgraphql/stitched/schema/execution/RemoteRequestExecutor;Ljava/lang/String;)V
public synthetic fun <init> (ZJLcom/fasterxml/jackson/databind/ObjectMapper;ZLkotlinx/coroutines/CoroutineDispatcher;ZLcom/apurebase/kgraphql/schema/execution/Executor;Ljava/lang/Long;ZLjava/util/Map;Lcom/apurebase/kgraphql/schema/execution/GenericTypeResolver;Lcom/apurebase/kgraphql/schema/execution/ArgumentTransformer;Lcom/apurebase/kgraphql/stitched/schema/execution/RemoteRequestExecutor;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun <init> (ZJLcom/fasterxml/jackson/databind/ObjectMapper;ZLkotlinx/coroutines/CoroutineDispatcher;ZLjava/lang/Long;ZLjava/util/Map;Lcom/apurebase/kgraphql/schema/execution/GenericTypeResolver;Lcom/apurebase/kgraphql/schema/execution/ArgumentTransformer;Lcom/apurebase/kgraphql/stitched/schema/execution/RemoteRequestExecutor;Ljava/lang/String;)V
public synthetic fun <init> (ZJLcom/fasterxml/jackson/databind/ObjectMapper;ZLkotlinx/coroutines/CoroutineDispatcher;ZLjava/lang/Long;ZLjava/util/Map;Lcom/apurebase/kgraphql/schema/execution/GenericTypeResolver;Lcom/apurebase/kgraphql/schema/execution/ArgumentTransformer;Lcom/apurebase/kgraphql/stitched/schema/execution/RemoteRequestExecutor;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun getLocalUrl ()Ljava/lang/String;
public final fun getRemoteExecutor ()Lcom/apurebase/kgraphql/stitched/schema/execution/RemoteRequestExecutor;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package com.apurebase.kgraphql.stitched.schema.configuration
import com.apurebase.kgraphql.ExperimentalAPI
import com.apurebase.kgraphql.configuration.SchemaConfiguration
import com.apurebase.kgraphql.schema.execution.ArgumentTransformer
import com.apurebase.kgraphql.schema.execution.Executor
import com.apurebase.kgraphql.schema.execution.GenericTypeResolver
import com.apurebase.kgraphql.stitched.schema.execution.RemoteRequestExecutor
import com.fasterxml.jackson.databind.ObjectMapper
Expand All @@ -21,7 +20,6 @@ class StitchedSchemaConfiguration(
// execution
coroutineDispatcher: CoroutineDispatcher,
wrapErrors: Boolean,
executor: Executor,
timeout: Long?,
// allow schema introspection
introspection: Boolean = true,
Expand All @@ -37,7 +35,6 @@ class StitchedSchemaConfiguration(
useDefaultPrettyPrinter,
coroutineDispatcher,
wrapErrors,
executor,
timeout,
introspection,
plugins,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ open class StitchedSchemaConfigurationDSL : SchemaConfigurationDSL() {
useDefaultPrettyPrinter = useDefaultPrettyPrinter,
coroutineDispatcher = coroutineDispatcher,
wrapErrors = wrapErrors,
executor = executor,
timeout = timeout,
introspection = introspection,
plugins = plugins,
Expand Down

This file was deleted.

43 changes: 9 additions & 34 deletions kgraphql/api/kgraphql.api
Original file line number Diff line number Diff line change
Expand Up @@ -82,13 +82,12 @@ public abstract interface class com/apurebase/kgraphql/configuration/PluginConfi
}

public class com/apurebase/kgraphql/configuration/SchemaConfiguration {
public fun <init> (ZJLcom/fasterxml/jackson/databind/ObjectMapper;ZLkotlinx/coroutines/CoroutineDispatcher;ZLcom/apurebase/kgraphql/schema/execution/Executor;Ljava/lang/Long;ZLjava/util/Map;Lcom/apurebase/kgraphql/schema/execution/GenericTypeResolver;Lcom/apurebase/kgraphql/schema/execution/ArgumentTransformer;)V
public synthetic fun <init> (ZJLcom/fasterxml/jackson/databind/ObjectMapper;ZLkotlinx/coroutines/CoroutineDispatcher;ZLcom/apurebase/kgraphql/schema/execution/Executor;Ljava/lang/Long;ZLjava/util/Map;Lcom/apurebase/kgraphql/schema/execution/GenericTypeResolver;Lcom/apurebase/kgraphql/schema/execution/ArgumentTransformer;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun <init> (ZJLcom/fasterxml/jackson/databind/ObjectMapper;ZLkotlinx/coroutines/CoroutineDispatcher;ZLjava/lang/Long;ZLjava/util/Map;Lcom/apurebase/kgraphql/schema/execution/GenericTypeResolver;Lcom/apurebase/kgraphql/schema/execution/ArgumentTransformer;)V
public synthetic fun <init> (ZJLcom/fasterxml/jackson/databind/ObjectMapper;ZLkotlinx/coroutines/CoroutineDispatcher;ZLjava/lang/Long;ZLjava/util/Map;Lcom/apurebase/kgraphql/schema/execution/GenericTypeResolver;Lcom/apurebase/kgraphql/schema/execution/ArgumentTransformer;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun get (Lkotlin/reflect/KClass;)Ljava/lang/Object;
public final fun getArgumentTransformer ()Lcom/apurebase/kgraphql/schema/execution/ArgumentTransformer;
public final fun getCoroutineDispatcher ()Lkotlinx/coroutines/CoroutineDispatcher;
public final fun getDocumentParserCacheMaximumSize ()J
public final fun getExecutor ()Lcom/apurebase/kgraphql/schema/execution/Executor;
public final fun getGenericTypeResolver ()Lcom/apurebase/kgraphql/schema/execution/GenericTypeResolver;
public final fun getIntrospection ()Z
public final fun getObjectMapper ()Lcom/fasterxml/jackson/databind/ObjectMapper;
Expand Down Expand Up @@ -613,7 +612,6 @@ public class com/apurebase/kgraphql/schema/dsl/SchemaConfigurationDSL {
public final fun getAcceptSingleValueAsArray ()Z
public final fun getCoroutineDispatcher ()Lkotlinx/coroutines/CoroutineDispatcher;
public final fun getDocumentParserCacheMaximumSize ()J
public final fun getExecutor ()Lcom/apurebase/kgraphql/schema/execution/Executor;
public final fun getGenericTypeResolver ()Lcom/apurebase/kgraphql/schema/execution/GenericTypeResolver;
public final fun getIntrospection ()Z
public final fun getObjectMapper ()Lcom/fasterxml/jackson/databind/ObjectMapper;
Expand All @@ -626,7 +624,6 @@ public class com/apurebase/kgraphql/schema/dsl/SchemaConfigurationDSL {
public final fun setAcceptSingleValueAsArray (Z)V
public final fun setCoroutineDispatcher (Lkotlinx/coroutines/CoroutineDispatcher;)V
public final fun setDocumentParserCacheMaximumSize (J)V
public final fun setExecutor (Lcom/apurebase/kgraphql/schema/execution/Executor;)V
public final fun setGenericTypeResolver (Lcom/apurebase/kgraphql/schema/execution/GenericTypeResolver;)V
public final fun setIntrospection (Z)V
public final fun setObjectMapper (Lcom/fasterxml/jackson/databind/ObjectMapper;)V
Expand Down Expand Up @@ -836,19 +833,6 @@ public class com/apurebase/kgraphql/schema/execution/ArgumentTransformer {
public fun transformArguments (Ljava/lang/String;Ljava/lang/Object;Ljava/util/List;Lcom/apurebase/kgraphql/schema/model/ast/ArgumentNodes;Lcom/apurebase/kgraphql/request/Variables;Lcom/apurebase/kgraphql/schema/execution/Execution;Lcom/apurebase/kgraphql/Context;Lcom/apurebase/kgraphql/schema/model/FunctionWrapper;)Ljava/util/List;
}

public final class com/apurebase/kgraphql/schema/execution/DataLoaderPreparedRequestExecutor : com/apurebase/kgraphql/schema/execution/RequestExecutor {
public fun <init> (Lcom/apurebase/kgraphql/schema/DefaultSchema;)V
public final fun getSchema ()Lcom/apurebase/kgraphql/schema/DefaultSchema;
public fun suspendExecute (Lcom/apurebase/kgraphql/schema/execution/ExecutionPlan;Lcom/apurebase/kgraphql/request/VariablesJson;Lcom/apurebase/kgraphql/Context;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
}

public final class com/apurebase/kgraphql/schema/execution/DataLoaderPreparedRequestExecutor$ExecutionContext {
public fun <init> (Lcom/apurebase/kgraphql/schema/execution/DataLoaderPreparedRequestExecutor;Lcom/apurebase/kgraphql/request/Variables;Lcom/apurebase/kgraphql/Context;Ljava/util/Map;)V
public final fun getLoaders ()Ljava/util/Map;
public final fun getRequestContext ()Lcom/apurebase/kgraphql/Context;
public final fun getVariables ()Lcom/apurebase/kgraphql/request/Variables;
}

public class com/apurebase/kgraphql/schema/execution/DefaultGenericTypeResolver : com/apurebase/kgraphql/schema/execution/GenericTypeResolver {
public fun <init> ()V
public fun resolveMonad (Lkotlin/reflect/KType;)Lkotlin/reflect/KType;
Expand Down Expand Up @@ -899,14 +883,12 @@ public final class com/apurebase/kgraphql/schema/execution/Execution$Union : com

public final class com/apurebase/kgraphql/schema/execution/ExecutionOptions {
public fun <init> ()V
public fun <init> (Lcom/apurebase/kgraphql/schema/execution/Executor;Ljava/lang/Long;)V
public synthetic fun <init> (Lcom/apurebase/kgraphql/schema/execution/Executor;Ljava/lang/Long;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Lcom/apurebase/kgraphql/schema/execution/Executor;
public final fun component2 ()Ljava/lang/Long;
public final fun copy (Lcom/apurebase/kgraphql/schema/execution/Executor;Ljava/lang/Long;)Lcom/apurebase/kgraphql/schema/execution/ExecutionOptions;
public static synthetic fun copy$default (Lcom/apurebase/kgraphql/schema/execution/ExecutionOptions;Lcom/apurebase/kgraphql/schema/execution/Executor;Ljava/lang/Long;ILjava/lang/Object;)Lcom/apurebase/kgraphql/schema/execution/ExecutionOptions;
public fun <init> (Ljava/lang/Long;)V
public synthetic fun <init> (Ljava/lang/Long;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Ljava/lang/Long;
public final fun copy (Ljava/lang/Long;)Lcom/apurebase/kgraphql/schema/execution/ExecutionOptions;
public static synthetic fun copy$default (Lcom/apurebase/kgraphql/schema/execution/ExecutionOptions;Ljava/lang/Long;ILjava/lang/Object;)Lcom/apurebase/kgraphql/schema/execution/ExecutionOptions;
public fun equals (Ljava/lang/Object;)Z
public final fun getExecutor ()Lcom/apurebase/kgraphql/schema/execution/Executor;
public final fun getTimeout ()Ljava/lang/Long;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
Expand Down Expand Up @@ -954,14 +936,6 @@ public final class com/apurebase/kgraphql/schema/execution/ExecutionPlan : java/
public fun toArray ([Ljava/lang/Object;)[Ljava/lang/Object;
}

public final class com/apurebase/kgraphql/schema/execution/Executor : java/lang/Enum {
public static final field DataLoaderPrepared Lcom/apurebase/kgraphql/schema/execution/Executor;
public static final field Parallel Lcom/apurebase/kgraphql/schema/execution/Executor;
public static fun getEntries ()Lkotlin/enums/EnumEntries;
public static fun valueOf (Ljava/lang/String;)Lcom/apurebase/kgraphql/schema/execution/Executor;
public static fun values ()[Lcom/apurebase/kgraphql/schema/execution/Executor;
}

public abstract interface class com/apurebase/kgraphql/schema/execution/GenericTypeResolver {
public static final field Companion Lcom/apurebase/kgraphql/schema/execution/GenericTypeResolver$Companion;
public abstract fun resolveMonad (Lkotlin/reflect/KType;)Lkotlin/reflect/KType;
Expand All @@ -986,7 +960,8 @@ public final class com/apurebase/kgraphql/schema/execution/ParallelRequestExecut
}

public final class com/apurebase/kgraphql/schema/execution/ParallelRequestExecutor$ExecutionContext {
public fun <init> (Lcom/apurebase/kgraphql/schema/execution/ParallelRequestExecutor;Lcom/apurebase/kgraphql/request/Variables;Lcom/apurebase/kgraphql/Context;)V
public fun <init> (Lcom/apurebase/kgraphql/schema/execution/ParallelRequestExecutor;Lcom/apurebase/kgraphql/request/Variables;Lcom/apurebase/kgraphql/Context;Ljava/util/Map;)V
public final fun getLoaders ()Ljava/util/Map;
public final fun getRequestContext ()Lcom/apurebase/kgraphql/Context;
public final fun getVariables ()Lcom/apurebase/kgraphql/request/Variables;
}
Expand Down
1 change: 0 additions & 1 deletion kgraphql/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@ dependencies {
implementation(libs.jackson.core.databind)
implementation(libs.jackson.module.kotlin)
implementation(libs.aedile)
implementation(libs.deferredJsonBuilder)

testImplementation(libs.kotest)
testImplementation(libs.junit.jupiter.api)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.apurebase.kgraphql.configuration

import com.apurebase.kgraphql.schema.execution.ArgumentTransformer
import com.apurebase.kgraphql.schema.execution.Executor
import com.apurebase.kgraphql.schema.execution.GenericTypeResolver
import com.fasterxml.jackson.databind.ObjectMapper
import kotlinx.coroutines.CoroutineDispatcher
Expand All @@ -17,7 +16,6 @@ open class SchemaConfiguration(
// execution
val coroutineDispatcher: CoroutineDispatcher,
val wrapErrors: Boolean,
val executor: Executor,
val timeout: Long?,
// allow schema introspection
val introspection: Boolean = true,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,12 @@
package com.apurebase.kgraphql.schema

import com.apurebase.kgraphql.Context
import com.apurebase.kgraphql.ExperimentalAPI
import com.apurebase.kgraphql.ValidationException
import com.apurebase.kgraphql.configuration.SchemaConfiguration
import com.apurebase.kgraphql.request.Introspection
import com.apurebase.kgraphql.request.Parser
import com.apurebase.kgraphql.request.VariablesJson
import com.apurebase.kgraphql.schema.execution.DataLoaderPreparedRequestExecutor
import com.apurebase.kgraphql.schema.execution.ExecutionOptions
import com.apurebase.kgraphql.schema.execution.Executor
import com.apurebase.kgraphql.schema.execution.Executor.DataLoaderPrepared
import com.apurebase.kgraphql.schema.execution.Executor.Parallel
import com.apurebase.kgraphql.schema.execution.ParallelRequestExecutor
import com.apurebase.kgraphql.schema.execution.RequestExecutor
import com.apurebase.kgraphql.schema.introspection.__Schema
Expand All @@ -32,13 +27,7 @@ class DefaultSchema(
val OPERATION_NAME_PARAM = NameNode("operationName", null)
}

private val defaultRequestExecutor: RequestExecutor = getExecutor(configuration.executor)

@OptIn(ExperimentalAPI::class)
private fun getExecutor(executor: Executor) = when (executor) {
Parallel -> ParallelRequestExecutor(this)
DataLoaderPrepared -> DataLoaderPreparedRequestExecutor(this)
}
private val requestExecutor: RequestExecutor = ParallelRequestExecutor(this)

private val requestInterpreter: RequestInterpreter = RequestInterpreter(model)

Expand All @@ -59,9 +48,7 @@ class DefaultSchema(

val document = Parser(request).parseDocument()

val executor = options.executor?.let(this@DefaultSchema::getExecutor) ?: defaultRequestExecutor

executor.suspendExecute(
requestExecutor.suspendExecute(
plan = requestInterpreter.createExecutionPlan(document, operationName, parsedVariables, options),
variables = parsedVariables,
context = context
Expand Down
Loading
Loading