internal static TupleListBuilder Create(string prolog) { var r = new TupleListBuilder(); r.sql = new StringBuilder(prolog.Length * 2); r.sql.Append(prolog); return(r); }
public async Task SavePlayerInfo(PlayerInfo player_info) { try { using (var conn = get_conn()) { var transaction = await conn.BeginTransactionAsync(); try { using (var cmd = new MySqlCommand { CommandText = DeleteFriendsOfPlayer, Connection = conn }) { cmd.Parameters.AddWithValue("@permanent_id", player_info.permanent_id); await cmd.ExecuteNonQueryAsync(); } using (var cmd = new MySqlCommand { CommandText = DeleteIgnoredOfPlayer, Connection = conn }) { cmd.Parameters.AddWithValue("@permanent_id", player_info.permanent_id); await cmd.ExecuteNonQueryAsync(); } using (var cmd = new MySqlCommand { CommandText = DeleteFriendRequestsOfPlayer, Connection = conn }) { cmd.Parameters.AddWithValue("@permanent_id", player_info.permanent_id); await cmd.ExecuteNonQueryAsync(); } using (var cmd = new MySqlCommand { Connection = conn }) { var builder = TupleListBuilder.Create(InsertFriendsOfPlayerProlog); for (var i = 0; i < player_info.friends.Count; ++i) { var friend = player_info.friends[i]; builder.StartTuple(); builder.Value(player_info.permanent_id); builder.Join(); var friend_permanent_id = friend.PermanentId; builder.Value(friend_permanent_id); builder.EndTuple(); if (i != player_info.friends.Count - 1) { builder.Join(); } } cmd.CommandText = builder.ToString(); await cmd.ExecuteNonQueryAsync(); } using (var cmd = new MySqlCommand { Connection = conn }) { var builder = TupleListBuilder.Create(InsertIgnoredOfPlayerProlog); for (var i = 0; i < player_info.ignored.Count; ++i) { var ignored = player_info.ignored[i]; builder.StartTuple(); builder.Value(player_info.permanent_id); builder.Join(); var ignored_permanent_id = ignored.PermanentId; builder.Value(ignored_permanent_id); builder.EndTuple(); if (i != player_info.friends.Count - 1) { builder.Join(); } } cmd.CommandText = builder.ToString(); await cmd.ExecuteNonQueryAsync(); } using (var cmd = new MySqlCommand { Connection = conn }) { var builder = TupleListBuilder.Create(InsertFriendRequestsOfPlayerProlog); for (var i = 0; i < player_info.pending_friend_requests_outgoing.Count; ++i) { var friend_requested = player_info.pending_friend_requests_outgoing[i]; builder.StartTuple(); builder.Value(player_info.permanent_id); builder.Join(); var friend_requested_permanent_id = friend_requested.PermanentId; builder.Value(friend_requested_permanent_id); builder.EndTuple(); if (i != player_info.friends.Count - 1) { builder.Join(); } } cmd.CommandText = builder.ToString(); await cmd.ExecuteNonQueryAsync(); } transaction.Commit(); } catch (Exception) { transaction.Rollback(); throw; } } } catch (Exception e) { Log.Exception(e); } }