コード例 #1
0
        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();
        }
コード例 #2
0
        /// <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.
            }
        }