public static int Main(string[] args) { ExtendLogConfigurationWithTableTarget(); LogManager.ConfigurationReloaded += LogManager_ConfigurationReloaded; LogManager.ConfigurationChanged += LogManager_ConfigurationChanged; SetCulture(); var commandLineParser = new CommandLineParser.CommandLineParser(); var commandLineParameters = new CommandLineParameters(); commandLineParser.ExtractArgumentAttributes(commandLineParameters); commandLineParser.ShowUsageOnEmptyCommandline = true; var version = Assembly.GetExecutingAssembly().GetName().Version; commandLineParser.ShowUsageHeader = $"QueryMultiDb {version} usage :"; commandLineParser.ShowUsageFooter = "Because you're worth it."; try { commandLineParser.ParseCommandLine(args); if (!commandLineParser.ParsingSucceeded) { Logger.Fatal("Command line arguments analysis gracefully failed."); return(-1); } // This must be set very early to be usable at any time. Parameters.Instance = new Parameters(commandLineParameters); Logger.Info($"Initialized QueryMultiDb {version}"); if (Parameters.Instance.StartKeyPress) { Console.WriteLine("Press a key to start..."); Console.ReadKey(); } DoIt(); return(0); } catch (CommandLineException exp) { Logger.Fatal(exp, $"Command line arguments analysis catastrophically failed. {exp.Message} ({exp.GetType().FullName})"); commandLineParser.ShowUsage(); return(-2); } catch (Exception exp) { Logger.Fatal(exp, $"Fatal error. {exp.Message} ({exp.GetType().FullName})"); return(-3); } finally { if (Parameters.IsInitialized && Parameters.Instance.StopKeyPress) { Console.WriteLine("Press a key to stop..."); Console.ReadKey(); } LogManager.Flush(); LogManager.ConfigurationReloaded -= LogManager_ConfigurationReloaded; LogManager.ConfigurationChanged -= LogManager_ConfigurationChanged; } }
public Parameters(CommandLineParameters parsedResult) { if (parsedResult == null) { throw new ArgumentNullException(nameof(parsedResult), "Parameter cannot be null."); } if (parsedResult.Query == null && parsedResult.QueryFile == null) { throw new ArgumentException("No target specified."); } var queryParameters = 0; if (parsedResult.Query != null) { queryParameters++; } if (parsedResult.QueryFile != null) { queryParameters++; } if (queryParameters > 1) { throw new ArgumentException("Cannot use more than one of constant or targets file for specifying query."); } Query = parsedResult.Query; if (parsedResult.QueryFile != null) { Query = File.ReadAllText(parsedResult.QueryFile.FullName); } if (parsedResult.Targets == null && parsedResult.TargetsStandardInput == false && parsedResult.TargetsFile == null) { throw new ArgumentException("No target specified."); } var targetParameters = 0; if (parsedResult.Targets != null) { targetParameters++; } if (parsedResult.TargetsStandardInput) { targetParameters++; } if (parsedResult.TargetsFile != null) { targetParameters++; } if (targetParameters > 1) { throw new ArgumentException("Cannot use more than one of standard input or constant or targets file for specifying targets."); } var targets = parsedResult.Targets; if (parsedResult.TargetsStandardInput) { targets = Console.In.ReadToEnd(); } else if (parsedResult.TargetsFile != null) { targets = File.ReadAllText(parsedResult.TargetsFile.FullName); } Targets = ParseTargets(targets); OutputFile = parsedResult.OutputFile; OutputDirectory = parsedResult.OutputDirectory?.FullName ?? Directory.GetCurrentDirectory(); Overwrite = parsedResult.Overwrite; ConnectionTimeout = parsedResult.ConnectionTimeout; CommandTimeout = parsedResult.CommandTimeout; Sequential = parsedResult.Sequential; Parallelism = parsedResult.Parallelism; ShowIpAddress = parsedResult.ShowIpAddress; ShowServerName = parsedResult.ShowServerName; ShowDatabaseName = parsedResult.ShowDatabaseName; ShowExtraColumns = parsedResult.ShowExtraColumns; StartKeyPress = parsedResult.StartKeyPress; StopKeyPress = parsedResult.StopKeyPress; ShowNulls = parsedResult.ShowNulls; Progress = parsedResult.Progress; NullsColor = parsedResult.NullsColor; ShowLogSheet = parsedResult.ShowLogSheet; ShowParameterSheet = parsedResult.ShowParameterSheet; ShowInformationMessages = parsedResult.ShowInformationMessages; SheetLabels = ParseSheetLabels(parsedResult.SheetLabels); DiscardResults = parsedResult.DiscardResults; ThrowIfInvalidParameter(); }