Range for loop for statements#545
Conversation
fbb99e8 to
83bb827
Compare
| SQLITECPP_API RowIterator& operator++(); | ||
|
|
||
| /// Return true when two iterators do not point to the same row. | ||
| SQLITECPP_API bool operator!=(const RowIterator& aOther) const; |
There was a problem hiding this comment.
The PR description calls this "full iterator traits." The traits are all here, but the interface isn't: there's no operator== and no post-increment operator++(int) next to this operator!=. Range-based for only calls operator!=, so nothing breaks today. The catch is that anyone who reaches for it with <algorithm>, or checks it against the C++20 std::input_iterator concept (which requires ==), hits a wall. Either add operator== and post-increment, or soften the claim to "usable in range-based for loops."
|
|
||
| /// Construct an end sentinel (no associated Statement). | ||
| RowIterator() = default; | ||
| RowIterator(const RowIterator&) = default; |
There was a problem hiding this comment.
This line is redundant: the copy constructor gets generated anyway. Declaring it also has two quiet side effects: it makes implicit copy-assignment deprecated, and it suppresses the implicit move members, so moves fall back to copy (harmless for a single pointer, but not the intent). The RowIterator() = default; above it is the one that's actually needed, since the Statement* constructor suppresses the implicit default constructor. For a trivial pointer holder I'd drop this line and let copy, move, assignment, and the destructor stay implicit (Rule of Zero). Not blocking.
| } | ||
|
|
||
|
|
||
| // Return a UTF-8 string containing the SQL text of prepared statement with bound parameters expanded. |
There was a problem hiding this comment.
Very minor and not blocking, not really an issue: the diff drops a blank line here (and another around prepareStatement() below) that aren't part of the iterator change. You could revert them to keep the diff focused, but it's completely fine to leave as-is if you prefer.
300d023 to
c996909
Compare
Closes #181
Adds a nested
RowIteratorclass toStatementthat enables range-based for loops over query results:Notes:
begin()callsreset()automatically, so re-iterating the same Statement always starts from the beginningreset()RowIteratorsatisfiesstd::input_iterator_tagwith full iterator traits