Check if both sqlite3 databases have a data_version variable, * *and* are the same. */
| 60 | * *and* are the same. |
| 61 | */ |
| 62 | static bool have_same_data_version(sqlite3 *a, sqlite3 *b) |
| 63 | { |
| 64 | sqlite3_stmt *stmt; |
| 65 | const char *qry = "SELECT intval FROM vars" |
| 66 | " WHERE name = 'data_version';"; |
| 67 | int err; |
| 68 | |
| 69 | u64 version_a; |
| 70 | u64 version_b; |
| 71 | |
| 72 | sqlite3_prepare_v2(a, qry, -1, &stmt, NULL); |
| 73 | err = sqlite3_step(stmt); |
| 74 | if (err != SQLITE_ROW) { |
| 75 | sqlite3_finalize(stmt); |
| 76 | return false; |
| 77 | } |
| 78 | version_a = sqlite3_column_int64(stmt, 0); |
| 79 | sqlite3_finalize(stmt); |
| 80 | |
| 81 | sqlite3_prepare_v2(b, qry, -1, &stmt, NULL); |
| 82 | err = sqlite3_step(stmt); |
| 83 | if (err != SQLITE_ROW) { |
| 84 | sqlite3_finalize(stmt); |
| 85 | return false; |
| 86 | } |
| 87 | version_b = sqlite3_column_int64(stmt, 0); |
| 88 | sqlite3_finalize(stmt); |
| 89 | |
| 90 | return version_a == version_b; |
| 91 | } |
| 92 | |
| 93 | static const char *db_sqlite3_fmt_error(struct db_stmt *stmt) |
| 94 | { |