Ejemplo n.º 1
0
        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;
            }
        }
Ejemplo n.º 2
-1
        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();
        }