Skip to content

Commit 306570c

Browse files
committed
Remove short circuit empty query hint
1 parent 58c419e commit 306570c

33 files changed

Lines changed: 25 additions & 582 deletions

File tree

lib/src/main/java/graphql/nadel/NadelExecutionHints.kt

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import graphql.nadel.hints.NadelNoInterfaceToObjectFragmentExpansionHint
1212
import graphql.nadel.hints.NadelReachableUnderlyingServiceTypesHint
1313
import graphql.nadel.hints.NadelShadowUnderlyingTypeNameInvestigation
1414
import graphql.nadel.hints.NadelSharedTypeRenamesHint
15-
import graphql.nadel.hints.NadelShortCircuitEmptyQueryHint
1615
import graphql.nadel.hints.NadelVirtualTypeSupportHint
1716
import graphql.nadel.hints.NewResultMergerAndNamespacedTypename
1817

@@ -22,7 +21,6 @@ data class NadelExecutionHints(
2221
val newResultMergerAndNamespacedTypename: NewResultMergerAndNamespacedTypename,
2322
val deferSupport: NadelDeferSupportHint,
2423
val sharedTypeRenames: NadelSharedTypeRenamesHint,
25-
val shortCircuitEmptyQuery: NadelShortCircuitEmptyQueryHint,
2624
val virtualTypeSupport: NadelVirtualTypeSupportHint,
2725
val executeOnEngineSchema: NadelExecuteOnEngineSchemaHint,
2826
val hydrationFilterObjectTypes: NadelHydrationFilterObjectTypesHint,
@@ -48,7 +46,6 @@ data class NadelExecutionHints(
4846
private var allDocumentVariablesHint = AllDocumentVariablesHint { false }
4947
private var newResultMergerAndNamespacedTypename = NewResultMergerAndNamespacedTypename { false }
5048
private var deferSupport = NadelDeferSupportHint { false }
51-
private var shortCircuitEmptyQuery = NadelShortCircuitEmptyQueryHint { false }
5249
private var sharedTypeRenames = NadelSharedTypeRenamesHint { false }
5350
private var virtualTypeSupport = NadelVirtualTypeSupportHint { false }
5451
private var executeOnEngineSchema = NadelExecuteOnEngineSchemaHint { false }
@@ -67,7 +64,6 @@ data class NadelExecutionHints(
6764
allDocumentVariablesHint = nadelExecutionHints.allDocumentVariablesHint
6865
newResultMergerAndNamespacedTypename = nadelExecutionHints.newResultMergerAndNamespacedTypename
6966
deferSupport = nadelExecutionHints.deferSupport
70-
shortCircuitEmptyQuery = nadelExecutionHints.shortCircuitEmptyQuery
7167
sharedTypeRenames = nadelExecutionHints.sharedTypeRenames
7268
virtualTypeSupport = nadelExecutionHints.virtualTypeSupport
7369
executeOnEngineSchema = nadelExecutionHints.executeOnEngineSchema
@@ -100,11 +96,6 @@ data class NadelExecutionHints(
10096
return this
10197
}
10298

103-
fun shortCircuitEmptyQuery(flag: NadelShortCircuitEmptyQueryHint): Builder {
104-
shortCircuitEmptyQuery = flag
105-
return this
106-
}
107-
10899
fun sharedTypeRenames(flag: NadelSharedTypeRenamesHint): Builder {
109100
sharedTypeRenames = flag
110101
return this
@@ -162,7 +153,6 @@ data class NadelExecutionHints(
162153
newResultMergerAndNamespacedTypename,
163154
deferSupport,
164155
sharedTypeRenames,
165-
shortCircuitEmptyQuery,
166156
virtualTypeSupport,
167157
executeOnEngineSchema,
168158
hydrationFilterObjectTypes,

lib/src/main/java/graphql/nadel/NextgenEngine.kt

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import graphql.nadel.engine.transform.query.DynamicServiceResolution
2626
import graphql.nadel.engine.transform.query.NadelFieldToService
2727
import graphql.nadel.engine.transform.query.NadelQueryTransformer
2828
import graphql.nadel.engine.transform.result.NadelResultTransformer
29+
import graphql.nadel.engine.transform.skipInclude.NadelSkipIncludeTransform.Companion.isSkipIncludeArtificialField
2930
import graphql.nadel.engine.util.MutableJsonMap
3031
import graphql.nadel.engine.util.beginExecute
3132
import graphql.nadel.engine.util.compileToDocument
@@ -416,7 +417,7 @@ internal class NextgenEngine(
416417
.firstOrNull() ?: topLevelFields.first(),
417418
)
418419

419-
val serviceExecution = getServiceExecution(service, topLevelFields, executionContext.hints)
420+
val serviceExecution = getServiceExecution(service, topLevelFields)
420421
val serviceExecResult = try {
421422
serviceExecution.execute(serviceExecParams)
422423
.asDeferred()
@@ -474,13 +475,12 @@ internal class NextgenEngine(
474475
private fun getServiceExecution(
475476
service: Service,
476477
topLevelFields: List<ExecutableNormalizedField>,
477-
hints: NadelExecutionHints,
478478
): ServiceExecution {
479-
if (hints.shortCircuitEmptyQuery(service) && isOnlyTopLevelFieldTypename(topLevelFields, service)) {
480-
return engineSchemaIntrospectionService.serviceExecution
479+
return if (isOnlyTopLevelFieldTypename(topLevelFields, service)) {
480+
engineSchemaIntrospectionService.serviceExecution
481+
} else {
482+
service.serviceExecution
481483
}
482-
483-
return service.serviceExecution
484484
}
485485

486486
private fun isOnlyTopLevelFieldTypename(
@@ -496,6 +496,7 @@ internal class NextgenEngine(
496496
return isNamespacedFieldLike(service, topLevelField)
497497
&& topLevelField.hasChildren()
498498
&& topLevelField.children.all { it.name == TypeNameMetaFieldDef.name }
499+
&& topLevelField.children.none(::isSkipIncludeArtificialField)
499500
}
500501

501502
private fun getDocumentVariablePredicate(hints: NadelExecutionHints, service: Service): VariablePredicate {

lib/src/main/java/graphql/nadel/engine/transform/skipInclude/NadelSkipIncludeTransform.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,16 @@ import graphql.schema.GraphQLSchema
3838
internal class NadelSkipIncludeTransform : NadelTransform<State> {
3939
companion object {
4040
private const val skipFieldName = "__skip"
41+
private const val skipIncludeTag = "skip_include"
4142

4243
fun isSkipIncludeSpecialField(enf: ExecutableNormalizedField): Boolean {
4344
return enf.name == skipFieldName
4445
}
46+
47+
fun isSkipIncludeArtificialField(enf: ExecutableNormalizedField): Boolean {
48+
return enf.name == Introspection.TypeNameMetaFieldDef.name
49+
&& enf.resultKey == "${Introspection.TypeNameMetaFieldDef.name}__${skipIncludeTag}__${skipFieldName}"
50+
}
4551
}
4652

4753
class State(
@@ -81,7 +87,7 @@ internal class NadelSkipIncludeTransform : NadelTransform<State> {
8187
return if (overallField.name == skipFieldName) {
8288
State(
8389
aliasHelper = NadelAliasHelper.forField(
84-
tag = "skip_include",
90+
tag = skipIncludeTag,
8591
field = overallField,
8692
),
8793
)

lib/src/main/java/graphql/nadel/hints/NadelShortCircuitEmptyQueryHint.kt

Lines changed: 0 additions & 14 deletions
This file was deleted.

test/src/test/kotlin/graphql/nadel/tests/hooks/remove-fields.kt

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package graphql.nadel.tests.hooks
33
import graphql.ErrorClassification
44
import graphql.GraphQLError
55
import graphql.nadel.Nadel
6-
import graphql.nadel.NadelExecutionHints
76
import graphql.nadel.hooks.NadelExecutionHooks
87
import graphql.nadel.tests.EngineTestHook
98
import graphql.nadel.tests.UseHook
@@ -98,61 +97,46 @@ class `one-of-top-level-fields-is-removed` : EngineTestHook {
9897
@UseHook
9998
class `top-level-field-is-removed` : EngineTestHook {
10099
override val customTransforms = listOf(RemoveFieldTestTransform())
101-
override fun makeExecutionHints(builder: NadelExecutionHints.Builder) = builder.shortCircuitEmptyQuery { true }
102100
}
103101

104102
@UseHook
105103
class `top-level-field-is-removed-for-a-subscription` : EngineTestHook {
106104
override val customTransforms = listOf(RemoveFieldTestTransform())
107-
override fun makeExecutionHints(builder: NadelExecutionHints.Builder) = builder.shortCircuitEmptyQuery { true }
108105
}
109106

110107
@UseHook
111108
class `top-level-field-is-removed-for-a-subscription-with-namespaced-field` : EngineTestHook {
112109
override val customTransforms = listOf(RemoveFieldTestTransform())
113-
override fun makeExecutionHints(builder: NadelExecutionHints.Builder) = builder.shortCircuitEmptyQuery { true }
114-
}
115-
116-
@UseHook
117-
class `top-level-field-is-removed-hint-is-off` : EngineTestHook {
118-
override val customTransforms = listOf(RemoveFieldTestTransform())
119-
override fun makeExecutionHints(builder: NadelExecutionHints.Builder) = builder.shortCircuitEmptyQuery { false }
120110
}
121111

122112
@UseHook
123113
class `hydration-top-level-field-is-removed` : EngineTestHook {
124114
override val customTransforms = listOf(RemoveFieldTestTransform())
125-
override fun makeExecutionHints(builder: NadelExecutionHints.Builder) = builder.shortCircuitEmptyQuery { true }
126115
}
127116

128117
@UseHook
129118
class `namespaced-hydration-top-level-field-is-removed` : EngineTestHook {
130119
override val customTransforms = listOf(RemoveFieldTestTransform())
131-
override fun makeExecutionHints(builder: NadelExecutionHints.Builder) = builder.shortCircuitEmptyQuery { true }
132120
}
133121

134122
@UseHook
135123
class `hidden-namespaced-hydration-top-level-field-is-removed` : EngineTestHook {
136124
override val customTransforms = listOf(RemoveFieldTestTransform())
137-
override fun makeExecutionHints(builder: NadelExecutionHints.Builder) = builder.shortCircuitEmptyQuery { true }
138125
}
139126

140127
@UseHook
141128
class `namespaced-field-is-removed` : EngineTestHook {
142129
override val customTransforms = listOf(RemoveFieldTestTransform())
143-
override fun makeExecutionHints(builder: NadelExecutionHints.Builder) = builder.shortCircuitEmptyQuery { true }
144130
}
145131

146132
@UseHook
147133
class `namespaced-field-is-removed-with-renames` : EngineTestHook {
148134
override val customTransforms = listOf(RemoveFieldTestTransform())
149-
override fun makeExecutionHints(builder: NadelExecutionHints.Builder) = builder.shortCircuitEmptyQuery { true }
150135
}
151136

152137
@UseHook
153138
class `renamed-top-level-field-is-not-removed-short-circuit-hint-is-on` : EngineTestHook {
154139
override val customTransforms = listOf(RemoveFieldTestTransform())
155-
override fun makeExecutionHints(builder: NadelExecutionHints.Builder) = builder.shortCircuitEmptyQuery { true }
156140
}
157141

158142
// @UseHook

test/src/test/kotlin/graphql/nadel/tests/legacy/field removed/top level field is removed hint is off snapshot.kt

Lines changed: 0 additions & 82 deletions
This file was deleted.

test/src/test/kotlin/graphql/nadel/tests/legacy/field removed/top level field is removed hint is off.kt

Lines changed: 0 additions & 47 deletions
This file was deleted.

test/src/test/kotlin/graphql/nadel/tests/legacy/namespaced/typename is sent to owning service even when no fields are queried snapshot.kt

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -50,28 +50,6 @@ public class `typename is sent to owning service even when no fields are queried
5050
delayedResults = listOfJsonStrings(
5151
),
5252
),
53-
ExpectedServiceCall(
54-
service = "Issues",
55-
query = """
56-
| {
57-
| issue {
58-
| __typename
59-
| }
60-
| }
61-
""".trimMargin(),
62-
variables = "{}",
63-
result = """
64-
| {
65-
| "data": {
66-
| "issue": {
67-
| "__typename": "IssueQuery"
68-
| }
69-
| }
70-
| }
71-
""".trimMargin(),
72-
delayedResults = listOfJsonStrings(
73-
),
74-
),
7553
)
7654

7755
/**

test/src/test/kotlin/graphql/nadel/tests/legacy/new hydration/basic hydration with static arg boolean snapshot.kt

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -21,28 +21,6 @@ private suspend fun main() {
2121
@Suppress("unused")
2222
public class `basic hydration with static arg boolean snapshot` : TestSnapshot() {
2323
override val calls: List<ExpectedServiceCall> = listOf(
24-
ExpectedServiceCall(
25-
service = "service1",
26-
query = """
27-
| {
28-
| foo {
29-
| __typename__hydration__bar: __typename
30-
| }
31-
| }
32-
""".trimMargin(),
33-
variables = "{}",
34-
result = """
35-
| {
36-
| "data": {
37-
| "foo": {
38-
| "__typename__hydration__bar": "Foo"
39-
| }
40-
| }
41-
| }
42-
""".trimMargin(),
43-
delayedResults = listOfJsonStrings(
44-
),
45-
),
4624
ExpectedServiceCall(
4725
service = "service2",
4826
query = """

0 commit comments

Comments
 (0)