/// <summary> /// Initializes a new instance of the <see cref="CommandExecuter" /> class. /// </summary> /// <param name="nodeNumber">The execution node number.</param> /// <param name="arguments">The arguments.</param> /// <param name="variableResolver">The variable resolver.</param> public CommandExecuter(int nodeNumber, ISqlExecuteArguments arguments, IVariableResolver variableResolver) { this.NodeNumber = nodeNumber; this.resultsAs = arguments.OutputAs; this.arguments = arguments; this.variableResolver = variableResolver; }
/// <summary> /// Creates a command executer. /// </summary> /// <param name="nodeNumber">The node number.</param> /// <param name="args">The command invocation arguments.</param> /// <param name="resolver">The resolver.</param> /// <returns> /// A new <see cref="ICommandExecuter" /> /// </returns> // ReSharper disable once StyleCop.SA1113 private static ICommandExecuter CreateCommandExecuter(int nodeNumber, ISqlExecuteArguments args, IVariableResolver resolver) { var exec = new CommandExecuter(nodeNumber, args, resolver) { ErrorAction = args.AbortOnErrorSet ? ErrorAction.Exit : ErrorAction.Ignore }; if (args.OutputMessage != null) { exec.Message += args.OutputMessage; } if (args.OutputResult != null) { exec.Result += args.OutputResult; } if (args.Connected != null) { exec.Connected += args.Connected; } return(exec); }
/// <summary> /// Creates a variable resolver. /// </summary> /// <param name="args">The command invocation arguments.</param> /// <returns>A new <see cref="IVariableResolver"/></returns> private static IVariableResolver CreateVariableResolver(ISqlExecuteArguments args) { var resolver = new VariableResolver( args.InitialVariables, args.OverrideScriptVariablesSet, args.DisableCommandsSet); resolver.SetSystemVariable("SQLCMDSTATTIMEOUT", args.QueryTimeout.ToString()); return(resolver); }
/// <summary> /// Initializes a new instance of the <see cref="SqlExecuteImpl"/> class. /// </summary> /// <param name="arguments">The args.</param> public SqlExecuteImpl(ISqlExecuteArguments arguments) { this.arguments = arguments; if (this.arguments.ParseOnly) { this.arguments.OutputMessage?.Invoke( this, new OutputMessageEventArgs(0, "DRY RUN mode - No SQL will be executed.", OutputDestination.StdOut)); } this.runList = new List <RunConfiguration>(); var inputFileCount = arguments.InputFile?.Length ?? 0; for (var i = 0; i < Math.Max(arguments.ConnectionString.Length, inputFileCount); ++i) { var r = CreateVariableResolver(arguments); this.runList.Add( new RunConfiguration { NodeNumber = i + 1, CommandExecuter = CreateCommandExecuter(i + 1, arguments, r), ConnectionString = arguments.ConnectionString.Length == 1 ? arguments.ConnectionString[0] : arguments.ConnectionString[i], InitialBatchSource = this.GetInitialBatchSource(Math.Min(i, inputFileCount - 1)), VariableResolver = r, OutputFile = string.IsNullOrEmpty(arguments.OutputFile) ? null : new OutputFileProperties( FileParameterCommand.GetNodeFilepath( arguments.RunParallel ? i + 1 : 0, arguments.OutputFile), i == 0 || arguments.RunParallel ? FileMode.Create : FileMode.Append) }); } }
/// <summary> /// Initializes a new instance of the <see cref="TestBatchExecuter"/> class. /// </summary> /// <param name="args">The arguments.</param> /// <param name="variableResolver">The variable resolver.</param> public TestBatchExecuter(ISqlExecuteArguments args, VariableResolver variableResolver) : base(0, args, variableResolver) { }