private void deleteExportBtn_Click(object sender, RoutedEventArgs e) { // Generate delete query var ek = new ExpKvp("EntryId", ItemId, Export.C.Item); string deleteQuery = $"DELETE FROM {ek.SqlTableName} WHERE {ek.SqlKey} = {ItemId};"; // Add it to query and DoExport Query = deleteQuery + Environment.NewLine + Query; DoExport(); }
/// <summary> /// Checks if an ID is already in use. Prompts to overwrite if needed. /// Deletes original row with given id if user agrees. /// </summary> /// <param name="type">creation type</param> /// <param name="id">creation id</param> /// <returns>True if user gave permission to insert</returns> public static bool CheckDuplicateHandleOverride(Export.C type, int id) { // Get primary keys to base update queries on var fieldsToCheck = GetRelevantTablesAndIds(type, id); if (fieldsToCheck == null) { return(true); // Irrelevant to this type or error } // Look for duplicates bool alreadyExists = false; try { // Query every relevant table to see if ID already exists foreach (var kvp in fieldsToCheck) { if (kvp.Key.Contains("%t")) { continue; // I'm not gonna even } var result = Connection.ExecuteScalar($"SELECT COUNT(*) AS matches FROM {kvp.Key} WHERE {kvp.Value} = {id};"); if ((dynamic)result > 0) { alreadyExists = true; break; } } } catch (Exception ex) { Logger.Log("Database Error: There was an error looking for duplicates. Creation will not export.", Logger.Status.Error, true); Logger.Log(ex.Message); return(false); // Failed, cancel insert } // Ask if user wants to overwrite if (alreadyExists) { var dr = MessageBox.Show($"WARNING: {type} with ID {id} already exists.{Environment.NewLine}Would you like to replace it?", "Already Exists", MessageBoxButton.YesNoCancel, MessageBoxImage.Warning, MessageBoxResult.No); if (dr == MessageBoxResult.Yes) { // Delete from database foreach (var kvp in fieldsToCheck) { // Handle quest customs if (type == Export.C.Quest) { // Handle %t tablenames if (kvp.Key.Contains("%t")) { string[] starterEnderTypes = new string[] { "creature", "gameobject", }; string overrideTableName = ""; foreach (string replacement in starterEnderTypes) { if (kvp.Key.Contains("queststarter")) { overrideTableName = kvp.Key.Replace("%t", replacement); Connection.ExecuteNonQuery($"DELETE FROM {overrideTableName} WHERE {kvp.Value} = {id};"); } else if (kvp.Key.Contains("questender")) { overrideTableName = kvp.Key.Replace("%t", replacement); Connection.ExecuteNonQuery($"DELETE FROM {overrideTableName} WHERE {kvp.Value} = {id};"); } else { Logger.Log("Profile Error: QuestGiver customs with wildcard only accept tablenames containing 'queststarter' and 'questender'." + Environment.NewLine + "This is because customs have no other way to identify that the custom is in relation to queststarter/ender." + Environment.NewLine + "If this causes issues, it's preferable to just use 'creature_questender' instead of '%t_questender' and starter.", Logger.Status.Error, true); } } } } else if (type == Export.C.Creature) { if (Profile.Active.IsKeyDefined(Export.C.Creature, "SpellCreatureID")) { var d = new ExpKvp("SpellCreatureID", null, Export.C.Creature); Connection.ExecuteNonQuery($"DELETE FROM {d.SqlTableName} WHERE {d.SqlKey} = {id};"); } if (Profile.Active.IsKeyDefined(Export.C.Creature, "ResistanceCreatureId")) { var d = new ExpKvp("ResistanceCreatureId", null, Export.C.Creature); Connection.ExecuteNonQuery($"DELETE FROM {d.SqlTableName} WHERE {d.SqlKey} = {id};"); } if (Profile.Active.IsKeyDefined(Export.C.Creature, "InhabitCreatureID")) { var d = new ExpKvp("InhabitCreatureID", null, Export.C.Creature); Connection.ExecuteNonQuery($"DELETE FROM {d.SqlTableName} WHERE {d.SqlKey} = {id};"); } } // No special, just delete. if (!kvp.Key.Contains("%t")) { Connection.ExecuteNonQuery($"DELETE FROM {kvp.Key} WHERE {kvp.Value} = {id};"); } } return(true); // Duplicate, deleted & permission to insert } else { return(false); // Duplicate found, user does not wish to override } } else { return(true); // Not duplicate, proceed as normal. } }