Skip to content

Commit 3d7e040

Browse files
committed
Reimplement execute primitives with iterators
1 parent d35b6f0 commit 3d7e040

File tree

1 file changed

+17
-30
lines changed

1 file changed

+17
-30
lines changed

hdr/sqlite_modern_cpp.h

Lines changed: 17 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -154,37 +154,9 @@ namespace sqlite {
154154
used(true);
155155
}
156156

157-
void _extract(std::function<void(void)> call_back) {
158-
int hresult;
159-
_start_execute();
160-
161-
while((hresult = sqlite3_step(_stmt.get())) == SQLITE_ROW) {
162-
call_back();
163-
}
157+
void _extract(std::function<void(void)> call_back);
164158

165-
if(hresult != SQLITE_DONE) {
166-
errors::throw_sqlite_error(hresult, sql());
167-
}
168-
}
169-
170-
void _extract_single_value(std::function<void(void)> call_back) {
171-
int hresult;
172-
_start_execute();
173-
174-
if((hresult = sqlite3_step(_stmt.get())) == SQLITE_ROW) {
175-
call_back();
176-
} else if(hresult == SQLITE_DONE) {
177-
throw errors::no_rows("no rows to extract: exactly 1 row expected", sql(), SQLITE_DONE);
178-
}
179-
180-
if((hresult = sqlite3_step(_stmt.get())) == SQLITE_ROW) {
181-
throw errors::more_rows("not all rows extracted", sql(), SQLITE_ROW);
182-
}
183-
184-
if(hresult != SQLITE_DONE) {
185-
errors::throw_sqlite_error(hresult, sql());
186-
}
187-
}
159+
void _extract_single_value(std::function<void(void)> call_back);
188160

189161
#ifdef _MSC_VER
190162
sqlite3_stmt* _prepare(const std::u16string& sql) {
@@ -397,6 +369,21 @@ namespace sqlite {
397369
inline row_iterator database_binder::end() {
398370
return row_iterator();
399371
}
372+
void database_binder::_extract(std::function<void(void)> call_back) {
373+
for(auto &&row[[maybe_unused]] : *this)
374+
call_back();
375+
}
376+
377+
void database_binder::_extract_single_value(std::function<void(void)> call_back) {
378+
auto iter = begin();
379+
if(iter == end())
380+
throw errors::no_rows("no rows to extract: exactly 1 row expected", sql(), SQLITE_DONE);
381+
382+
call_back();
383+
384+
if(++iter != end())
385+
throw errors::more_rows("not all rows extracted", sql(), SQLITE_ROW);
386+
}
400387

401388
namespace sql_function_binder {
402389
template<

0 commit comments

Comments
 (0)