Type-erased iteration of result sets #1452
Merged
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.
Type-erased iteration of result sets
Like originally asked in an inline question [answer] it can be desirable to pass a lazily generated query result across library boundaries. This library boundary should be independent of template arguments only used for traditional C++ views and iterators.
With C++23 we can make use of a coroutine-based generator for ranges.
Additionally to the
iterate()
method sqlite_orm's "storage" class now comes with ayield()
method that returns astd::generator<result>
.I have chosen
yield
for the method name to create the range generator, as I didn't likegenerate
, andyield
says what it does.Another good name for the new method could be
query
.We have to agree on a name for the new "storage" method:
yield
query
generate
produce