# # # patch "database.cc" # from [c406561ce749a88bb40944cd2abd02a2c8672dfe] # to [ce8a7beb88e538e867316c61f6aa69af9cd79faf] # # patch "database.hh" # from [b8d1cd794c67689fa9b5f40cafed27bee649a6d6] # to [71477ad5bb2636aee1e5032992eb0405c21cc275] # ============================================================ --- database.cc c406561ce749a88bb40944cd2abd02a2c8672dfe +++ database.cc ce8a7beb88e538e867316c61f6aa69af9cd79faf @@ -555,6 +555,13 @@ va_end(args); } +void +database::execute(std::string const& query, std::vector const& args) +{ + results res; + fetch(res, 0, 0, query, args); +} + void database::fetch(results & res, int const want_cols, @@ -568,7 +575,8 @@ } database::statement & -database::prepare(char const * query) +database::prepare(char const * query, + int const want_cols) { map::iterator i = statement_cache.find(query); if (i == statement_cache.end()) @@ -586,6 +594,12 @@ E(*tail == 0, F("multiple statements in query: %s\n") % query); } + + int ncol = sqlite3_column_count(i->second.stmt()); + + E(want_cols == any_cols || want_cols == ncol, + F("wanted %d columns got %d in query: %s\n") % want_cols % ncol % query); + return i->second; } @@ -600,12 +614,7 @@ res.clear(); res.resize(0); - statement &stmt = prepare(query); - int ncol = sqlite3_column_count(stmt.stmt()); - - E(want_cols == any_cols || want_cols == ncol, - F("wanted %d columns got %d in query: %s\n") % want_cols % ncol % query); - + statement &stmt = prepare(query, want_cols); // bind parameters for this execution int params = sqlite3_bind_parameter_count(stmt.stmt()); @@ -678,18 +687,14 @@ database::fetch(results & res, int const want_cols, int const want_rows, - char const * query, + std::string const& query, std::vector const& args) { res.clear(); res.resize(0); - statement &stmt = prepare(query); - int ncol = sqlite3_column_count(stmt.stmt()); + statement &stmt = prepare(query, want_cols); - E(want_cols == any_cols || want_cols == ncol, - F("wanted %d columns got %d in query: %s\n") % want_cols % ncol % query); - // bind parameters for this execution int params = sqlite3_bind_parameter_count(stmt.stmt()); ============================================================ --- database.hh b8d1cd794c67689fa9b5f40cafed27bee649a6d6 +++ database.hh 71477ad5bb2636aee1e5032992eb0405c21cc275 @@ -96,8 +96,10 @@ typedef std::vector< std::vector > results; void execute(char const * query, ...); + void execute(std::string const& query, std::vector const& args); - statement& prepare(char const * query); + statement& prepare(char const * query, + int const want_cols); void fetch(statement & stmt, results & res, @@ -119,7 +121,7 @@ void fetch(results & res, int const want_cols, int const want_rows, - char const * query, + std::string const& query, std::vector const& args); bool exists(hexenc const & ident,