]> git.sesse.net Git - pkanalytics/blobdiff - formations.cpp
Make it possible to insert new formations from the UI.
[pkanalytics] / formations.cpp
index fa2337badaa538daf0977cb3bba95f814ea251d9..55e6de8c95f7d0429c8ff79bd19e6c109c1bb914 100644 (file)
@@ -46,6 +46,41 @@ QVariant FormationsModel::data(const QModelIndex &index, int role) const
        return QVariant();
 }
 
+unsigned FormationsModel::insert_new(const std::string &name)
+{
+       // Insert the new row into the database.
+       sqlite3_stmt *stmt;
+       int ret = sqlite3_prepare_v2(db, "INSERT INTO formation (name, offense) VALUES (?, ?)", -1, &stmt, 0);
+       if (ret != SQLITE_OK) {
+               fprintf(stderr, "INSERT prepare: %s\n", sqlite3_errmsg(db));
+               abort();
+       }
+
+       sqlite3_bind_text(stmt, 1, name.data(), name.size(), SQLITE_STATIC);
+       sqlite3_bind_int(stmt, 2, offense);
+
+       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();
+       }
+
+       beginResetModel();  // Simplest for our use, though not ideal.
+
+       int formation_id = sqlite3_last_insert_rowid(db);
+       formations.push_back(Formation{ formation_id, name });
+
+       endResetModel();
+
+       return formation_id;
+}
+
 void FormationsModel::load_data()
 {
        formations.clear();