X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=json.cpp;h=2e3398d9057d8f431aa3251ad3bb2eea42f45b38;hb=05a32509046f05d110de9e847025544c2a36ed02;hp=ec7d3eb3c58a78714c6b7acf5a546015646ddd7e;hpb=e72f24ba4f127c772d05a4630c379ccc8ca1c583;p=pkanalytics diff --git a/json.cpp b/json.cpp index ec7d3eb..2e3398d 100644 --- a/json.cpp +++ b/json.cpp @@ -39,6 +39,40 @@ QJsonArray export_players_to_json(sqlite3 *db) return players; } +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; +} + QJsonArray export_matches_to_json(sqlite3 *db) { QJsonArray matches; @@ -46,7 +80,7 @@ QJsonArray export_matches_to_json(sqlite3 *db) // Load the events, splitting them into matches as we go. std::map events_per_match; sqlite3_stmt *stmt; - int ret = sqlite3_prepare_v2(db, "SELECT match, t, player, type FROM event ORDER BY t", -1, &stmt, 0); + int ret = sqlite3_prepare_v2(db, "SELECT match, t, player, formation, type FROM event ORDER BY t", -1, &stmt, 0); if (ret != SQLITE_OK) { fprintf(stderr, "SELECT prepare: %s\n", sqlite3_errmsg(db)); abort(); @@ -66,7 +100,12 @@ QJsonArray export_matches_to_json(sqlite3 *db) } else { e.insert("player", QJsonValue()); // null } - e.insert("type", (const char *)sqlite3_column_text(stmt, 3)); + if (sqlite3_column_type(stmt, 3) == SQLITE_INTEGER) { + e.insert("formation", sqlite3_column_int(stmt, 3)); + } else { + e.insert("formation", QJsonValue()); // null + } + e.insert("type", (const char *)sqlite3_column_text(stmt, 4)); events_per_match[match]->push_back(std::move(e)); } else if (ret == SQLITE_DONE) { break; @@ -82,7 +121,7 @@ QJsonArray export_matches_to_json(sqlite3 *db) } // Load the matches themselves. - ret = sqlite3_prepare_v2(db, "SELECT match, description FROM match ORDER BY match", -1, &stmt, 0); + ret = sqlite3_prepare_v2(db, "SELECT match, description, gender_rule_a, gender_pull_rule FROM match ORDER BY match", -1, &stmt, 0); if (ret != SQLITE_OK) { fprintf(stderr, "SELECT prepare: %s\n", sqlite3_errmsg(db)); abort(); @@ -94,6 +133,8 @@ QJsonArray export_matches_to_json(sqlite3 *db) QJsonObject m; m.insert("match_id", match); m.insert("description", (const char *)sqlite3_column_text(stmt, 1)); + m.insert("gender_rule_a", (bool)sqlite3_column_int64(stmt, 2)); + m.insert("gender_pull_rule", (bool)sqlite3_column_int64(stmt, 3)); if (events_per_match.count(match)) { m.insert("events", std::move(*events_per_match[match])); delete events_per_match[match]; @@ -121,6 +162,7 @@ void export_to_json(sqlite3 *db, const char *filename) { QJsonObject obj; obj.insert("players", export_players_to_json(db)); + obj.insert("formations", export_formations_to_json(db)); obj.insert("matches", export_matches_to_json(db)); QByteArray serialized = QString(QJsonDocument(obj).toJson(QJsonDocument::Compact)).toUtf8();