| 2303 | } |
| 2304 | |
| 2305 | bool ExistsColumn(const std::string& table_name, |
| 2306 | const std::string& column_name) const { |
| 2307 | const std::string sql = |
| 2308 | StringPrintf("PRAGMA table_info(%s);", table_name.c_str()); |
| 2309 | |
| 2310 | sqlite3_stmt* sql_stmt; |
| 2311 | SQLITE3_CALL(sqlite3_prepare_v2( |
| 2312 | THROW_CHECK_NOTNULL(database_), sql.c_str(), -1, &sql_stmt, 0)); |
| 2313 | |
| 2314 | bool exists_column = false; |
| 2315 | while (SQLITE3_CALL(sqlite3_step(sql_stmt)) == SQLITE_ROW) { |
| 2316 | const std::string result = |
| 2317 | reinterpret_cast<const char*>(sqlite3_column_text(sql_stmt, 1)); |
| 2318 | if (column_name == result) { |
| 2319 | exists_column = true; |
| 2320 | break; |
| 2321 | } |
| 2322 | } |
| 2323 | |
| 2324 | SQLITE3_CALL(sqlite3_finalize(sql_stmt)); |
| 2325 | |
| 2326 | return exists_column; |
| 2327 | } |
| 2328 | |
| 2329 | bool ExistsRowId(sqlite3_stmt* sql_stmt, const sqlite3_int64 row_id) const { |
| 2330 | Sqlite3StmtContext context(sql_stmt); |
nothing calls this directly
no test coverage detected