コード例 #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());
                    }
                }
            }
        }
コード例 #2
0
        private static int RunSql(NameValueCollection parameters)
        {
            var connectionStrings      = parameters["connection-strings"];
            var connectionStringsFile  = parameters["connection-strings-file"];
            var queryFile              = parameters["query-file"];
            var resultConnectionString = parameters["result-connection-string"];
            var dumpSql            = parameters["dump-sql"];
            var historyMode        = parameters["history-mode"];
            var parametersAreValid =
                (!string.IsNullOrEmpty(connectionStrings) || !string.IsNullOrEmpty(connectionStringsFile)) &&
                !string.IsNullOrEmpty(queryFile) &&
                !string.IsNullOrEmpty(resultConnectionString);

            if (!parametersAreValid)
            {
                Console.Out.WriteLine("Invalid arguments");
                Console.Out.WriteLine(
                    "Usage: Generator.exe -cmd run-sql [-connection-strings <1c db connection strings comma delimited> | -connection-strings-file <connection strings with areas>] -query-file <path to file with 1c query> -result-connection-string <where to put results> [-dump-sql true] [-history-mode true]");
                return(-1);
            }
            var querySources = string.IsNullOrEmpty(connectionStrings)
                ? StringHelpers.ParseLinesWithTabs(File.ReadAllText(connectionStringsFile),
                                                   (s, items) => new QuerySource
            {
                db    = new PostgreeSqlDatabase(s),
                areas = items.Select(int.Parse).ToArray()
            })
                : connectionStrings.Split(',')
                               .Select(x => new QuerySource
            {
                db    = new PostgreeSqlDatabase(x),
                areas = new int[0]
            });
            var target          = new MsSqlDatabase(resultConnectionString);
            var queryText       = File.ReadAllText(queryFile);
            var targetTableName = Path.GetFileNameWithoutExtension(queryFile);
            var sqlExecuter     = new QueryExecuter(querySources.ToArray(), target, queryText,
                                                    targetTableName, dumpSql == "true", historyMode == "true");
            var succeeded = sqlExecuter.Execute();

            return(succeeded ? 0 : -1);
        }