Exemplo n.º 1
0
        private static IEnumerable <ToolOption> ParseAndYield(string[] args, ResponseSettings settings)
        {
            bool isDefault = true;

            List <string> newArgs = new List <string>();

            foreach (string argument in args)
            {
                if (ResponseFile.HasPathSyntax(argument, out _))
                {
                    newArgs.AddRange(ResponseFile.ExpandStrings(argument, settings).SelectMany(ToArgumentList));
                }
                else
                {
                    newArgs.Add(argument);
                }
            }

            for (int i = 0; i < newArgs.Count; i++)
            {
                if (IsOption(newArgs[i]))
                {
                    ToolOption option = CreateOption(newArgs[i]);

                    if (option != null)
                    {
                        option.Values = newArgs.Skip(i + 1).TakeWhile(s => !IsOption(s)).ToArray();

                        i += option.Values.Length;

                        option.Values = option.Values.Where(s => !string.IsNullOrWhiteSpace(s)).ToArray();
                    }

                    isDefault = false;

                    yield return(option);
                }
                else if (isDefault)
                {
                    ToolOption option = new ToolOption()
                    {
                        Name      = "",
                        ShortName = "",
                        Values    = newArgs.Skip(i).TakeWhile(s => !IsOption(s)).ToArray()
                    };

                    i += option.Values.Length - 1;

                    option.Values = option.Values.Where(s => !string.IsNullOrWhiteSpace(s)).ToArray();

                    isDefault = false;

                    yield return(option);
                }
            }
        }
Exemplo n.º 2
0
        private static ToolOptions ParseArguments(string[] args)
        {
            ResponseSettings settings = new ResponseSettings()
            {
                WorkingDirectory   = Environment.CurrentDirectory,
                IgnoreComments     = true,
                IgnoreMissingFiles = false,
                IgnoreWhitespace   = true,
                DefaultExtension   = ".cli",
            };

            return(ToolOptions.Parse(ApplyDefaultArguments(args), settings));
        }
Exemplo n.º 3
0
 public Response(ResponseSettings settings, HttpStatus status = HttpStatus.Ok, HttpVersion protocolVersion = HttpVersion.HTTP11)
 {
     Headers         = settings.StaticResponseHeaders?.Clone() ?? new Dictionary <string, string>();
     Status          = status;
     ProtocolVersion = protocolVersion;
 }
        public async static Task SqlAsync(RunnerArgs args, IConnectionFactory factory)
        {
            if (factory == null)
            {
                throw new RunnerException("Invalid factory object.");
            }

            if (string.IsNullOrWhiteSpace(args.Connection))
            {
                throw new RunnerException("Please specify a connection string using the -c|--connection argument.");
            }

            int numberOfInputs = 0;

            using (DbConnection connection = await GetOpenConnectionAsync(args, factory))
            {
                foreach (ToolOption option in args.Options)
                {
                    if (IsSqlInput(option))
                    {
                        string sqlText = string.Join("\r\n", option.Values);

                        await ExecuteSqlAsync(connection, sqlText);

                        numberOfInputs++;
                    }
                    else if (IsFileInput(option))
                    {
                        ResponseSettings settings = new ResponseSettings()
                        {
                            IgnoreWhitespace = false,
                        };
                        string[] expanded = ResponseFile.ExpandFiles(option.Values, settings).ToArray();
                        string   sqlText  = string.Join("\r\n", expanded);

                        await ExecuteSqlAsync(connection, sqlText);

                        numberOfInputs++;
                    }
                    else if (IsRawInput(option))
                    {
                        string sqlText = string.Join("", option.Values.Select(File.ReadAllText));

                        await ExecuteSqlAsync(connection, sqlText);

                        numberOfInputs++;
                    }
                }
            }

            if (numberOfInputs == 0)
            {
                throw new RunnerException("Please specify at least one SQL input with the --sql, --file or --raw arguments.");
            }

            async Task ExecuteSqlAsync(DbConnection connection, string sqlText)
            {
                using (DbCommand command = connection.CreateCommand())
                {
                    command.CommandText = sqlText;

                    if (!string.IsNullOrWhiteSpace(command.CommandText))
                    {
                        if (args.Verbose)
                        {
                            DotNetJerryHost.WriteLine($"Executing...", ConsoleColor.Yellow);
                            DotNetJerryHost.WriteLine(sqlText, ConsoleColor.Blue);
                        }
                        else
                        {
                            DotNetJerryHost.WriteLine($"Executing '{GetSqlPreviewText(sqlText)}'...", ConsoleColor.Yellow);
                        }

                        int affectedRows = await command.ExecuteNonQueryAsync();

                        string rowsMoniker = affectedRows + " " + (affectedRows == 1 ? "row" : "rows");

                        DotNetJerryHost.WriteLine($"OK. {rowsMoniker} affected.", ConsoleColor.Green);
                    }
                    else
                    {
                        DotNetJerryHost.WriteLine($"Skipped. SQL text is empty.", ConsoleColor.Yellow);
                    }
                }
            }

            string GetSqlPreviewText(string sqlText)
            {
                StringBuilder builder = new StringBuilder();

                for (int i = 0; i < sqlText.Length && builder.Length <= 30; i++)
                {
                    if (!char.IsWhiteSpace(sqlText[i]))
                    {
                        builder.Append(sqlText[i]);
                    }
                    else if (builder.Length > 0 && !char.IsWhiteSpace(builder[builder.Length - 1]))
                    {
                        builder.Append(' ');
                    }
                }

                return(builder.ToString());
            }

            bool IsRawInput(ToolOption option) => (option.Name == "raw" || option.ShortName == "r");
            bool IsSqlInput(ToolOption option) => (option.Name == "sql" || option.ShortName == "s");
            bool IsFileInput(ToolOption option) => (option.Name == "file" || option.ShortName == "f");
        }
Exemplo n.º 5
0
 public static ToolOptions Parse(string[] args, ResponseSettings settings = null)
 {
     return(new ToolOptions(ParseAndYield(args, settings)));
 }