/// <summary> /// Runs... /// </summary> /// <param name="thisBatchFile">this batch file.</param> /// <param name="inThisContext">The in this context.</param> /// <param name="withSupplementaryTokenReplacements">with supplementary token replacements.</param> public void Run( ISQLBatchScript thisBatchScript, IConnectionDetail inThisContext, Func <string, string> withSupplementaryTokenReplacements) { It.IsNull(thisBatchScript) .AsGuard <ArgumentNullException>(nameof(thisBatchScript)); It.IsNull(inThisContext) .AsGuard <ArgumentNullException>(nameof(inThisContext)); if (It.IsInRange(thisBatchScript.Type, TypeOfBatchScript.Ignored)) { return; } Emitter.Publish(Indentation.FirstLevel, $"Running: '{thisBatchScript.Description}'"); if (It.IsInRange(thisBatchScript.Type, TypeOfBatchScript.Statement)) { var content = Pseudonyms.ReplaceTokensIn(thisBatchScript.Command, withSupplementaryTokenReplacements); UsingConnection(inThisContext, x => RunCommand(content, x)); return; } var batches = GetSQLOperations(thisBatchScript.Command, withSupplementaryTokenReplacements); Emitter.Publish(Indentation.FirstLevel, $"Batch contains {batches.Count} statement{(batches.Count > 1 ? "s" : string.Empty)}."); Run(batches.AsSafeReadOnlyList(), inThisContext); }
/// <summary> /// Runs... /// </summary> /// <param name="script">The script.</param> /// <param name="inContext">in context.</param> /// <param name="forCandidate">for candidate.</param> public void RunScript(ISQLBatchScript script, IConnectionDetail inContext, int forProvider, ref string forCandidate) { var result = Task.Run(async() => { It.IsOutOfRange(script.Type, TypeOfBatchScript.File) .AsGuard <ArgumentException>($"{script.Type}"); Emitter.Publish(Localised.PerformingExportScript, script.Description); var commandPath = Path.Combine(Location.OfAssets, script.Command); var command = await FileManager.Load(commandPath); command = Token.DoSecondaryPass(command, forProvider); return(Context.GetAtom <string>(command, inContext)); }).Result; forCandidate = forCandidate.Replace(script.Description, result); Emitter.Publish(Indentation.FirstLevel, CommonLocalised.Completed); }