+QJsonArray export_formations_to_json(sqlite3 *db)
+{
+ QJsonArray formations;
+
+ sqlite3_stmt *stmt;
+ int ret = sqlite3_prepare_v2(db, "SELECT formation, offense, name FROM formation ORDER BY name", -1, &stmt, 0);
+ if (ret != SQLITE_OK) {
+ fprintf(stderr, "SELECT prepare: %s\n", sqlite3_errmsg(db));
+ abort();
+ }
+ for ( ;; ) {
+ ret = sqlite3_step(stmt);
+ if (ret == SQLITE_ROW) {
+ QJsonObject f;
+ f.insert("formation_id", sqlite3_column_int(stmt, 0));
+ f.insert("offense", bool(sqlite3_column_int(stmt, 1)));
+ f.insert("name", (const char *)sqlite3_column_text(stmt, 2));
+ formations.push_back(std::move(f));
+ } else if (ret == SQLITE_DONE) {
+ break;
+ } else {
+ fprintf(stderr, "SELECT step: %s\n", sqlite3_errmsg(db));
+ abort();
+ }
+ }
+ ret = sqlite3_finalize(stmt);
+ if (ret != SQLITE_OK) {
+ fprintf(stderr, "SELECT finalize: %s\n", sqlite3_errmsg(db));
+ abort();
+ }
+
+ return formations;
+}
+