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); } } }
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)); }
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"); }
public static ToolOptions Parse(string[] args, ResponseSettings settings = null) { return(new ToolOptions(ParseAndYield(args, settings))); }