示例#1
0
        public void GenerateScript(ComparerResult comparerResult)
        {
            List <string> statements = new List <string>();

            statements.Add("-- SCRIPT START ******************************************\r\n");
            statements.Add("\r\n");

            var schemas = GenerateNewSchemas(comparerResult);

            if (!string.IsNullOrEmpty(schemas))
            {
                statements.Add("-- NEW SCHEMAS ********************************************\r\n");
                statements.Add(schemas);
                statements.Add("\r\n");
            }

            if (comparerResult.NewTables.Count > 0)
            {
                statements.Add("-- NEW TABLES ********************************************\r\n");
                foreach (var res in comparerResult.NewTables)
                {
                    statements.Add(GenerateCreates(res, comparerResult.targetDB));
                }
                statements.Add("\r\n");
                _logger.Log("Generated Scripts New Tables: " + comparerResult.NewTables.Count(), EventType.Info);
            }

            if (comparerResult.ModifiedTables.Count > 0)
            {
                statements.Add("-- UPD TABLES ********************************************\r\n");
                foreach (var res in comparerResult.ModifiedTables)
                {
                    statements.Add(GenerateUpdates(res, comparerResult.targetDB));
                }
                statements.Add("\r\n");
                _logger.Log("Generated Scripts Update Tables: " + comparerResult.ModifiedTables.Count(), EventType.Info);
            }

            List <ComparerTableResult> allTables = new List <ComparerTableResult>();

            allTables.AddRange(comparerResult.UntouchedTables);
            allTables.AddRange(comparerResult.NewTables);
            allTables.AddRange(comparerResult.ModifiedTables);
            allTables = allTables.OrderBy(e => e.FullName).ToList();
            statements.Add("-- ****************************************************\r\n");
            statements.Add("-- ****************     INSERTS      ******************\r\n");
            statements.Add("-- ****************************************************\r\n");

            foreach (var res in allTables)
            {
                statements.Add(GenerateInserts(res, comparerResult.sourceDB, comparerResult.targetDB));
            }
            _logger.Log("Generated Scripts Insert Statements. ", EventType.Info);

            Report(string.Join("", statements));
        }
示例#2
0
        private string GenerateNewSchemas(ComparerResult comparerResult)
        {
            string cmdCREATE = "";

            foreach (var res in comparerResult.NewSchemas)
            {
                cmdCREATE += "CREATE SCHEMA [" + comparerResult.targetDB + "].[" + res + "]\r\n";
            }
            return(cmdCREATE);
        }
示例#3
0
        private void GenerateReport(ComparerResult comparerResult, IReportGenerator generator)
        {
            generator.Init();

            generator.Report("/*");
            generator.Report("Untouched Tables: " + comparerResult.UntouchedTables.Count, EventType.Info);
            generator.Report("");

            foreach (var res in comparerResult.UntouchedTables)
            {
                generator.Report(res.FullName, EventType.None);
            }

            generator.Report("");
            generator.Report("New Tables: " + comparerResult.NewTables.Count, EventType.Info);
            generator.Report("");
            foreach (var res in comparerResult.NewTables)
            {
                generator.Report(res.FullName, EventType.None);
            }

            generator.Report("");
            generator.Report("Modified Tables: " + comparerResult.ModifiedTables.Count, EventType.Info);
            generator.Report("");

            foreach (var res in comparerResult.ModifiedTables)
            {
                generator.Report(res.FullName, EventType.None);

                if (res.NewFields.Count > 0)
                {
                    foreach (var f in res.NewFields)
                    {
                        generator.Report("  (NEW) " + f.Name + " " + f.Type + (f.Nullable ? " NULL" : " NOT NULL") + (f.IsPK ? " PK" : ""), EventType.Warning);
                    }
                }

                if (res.UpgradedFields.Count > 0)
                {
                    foreach (var f in res.UpgradedFields)
                    {
                        generator.Report("  (UPG) " + f.Name + " " + f.Type + (f.Nullable ? " NULL" : " NOT NULL") + (f.IsPK ? " PK" : ""), EventType.Warning);
                    }
                }
            }
            generator.Report("*/");
            generator.End();
        }
示例#4
0
        public ComparerResult Compare(List <TableInfo> source, List <TableInfo> target, string[] targetSchemas)
        {
            _logger.Log("Checking structure differences.", EventType.Info);
            ComparerResult result = new ComparerResult();

            if (source.Count == 0)
            {
                _logger.Log("No tables found in source database.", EventType.Error);
                return(result);
            }
            result.sourceDB = source[0].Database;
            if (target.Count == 0)
            {
                _logger.Log("No tables found in target database.", EventType.Error);
                return(result);
            }
            result.targetDB = target[0].Database;

            foreach (var table in source)
            {
                bool existTable = target.Exists(t => t.FullName == table.FullName);
                if (!existTable)
                {
                    result.NewTables.Add(CompareTable(table, null));
                    if (targetSchemas.FirstOrDefault(s => s == table.Schema) == null)
                    {
                        result.NewSchemas.Add(table.Schema);
                    }
                }
                else
                {
                    var targetTable = target.FirstOrDefault(t => t.FullName == table.FullName);
                    ComparerTableResult compTable = CompareTable(table, targetTable);
                    if ((compTable.NewFields.Count > 0) || (compTable.RemovedFields.Count > 0) || (compTable.UpgradedFields.Count > 0))
                    {
                        result.ModifiedTables.Add(compTable);
                    }
                    else
                    {
                        result.UntouchedTables.Add(compTable);
                    }
                }
            }

            return(result);
        }