From 1034595599a91ea0f088717fe9861a2f27549ab6 Mon Sep 17 00:00:00 2001 From: Schwirg László Date: Tue, 13 Aug 2024 10:34:30 +0200 Subject: [PATCH] v1.25.1.0 - LastUpdate trigger létrehozásában formai változtatások, pontosítások --- Vrh.Log4Pro.MaintenanceConsole/Manager - SQLDataBaseManager.cs | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------- Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs | 4 ++-- 2 files changed, 55 insertions(+), 36 deletions(-) diff --git a/Vrh.Log4Pro.MaintenanceConsole/Manager - SQLDataBaseManager.cs b/Vrh.Log4Pro.MaintenanceConsole/Manager - SQLDataBaseManager.cs index 69ac017..d13fccc 100644 --- a/Vrh.Log4Pro.MaintenanceConsole/Manager - SQLDataBaseManager.cs +++ b/Vrh.Log4Pro.MaintenanceConsole/Manager - SQLDataBaseManager.cs @@ -53,8 +53,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS .AddMenuItem(new Menu.Item(CLP.Module.SQLDataBaseManager.Function.ExecuteScript.KEY, "Execute script", ExecuteScript, ep)) .AddMenuItem(new Menu.Item(CLP.Module.SQLDataBaseManager.Function.CreateLoginAndUser.KEY, "Create Server login and database user", CreteLoginAndAddToDB, ep)) .AddMenuItem(new Menu.Item(CLP.Module.SQLDataBaseManager.Function.AddUserForLogin.KEY, "Add database user to an existing Login", AddExistingLoginToDB, ep)) - .AddMenuItem(new Menu.Item(CLP.Module.SQLDataBaseManager.Function.CreateLastUpdatedTrigger.KEY, "Add LastUpdated trigger to a datatable column", CreateLastUpdatedTrigger, ep)) - .AddMenuItem(new Menu.Item(CLP.Module.SQLDataBaseManager.Function.RemoveLastUpdatedTrigger.KEY, "Add LastUpdated trigger to a datatable column", RemoveLastUpdatedTrigger, ep)) + .AddMenuItem(new Menu.Item(CLP.Module.SQLDataBaseManager.Function.CreateLastUpdatedTrigger.KEY, "Add/remove LastUpdated trigger to a datatable column", ManageLastUpdatedTrigger, ep)) .SetSelectionMode(Menu.SelectionMode.Single) .SetMenuHeaderDisplayer(DataBaseListDisplayer); menufunctions.ExecuteMenu(functionkey); @@ -228,8 +227,7 @@ namespace Vrh.Log4Pro.MaintenanceConsole.SQLDataBaseManagerNS private static object CreteLoginAndAddToDB(object parameter, object o) { return _CreteLoginAndUser(parameter, o, true); } private static object AddExistingLoginToDB(object parameter, object o) { return _CreteLoginAndUser(parameter, o, false); } - private static object CreateLastUpdatedTrigger(object parameter, object o) { return _RemoveAndCreateLastUpdatedTrigger(parameter, o, false); } - private static object RemoveLastUpdatedTrigger(object parameter, object o) { return _RemoveAndCreateLastUpdatedTrigger(parameter, o, true); } + private static object ManageLastUpdatedTrigger(object parameter, object o) { return _ManageLastUpdatedTrigger(parameter, o, null); } #region script texts for _RemoveAndCreateLastUpdatedTrigger const string Header_Script = @"USE [{DBNAME}] @@ -276,37 +274,52 @@ DROP TRIGGER [{SCHEMA}].[{TRIGGER}]; GO "; #endregion script texts for _RemoveAndCreateLastUpdatedTrigger - private static object _RemoveAndCreateLastUpdatedTrigger(object parameter, object o,bool removeonly) + /// + /// Create or remove trigger + /// + /// + /// + /// null=action will be interactively selected; true=action is remove; false=action is recreate + /// + private static object _ManageLastUpdatedTrigger(object parameter, object o,bool? forceremoveonly) { + var config = (parameter as Menu.ExecutorParameter).GetConfig(); + var args = (parameter as Menu.ExecutorParameter).Args; + var selectedtaskindexes = CommandLine.GetCommandLineArgument(args, CLP.Module.ScheduledTaskManager.Function.CMD_TASKS); + var menufolders = DisplaySQLDataBaseMenu(config, $"Select the SQL database(s) to manage with function '{nameof(ManageLastUpdatedTrigger)}'!", silent: true); + Menu.Selection sr = menufolders.Select(selectedtaskindexes); + if (sr.Result == Menu.SelectionResult.Exit) { return o; } + else if (sr.Result == Menu.SelectionResult.None) { return o; } + else if (sr.Result == Menu.SelectionResult.Error) { return o; } + else if (sr.Result == Menu.SelectionResult.Ok) { } + else { } + var p = sr.SelectedParameterList.FirstOrDefault(); + if (p == null) { return o; } + SQLDataBase sqld = p.Parameters as SQLDataBase; + + var manageaction = !forceremoveonly.HasValue; + string actiontext = manageaction ? "MANAGING": (forceremoveonly.Value ? "REMOVING" : "CREATING"); + getparameters:; try { - var config = (parameter as Menu.ExecutorParameter).GetConfig(); - var args = (parameter as Menu.ExecutorParameter).Args; - var selectedtaskindexes = CommandLine.GetCommandLineArgument(args, CLP.Module.ScheduledTaskManager.Function.CMD_TASKS); - var menufolders = DisplaySQLDataBaseMenu(config, $"Select the SQL database(s) to manage with function '{nameof(CreateLastUpdatedTrigger)}'!", silent: true); - Menu.Selection sr = menufolders.Select(selectedtaskindexes); - if (sr.Result == Menu.SelectionResult.Exit) { return o; } - else if (sr.Result == Menu.SelectionResult.None) { return o; } - else if (sr.Result == Menu.SelectionResult.Error) { return o; } - else if (sr.Result == Menu.SelectionResult.Ok) { } - else { } - var p = sr.SelectedParameterList.FirstOrDefault(); - if (p == null) { return o; } - SQLDataBase sqld = p.Parameters as SQLDataBase; + ColorConsole.WriteLine(prefix: $" Enter the parameters for {actiontext} LastUpdated trigger.", bracket: "", text: "", f: ConsoleColor.Yellow); + string formattext = (manageaction?"[-]":"")+ "[DBNAME,][SCHEMA.]TABLE[,COLUMN]"; + ColorConsole.WriteLine(prefix: $" Format:", bracket: "", text: formattext, f: ConsoleColor.Yellow); - getparameters:; - string action = removeonly ? "REMOVING" : "CREATING"; - ColorConsole.WriteLine(prefix: $"Enter the parameters for {action} LastUpdated trigger.", bracket: "", text: "", f: ConsoleColor.Yellow); - ColorConsole.WriteLine(prefix: $" Format#1:", bracket: "()", text: "DBNAME,TABLEWITHSCHEMA,COLUMN", f: ConsoleColor.Yellow); - ColorConsole.WriteLine(prefix: $" Format#2:", bracket: "()", text: "TABLEWITHSCHEMA,COLUMN", f: ConsoleColor.Yellow); - ColorConsole.WriteLine(prefix: $" Format#3:", bracket: "()", text: "TABLEWITHSCHEMA", f: ConsoleColor.Yellow); ColorConsole.WriteLine(prefix: " ", text: "DBNAME", bracket: "", suffix: $": name of the database of the trigger; default is {sqld.DBName} (example:LearALM2)"); - ColorConsole.WriteLine(prefix: " ", text: "[SCHEMA.]TABLE", bracket: "", suffix: $": name of the table (with schema) of the trigger; default dbo (example:ALM.ProductionPeriods)"); + ColorConsole.WriteLine(prefix: " ", text: "TABLE", bracket: "", suffix: $": MANDATORY name of the table of the trigger (example:ProductionPeriods)"); + ColorConsole.WriteLine(prefix: " ", text: "SCHEMA", bracket: "", suffix: $": name of the schema of the table and of the trigger; default dbo (example:ALM)"); ColorConsole.WriteLine(prefix: " ", text: "COLUMN", bracket: "", suffix: $": name of the column (will be created) of the trigger; default is LastUpdated (example:LastUpdated)"); + ColorConsole.WriteLine(prefix: " ", text: "- sign", bracket: "", suffix: $": add minus sign(-) as the first character, to remove the trigger+datafield (example:-LearALM2,ALM.ProductionPeriods,LastUpdated):"); - var createtriggerparameters = ColorConsole.ReadLine($"EX=exit.", ConsoleColor.Yellow, suffix: " --> "); + var createtriggerparameters = ColorConsole.ReadLine($"", ConsoleColor.Yellow, suffix: ""); if (createtriggerparameters.ToUpper() == "EX") { return o; } if (string.IsNullOrWhiteSpace(createtriggerparameters)) { goto getparameters; } + + bool removeactionselected = createtriggerparameters.Substring(1) == "-"; + bool effectiveremoveaction = manageaction && removeactionselected || !manageaction && forceremoveonly.Value; + string effectiveactiontext = effectiveremoveaction ? "REMOVE" : "CREATE"; + createtriggerparameters = createtriggerparameters.Substring(0,1) == "-" ?createtriggerparameters.Substring(1): createtriggerparameters; var optionList = createtriggerparameters.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); string db = ""; @@ -326,13 +339,19 @@ GO if (tablewithschemasplitted.Length != 1 && tablewithschemasplitted.Length != 2) { ColorConsole.WriteLine("ERROR! TABLEWITHSCHEMA incorrect!", ConsoleColor.Red); goto getparameters; } if (string.IsNullOrWhiteSpace(column)) { ColorConsole.WriteLine("ERROR! COLUMN can not be empty!", ConsoleColor.Red); goto getparameters; } - string schema = ""; + string schema = "dbo"; string table = tablewithschema; if (tablewithschemasplitted.Length == 2) { schema = tablewithschemasplitted[0]; table = tablewithschemasplitted[1]; } string triggername = $"TRG_LASTUPDATETS_{db}_{schema}_{table}_{column}"; string parameters = $"DBNAME={db};SCHEMA={schema};TABLE={table};COLUMN={column};TRIGGER={triggername};"; string ssScriptText = null; + string triggerfulldesignation = $"db={db},table={schema}.{table},column={column},trigger={triggername}"; + ColorConsole.WriteLine(prefix: $"Action to execute:{effectiveactiontext}.", text: $" {triggerfulldesignation}.", bracket: "", suffix: $""); + var confirm = ColorConsole.ReadLine($"Enter CONFIRM to confirm, NO to continue.", ConsoleColor.Yellow, suffix: ""); + if (createtriggerparameters.ToUpper() == "EX") { return o; } + if (confirm.ToUpper() != "CONFIRM") { goto getparameters; } + if (!Tools.ResolveArguments(parameters, RemoveLastUpdatedTrigger_Script, out ssScriptText)) { throw new ApplicationException(); } try {SQLDataBaseManagerCore.ExecuteSQLScript(sqld.SQLCS, ssScriptText, 5000, null); } catch (Exception e) {ColorConsole.WriteLine(e.Message, ConsoleColor.Yellow);} @@ -340,7 +359,7 @@ GO try {SQLDataBaseManagerCore.ExecuteSQLScript(sqld.SQLCS, ssScriptText, 5000, null);} catch (Exception e) { ColorConsole.WriteLine(e.Message, ConsoleColor.Yellow); } - if (!removeonly) + if (!effectiveremoveaction) { if (!Tools.ResolveArguments(parameters, CreateLastUpdatedColumn_Script, out ssScriptText)) { throw new ApplicationException(); } SQLDataBaseManagerCore.ExecuteSQLScript(sqld.SQLCS, ssScriptText, 5000, null); @@ -351,18 +370,18 @@ GO if (!Tools.ResolveArguments(parameters, EnableLastUpdatedTrigger_Script, out ssScriptText)) { throw new ApplicationException(); } SQLDataBaseManagerCore.ExecuteSQLScript(sqld.SQLCS, ssScriptText, 5000, null); } - ColorConsole.WriteLine($"SUCCESS! {action} trigger to store LastUpdate TimeStamp: Database={db},Table={schema}.{table},Column={column}", ConsoleColor.Green); - return o; + ColorConsole.WriteLine($"SUCCESS! {effectiveactiontext} trigger to store LastUpdate TimeStamp: {triggerfulldesignation}", ConsoleColor.Green); + goto getparameters; } catch (ApplicationException e) { - ColorConsole.WriteLine("FATAL ERROR! in script parameter substitution!", ConsoleColor.Red); - return o; + ColorConsole.WriteLine("FATAL ERROR! in script parameter substitution!", ConsoleColor.Red); + goto getparameters; } catch (Exception e) { - ColorConsole.WriteLine("FATAL ERROR! "+e.Message, ConsoleColor.Red); - return o; + ColorConsole.WriteLine("FATAL ERROR! "+e.Message, ConsoleColor.Red); + goto getparameters; } } private static object _CreteLoginAndUser(object parameter, object o,bool createlogin) diff --git a/Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs b/Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs index b78e5f7..e39fc90 100644 --- a/Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs +++ b/Vrh.Log4Pro.MaintenanceConsole/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.25.0.0")] -[assembly: AssemblyFileVersion("1.25.0.0")] +[assembly: AssemblyVersion("1.25.1.0")] +[assembly: AssemblyFileVersion("1.25.1.0")] -- libgit2 0.21.2