Support contains, exists, forall for optional embedded case classes with optional fields. #838
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 #785
Solution
embedded.forall(...)
asOptionExists
ASTNotes
embedded.forall(...)
currently generates invalid query like(t.embedded IS NULL) || ...
.One option is to generate instead -
((t.a IS NULL) && (t.b IS NULL)) || ...
where a, b is embedded fields, but it's too hard because onFlattenOptionOperation
stage there is no info about embedded case classes and their fields. Also this behavior will be too complex and unexpected (especially if there will be nested embedded case classes). Without this behaviorembedded.forall(...)
is equivalent toembedded.exists(...)
. I thought about adding warning on parsing stage to motivate developers useexists()
instead offorall()
with embedded case classes but I do not think that someone will expect fromforall()
the behavior that I described above (with generating((t.a IS NULL) && (t.b IS NULL)) || ...
).Checklist
README.md
if applicable[WIP]
to the pull request title if it's work in progresssbt scalariformFormat test:scalariformFormat
to make sure that the source files are formatted@getquill/maintainers