extern int RelationalUpdatePlayerDetails(const char* oldName, const char* newName, const char* newNotes) { int ret = FALSE; int exist_id, player_id; DBProvider *pdb; if ((pdb = ConnectToDB(dbProviderType)) == NULL) return FALSE; player_id = GetPlayerId(pdb, oldName); exist_id = GetPlayerId(pdb, newName); if (exist_id != player_id && exist_id != -1) { /* Can't change the name to an existing one */ outputerrf( _("New player name already exists.") ); } else { char *buf = g_strdup_printf("UPDATE player SET name = '%s', notes = '%s' WHERE player_id = %d", newName, newNotes, player_id); if (pdb->UpdateCommand(buf)) { ret = 1; pdb->Commit(); } else outputerrf( _("Error running database command") ); g_free(buf); } pdb->Disconnect(); return ret; }
extern void CommandRelationalErase(char *sz) { char *mq, *gq, buf[1024]; DBProvider *pdb; char *player_name; int player_id; if (!sz || !*sz || ((player_name = NextToken(&sz)) == NULL)) { outputl( _("You must specify a player name to remove " "(see `help relational erase player').") ); return; } if ((pdb = ConnectToDB(dbProviderType)) == NULL) return; player_id = GetPlayerId(pdb, player_name); if (player_id == -1) { outputl (_("Player not found or player stats empty")); return; } /* Get all matches involving player */ mq = g_strdup_printf ("FROM session WHERE player_id0 = %d OR player_id1 = %d", player_id, player_id); /* first remove any gamestats and games */ gq = g_strdup_printf ("FROM game WHERE session_id in (select session_id %s)", mq); sprintf(buf, "DELETE FROM gamestat WHERE game_id in (select game_id %s)", gq); pdb->UpdateCommand(buf); sprintf(buf, "DELETE %s", gq); pdb->UpdateCommand(buf); /* Now remove any matchstats */ sprintf(buf, "DELETE FROM matchstat WHERE session_id in (select session_id %s)", mq); pdb->UpdateCommand(buf); /* then remove any matches */ sprintf(buf, "DELETE %s", mq); pdb->UpdateCommand(buf); /* then the player */ sprintf(buf, "DELETE FROM player WHERE player_id = %d", player_id); pdb->UpdateCommand(buf); g_free(mq); g_free(gq); pdb->Commit(); pdb->Disconnect(); }
extern void CommandRelationalEraseAll(char *UNUSED(sz)) { DBProvider *pdb; if( fConfirmSave && !GetInputYN( _("Are you sure you want to erase all " "player records?") ) ) return; if ((pdb = ConnectToDB(dbProviderType)) == NULL) return; /* first remove all matchstats */ pdb->UpdateCommand("DELETE FROM matchstat"); /* then remove all matches */ pdb->UpdateCommand("DELETE FROM session"); /* finally remove the players */ pdb->UpdateCommand("DELETE FROM player"); pdb->Commit(); pdb->Disconnect(); }
extern void CommandRelationalAddMatch(char *sz) { DBProvider *pdb; char *buf, *buf2, *date; char warnings[1024] = ""; int session_id, existing_id, player_id0, player_id1; char *arg = NULL; gboolean quiet = FALSE; arg = NextToken(&sz); if (arg) quiet = !strcmp(arg, "quiet"); if (ListEmpty(&lMatch)) { outputl( _("No match is being played.") ); return; } /* Warn if match is not finished or fully analyzed */ if (!quiet && !GameOver()) strcat(warnings, _("The match is not finished\n")); if (!quiet && !MatchAnalysed()) strcat(warnings, _("All of the match is not analyzed\n")); if (*warnings) { strcat(warnings, _("\nAdd match anyway?")); if (!GetInputYN(warnings)) return; } if ((pdb = ConnectToDB(dbProviderType)) == NULL) return; existing_id = RelationalMatchExists(pdb); if (existing_id != -1) { if (!quiet && !GetInputYN(_("Match exists, overwrite?"))) return; /* Remove any game stats and games */ buf2 = g_strdup_printf("FROM game WHERE session_id = %d", existing_id); buf = g_strdup_printf("DELETE FROM gamestat WHERE game_id in (SELECT game_id %s)", buf2); pdb->UpdateCommand(buf); g_free(buf); buf = g_strdup_printf("DELETE %s", buf2); pdb->UpdateCommand(buf); g_free(buf); g_free(buf2); /* Remove any match stats and session */ buf = g_strdup_printf("DELETE FROM matchstat WHERE session_id = %d", existing_id); pdb->UpdateCommand(buf); g_free(buf); buf = g_strdup_printf("DELETE FROM session WHERE session_id = %d", existing_id); pdb->UpdateCommand(buf); g_free(buf); } session_id = GetNextId(pdb, "session"); player_id0 = AddPlayer(pdb, ap[0].szName); player_id1 = AddPlayer(pdb, ap[1].szName); if (session_id == -1 || player_id0 == -1 || player_id1 == -1) { outputl( _("Error adding match.") ); return; } if( mi.nYear ) date = g_strdup_printf("%04d-%02d-%02d", mi.nYear, mi.nMonth, mi.nDay); else date = NULL; buf = g_strdup_printf("INSERT INTO session(session_id, checksum, player_id0, player_id1, " "result, length, added, rating0, rating1, event, round, place, annotator, comment, date) " "VALUES (%d, '%s', %d, %d, %d, %d, CURRENT_TIMESTAMP, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')", session_id, GetMatchCheckSum(), player_id0, player_id1, MatchResult(ms.nMatchTo), ms.nMatchTo, NS(mi.pchRating[0]), NS(mi.pchRating[1]), NS(mi.pchEvent), NS(mi.pchRound), NS(mi.pchPlace), NS(mi.pchAnnotator), NS(mi.pchComment), NS(date)); updateStatisticsMatch ( &lMatch ); if (pdb->UpdateCommand(buf)) { if (AddStats(pdb, session_id, player_id0, 0, "matchstat", ms.nMatchTo, &scMatch) && AddStats(pdb, session_id, player_id1, 1, "matchstat", ms.nMatchTo, &scMatch)) { if (storeGameStats) AddGames(pdb, session_id, player_id0, player_id1); pdb->Commit(); } } g_free(buf); g_free(date); pdb->Disconnect(); }