c++ - sqlite3_step and number of results -


after sqlite3_prepare_v2() of statement, need sqlite3_step() it.

for moment, let's ignore return values except sqlite3_row , sqlite3_done.

as long return value of sqlite3_step() sqlite3_row, need keep calling it, till results. last return value sqlite3_done.

i'm entering results std::vector using push_back().

from i've read, should have average complexity of o(log(n)) due resizing of internal array of vector. in order reduce complexity o(1), need use reserve() of vector, before doing push_back().

but sqlite3 api, can't see function returns total number of results get, before sqlite3_step() it.

how can sqlite3?

first of all: did benchmark it? bottleneck? if no, stop worrying efficiency , complexity now, , goto end of answer.

still here? ok, let me tell 1 more thing: resizing vector may of complexity, it's implementor of c++ standard library. may o(1), o(n), o(log n), etc. 1 thing sure: if have got n results database, you ain't no going retrieve data in o(n). because have... n results.

so think should still not worry - vector fast (assuming reasonably high-quality standard library implementation). go ahead , write while loop , push_back() elements 1 after , that's it.

but, if still being scared slowness of poor old vector, here's how find number of rows returned query - specific sqlite:

select count(*) the_table some_condition; 

also, there few more possibilities, described in answers this question.


Comments