Optimize <|>: implementation of Tabulation#178
Merged
shane-circuithub merged 1 commit intomasterfrom Jun 9, 2022
Merged
Conversation
ocharles
approved these changes
Jun 9, 2022
`Tabulation` has an instance of `AltTable`, which is intended to uphold the following law: ```haskell fromQuery a <|>: fromQuery b = fromQuery (a <|>: b) ``` The previous implementation was not actually defined in terms of `Query`'s `<|>:` (i.e., `UNION ALL`), because not every `Tabulation` can be safely `toQuery`'d. Instead it used a combination of `alignWith`, `catNonEmptyTable` and `some` that worked even on "magic" `Tabulation`s. However, using `unsafePeekQuery`, we can actually "statically" determine if a `Tabulation` is "magic" or not, which means we can selectively switch the implementation to use `Query`'s `<|>:` where possible. This produces a simpler and usually faster query.
26d8819 to
6a12b66
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Tabulationhas an instance ofAltTable, which is intended to uphold the following law:The previous implementation was not actually defined in terms of
Query's<|>:(i.e.,UNION ALL), because not everyTabulationcan be safelytoQuery'd. Instead it used a combination ofalignWith,catNonEmptyTableandsomethat worked even on "magic"Tabulations.However, using
unsafePeekQuery, we can actually "statically" determine if aTabulationis "magic" or not, which means we can selectively switch the implementation to useQuery's<|>:where possible. This produces a simpler and usually faster query.