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