}
// Read the events.
- ret = sqlite3_prepare_v2(db, "SELECT t, player, type FROM event", -1, &stmt, 0);
+ ret = sqlite3_prepare_v2(db, "SELECT event, t, player, type FROM event", -1, &stmt, 0);
if (ret != SQLITE_OK) {
fprintf(stderr, "SELECT prepare: %s\n", sqlite3_errmsg(db));
abort();
ret = sqlite3_step(stmt);
if (ret == SQLITE_ROW) {
Event e;
- e.t = sqlite3_column_int(stmt, 0);
- e.player_id = sqlite3_column_int(stmt, 1);
- e.type = (const char *)sqlite3_column_text(stmt, 2);
+ e.event_id = sqlite3_column_int(stmt, 0);
+ e.t = sqlite3_column_int(stmt, 1);
+ e.player_id = sqlite3_column_int(stmt, 2);
+ e.type = (const char *)sqlite3_column_text(stmt, 3);
events.push_back(std::move(e));
} else if (ret == SQLITE_DONE) {
break;
auto it = lower_bound(events.begin(), events.end(), t,
[](const Event &e, uint64_t t) { return e.t < t; });
int pos = distance(events.begin(), it);
- beginInsertRows(QModelIndex(), pos, pos + 1);
+ beginInsertRows(QModelIndex(), pos, pos);
Event e;
e.t = t;
endInsertRows();
- // FIXME sqlite
+ // Insert the new row into the database.
+ sqlite3_stmt *stmt;
+ int ret = sqlite3_prepare_v2(db, "INSERT INTO event (t, player, type) VALUES (?, ?, ?)", -1, &stmt, 0);
+ if (ret != SQLITE_OK) {
+ fprintf(stderr, "INSERT prepare: %s\n", sqlite3_errmsg(db));
+ abort();
+ }
+
+ sqlite3_bind_int64(stmt, 1, t);
+ sqlite3_bind_int64(stmt, 2, player_id);
+ sqlite3_bind_text(stmt, 3, e.type.data(), e.type.size(), SQLITE_STATIC);
+
+ ret = sqlite3_step(stmt);
+ if (ret == SQLITE_ROW) {
+ fprintf(stderr, "INSERT step: %s\n", sqlite3_errmsg(db));
+ abort();
+ }
+
+ ret = sqlite3_finalize(stmt);
+ if (ret != SQLITE_OK) {
+ fprintf(stderr, "INSERT finalize: %s\n", sqlite3_errmsg(db));
+ abort();
+ }
+ events[pos].event_id = sqlite3_last_insert_rowid(db);
return pos;
}
events[pos].type = type;
emit dataChanged(createIndex(pos, 0), createIndex(pos, 2));
- // FIXME sqlite
+ sqlite3_stmt *stmt;
+ int ret = sqlite3_prepare_v2(db, "UPDATE event SET type=? WHERE event=?", -1, &stmt, 0);
+ if (ret != SQLITE_OK) {
+ fprintf(stderr, "INSERT prepare: %s\n", sqlite3_errmsg(db));
+ abort();
+ }
+
+ sqlite3_bind_text(stmt, 1, type.data(), type.size(), SQLITE_STATIC);
+ sqlite3_bind_int64(stmt, 2, events[pos].event_id);
+
+ ret = sqlite3_step(stmt);
+ if (ret == SQLITE_ROW) {
+ fprintf(stderr, "UPDATE step: %s\n", sqlite3_errmsg(db));
+ abort();
+ }
+
+ ret = sqlite3_finalize(stmt);
+ if (ret != SQLITE_OK) {
+ fprintf(stderr, "UPDATE finalize: %s\n", sqlite3_errmsg(db));
+ abort();
+ }
}