fix(compiler): cache the implementers map per executable document #863
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes #862.
I had proposed a different approach that would let us cache the implementers map for as long as the schema is immutable, so it could be reused for different query validations. That approach had an issue that made
Valid::assume_valid_ref
very, very subtle to use, so we are not doing that right now.This is a less ideal version but it does solve the immediate problem. We had an
OperationValidationConfig
structure that contains contextual information about the current operation. This extends that idea to have anExecutableValidationContext
for the whole document, and "child"OperationValidationContext
s for each operation.The included benchmark goes from 200ms of validation time to 2ms.