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)); }
private string GenerateNewSchemas(ComparerResult comparerResult) { string cmdCREATE = ""; foreach (var res in comparerResult.NewSchemas) { cmdCREATE += "CREATE SCHEMA [" + comparerResult.targetDB + "].[" + res + "]\r\n"; } return(cmdCREATE); }
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(); }
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); }