Properly erase db without fucking things up

This commit is contained in:
2020-05-02 20:10:25 +00:00
parent 64f4314015
commit a432177405

View File

@@ -289,28 +289,33 @@ namespace AyaNova.Util
await cmd.ExecuteNonQueryAsync();
}
//Delete non stock translations
using (var cmd = new Npgsql.NpgsqlCommand())
{
cmd.Connection = conn;
//set to default translation so can delete all non default ones
cmd.CommandText = "update auseroptions set translationid=1;";
await cmd.ExecuteNonQueryAsync();
//REMOVE ALL DATA with few exceptions of manager user, license, schema tables
//and job logs because this is called by job code
await EraseTableAsync("atranslationitem", conn);
await EraseTableAsync("atranslation", conn);
//Load the default TRANSLATIONS
await AyaNova.Biz.PrimeData.PrimeTranslations();
cmd.CommandText = "delete from atranslationitem where translationid > 4;";
await cmd.ExecuteNonQueryAsync();
cmd.CommandText = "delete from atranslation where id > 4;";
await cmd.ExecuteNonQueryAsync();
}
//REMOVE ALL REMAINING DATA
await EraseTableAsync("afileattachment", conn);
await EraseTableAsync("awidget", conn);
await EraseTableAsync("aevent", conn);
await EraseTableAsync("adatalistview", conn);
await EraseTableAsync("apicklisttemplate", conn);
await EraseTableAsync("apicklisttemplate", conn, true);
await EraseTableAsync("aformcustom", conn);
await EraseTableAsync("asearchkey", conn);
await EraseTableAsync("asearchdictionary", conn);
await EraseTableAsync("atag", conn);
//CUSTOMER
await EraseTableAsync("atag", conn);
await EraseTableAsync("acustomer", conn);
await EraseTableAsync("acontract", conn);
await EraseTableAsync("aheadoffice", conn);
await EraseTableAsync("aloanunit", conn);
@@ -332,8 +337,6 @@ namespace AyaNova.Util
await EraseTableAsync("aworkorderitem", conn);
await EraseTableAsync("aworkordertemplate", conn);
await EraseTableAsync("aworkordertemplateitem", conn);
await conn.CloseAsync();
}
@@ -348,13 +351,23 @@ namespace AyaNova.Util
///////////////////////////////////////////
// Erase all data from the table specified
//
private static async Task EraseTableAsync(string sTable, Npgsql.NpgsqlConnection conn)
private static async Task EraseTableAsync(string sTable, Npgsql.NpgsqlConnection conn, bool tableHasNoSequence = false)
{
using (var cmd = new Npgsql.NpgsqlCommand())
{
cmd.Connection = conn;
cmd.CommandText = "TRUNCATE \"" + sTable + "\" RESTART IDENTITY;";
//Boo! Can't do this becuase it will fail if there is a foreign key which nearly all tables have unless cascade option is used
//but then cascade causes things to delete in any referenced table
// cmd.CommandText = "TRUNCATE \"" + sTable + "\" RESTART IDENTITY;";
cmd.CommandText = $"delete from {sTable};";
await cmd.ExecuteNonQueryAsync();
if (!tableHasNoSequence)
{
cmd.CommandText = $"ALTER SEQUENCE {sTable}_id_seq RESTART WITH 1;";
await cmd.ExecuteNonQueryAsync();
}
}
}