/// <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);
        }
Example #2
0
        /// <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);
        }