Query: shortcircuit query when result is guaranteed to be empty #459
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.
The
-collect
fn, run at the end of a query, correctly shortcircuits with the following comment:"one empty rel means final set has to be empty"
However, while processing the query clauses, there was no shortcircuit. Because the implementation of
lookup-pattern
is agnostic to existing rels, this means that the query engine will continue slicing the indexes for every tuple that could possibly match every clause until all clauses are exhausted.This is a one-line change to add a shortcircuit in
resolve-clause
if any existing relation is empty. The check is cheap, and it should provide a substantial performance boost in many common cases.Motivation: substantial performance boost for a real-world app