예제 #1
0
        /// <summary>
        /// Applies the change changeScript.
        /// </summary>
        /// <param name="changeScript">The changeScript.</param>
        /// <param name="scriptContent"></param>
        /// <param name="output">The output from applying the change changeScript.</param>
        protected void ApplyChangeScript(ChangeScript changeScript, string scriptContent, StringBuilder output)
        {
            var statements = splitter.Split(scriptContent);

            var i = 0;

            foreach (var statement in statements)
            {
                try
                {
                    queryExecuter.BeginTransaction();
                    if (statements.Count > 1)
                    {
                        infoTextWriter.WriteLine(" -> statement " + (i + 1) + " of " + statements.Count + "...");
                    }

                    queryExecuter.Execute(statement, output);

                    i++;
                }
                catch (DbException e)
                {
                    throw new ChangeScriptFailedException(e, changeScript, i + 1, statement);
                }
                finally
                {
                    // Write out SQL execution output.
                    if (output.Length > 0)
                    {
                        infoTextWriter.WriteLine(output.ToString());
                    }
                    try
                    {
                        // Commit transaction
                        queryExecuter.CommitTransaction();
                    }
                    catch (Exception e)
                    {
                        output.Clear();
                        infoTextWriter.WriteLine(e.ToString());
                        output.AppendLine(e.Message);
                        RecordScriptStatus(changeScript, ScriptStatus.Failure, output.ToString());
                    }
                }
            }
        }