Exemple #1
0
        private void GenerateButton_OnClick(object sender, RoutedEventArgs e)
        {
            var diffFile  = ConstantData.WorkingDir + "\\diff.xml";
            var sqlOutput = ConstantData.WorkingDir + "\\output.sql";
            var engine    = new GenerateScriptService();
            var result    = engine.GenerateScript(
                new GenerateScript {
                CurrentDiffFile = diffFile,
                MigrateSqlFile  = sqlOutput
            });

            if (result.Any(x =>
                           x.Mode == ViewMode.Add && x.ObjectType == SQLObject.Column &&
                           x.SQLScript.ToUpper().Contains("NOT NULL") && !x.SQLScript.ToUpper().Contains("DEFAULT")))
            {
                var database = CompareSchemaService.LoadXMLFile(diffFile);
                var count    = database.Update?.Tables?
                               .Where(v => v.Add?.Columns != null)
                               .SelectMany(x => x.Add.Columns)
                               .Count(c => c.IS_NULLABLE == "NO" && c.COLUMN_DEFAULT.IsEmpty());
                if (count > 0)
                {
                    var needToSave = false;
                    var tables     = database.Update?.Tables?.Where(v => v.Add?.Columns != null).ToList();
                    foreach (var table in tables)
                    {
                        foreach (var column in table.Add.Columns.Where(x => x.IS_NULLABLE == "NO" && x.COLUMN_DEFAULT.IsEmpty()))
                        {
                            var description   = $"Column {column.Name} on table {table.Name} need default value";
                            var defaultWindow = new SetDefaultValueWindow(description);
                            if (defaultWindow.ShowDialog() == true)
                            {
                                needToSave            = true;
                                column.COLUMN_DEFAULT = defaultWindow.DefaultValue;
                            }
                        }
                    }

                    if (needToSave)
                    {
                        ExtractSchemaService.SaveToFile(database, "diff.xml");
                        engine = new GenerateScriptService();
                        engine.GenerateScript(
                            new GenerateScript {
                            CurrentDiffFile = diffFile,
                            MigrateSqlFile  = sqlOutput
                        });
                    }
                }
            }

            Process.Start(sqlOutput);
        }
Exemple #2
0
        private void ActuallyRename_OnClick(object sender, RoutedEventArgs e)
        {
            var database = CompareSchemaService.LoadXMLFile(ConstantData.WorkingDir + "\\diff.xml");
            var table    = database.Update?.Tables?.FirstOrDefault(x =>
                                                                   string.Equals(x.FullName, SelectedAddOrUpdate.FullTableName, StringComparison.OrdinalIgnoreCase));

            if (table == null)
            {
                return;
            }

            var newSchema = table.Add.Columns.FirstOrDefault(x => x.Name == SelectedAddOrUpdate.ObjectName);
            var oldSchema = table.Remove.Columns.FirstOrDefault(x => x.Name == SelectedRemove.ObjectName);

            if (oldSchema == null || newSchema == null)
            {
                return;
            }

            newSchema.SetName     = newSchema.Name;
            newSchema.COLUMN_NAME = oldSchema.Name;
            table.Add.Columns.Remove(newSchema);
            table.Remove.Columns.Remove(oldSchema);

            if (table.Update == null)
            {
                table.Update = new Model.Schema.Table {
                    Columns = new List <Model.Schema.Column> {
                        newSchema
                    }
                }
            }
            ;
            else if (table.Update.Columns == null)
            {
                table.Update.Columns = new List <Model.Schema.Column> {
                    newSchema
                }
            }
            ;
            else
            {
                table.Update.Columns.Add(newSchema);
            }
            ExtractSchemaService.SaveToFile(database, "diff.xml");
            GenerateSqlFileAndShowUpdates();

            SelectedAddOrUpdate        = null;
            SelectedRemove             = null;
            ((Button)sender).IsEnabled = false;
        }