From 1a3bcc947bd1e35100e59143273260c8b456d80a Mon Sep 17 00:00:00 2001 From: Olmo del Corral Cano Date: Mon, 29 Jul 2019 14:35:45 +0200 Subject: [PATCH] fix hasValueColumn --- Signum.Engine/Engine/SchemaSynchronizer.cs | 40 ++++++++++++---------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/Signum.Engine/Engine/SchemaSynchronizer.cs b/Signum.Engine/Engine/SchemaSynchronizer.cs index 7cf6e94874..d4245d7e5b 100644 --- a/Signum.Engine/Engine/SchemaSynchronizer.cs +++ b/Signum.Engine/Engine/SchemaSynchronizer.cs @@ -559,15 +559,15 @@ private static SqlPreCommand AlterTableAddColumnDefault(ITable table, IColumn co if (column.Nullable == IsNullable.Yes || column.Identity || column.Default != null || column is ImplementationColumn) return SqlBuilder.AlterTableAddColumn(table, column); - var defaultValue = GetDefaultValue(table, column, rep, forNewColumn: true, forceDefaultValue: forceDefaultValue); - if (defaultValue == "force") - return SqlBuilder.AlterTableAddColumn(table, column); - - if(column.Nullable == IsNullable.Forced) + if (column.Nullable == IsNullable.Forced) { var hasValueColumn = table.GetHasValueColumn(column); - if(hasValueColumn != null && hasValueFalse.Contains(hasValueColumn)) + if (hasValueColumn != null && hasValueFalse.Contains(hasValueColumn)) + return SqlBuilder.AlterTableAddColumn(table, column); + + var defaultValue = GetDefaultValue(table, column, rep, forNewColumn: true, forceDefaultValue: forceDefaultValue); + if (defaultValue == "force") return SqlBuilder.AlterTableAddColumn(table, column); var where = hasValueColumn != null ? $"{hasValueColumn.Name} = 1" : "??"; @@ -578,21 +578,25 @@ private static SqlPreCommand AlterTableAddColumnDefault(ITable table, IColumn co {column.Name} = {SqlBuilder.Quote(column.SqlDbType, defaultValue)} WHERE {where}"))!; } - - if(column is FieldEmbedded.EmbeddedHasValueColumn hv && defaultValue == "0") + else { - hasValueFalse.Add(hv); - } + var defaultValue = GetDefaultValue(table, column, rep, forNewColumn: true, forceDefaultValue: forceDefaultValue); + if (defaultValue == "force") + return SqlBuilder.AlterTableAddColumn(table, column); - var tempDefault = new SqlBuilder.DefaultConstraint( - columnName: column.Name, - name: "DF_TEMP_" + column.Name, - quotedDefinition : SqlBuilder.Quote(column.SqlDbType, defaultValue) - ); + if (column is FieldEmbedded.EmbeddedHasValueColumn hv && defaultValue == "0") + hasValueFalse.Add(hv); - return SqlPreCommand.Combine(Spacing.Simple, - SqlBuilder.AlterTableAddColumn(table, column, tempDefault), - SqlBuilder.AlterTableDropConstraint(table.Name, tempDefault.Name))!; + var tempDefault = new SqlBuilder.DefaultConstraint( + columnName: column.Name, + name: "DF_TEMP_" + column.Name, + quotedDefinition: SqlBuilder.Quote(column.SqlDbType, defaultValue) + ); + + return SqlPreCommand.Combine(Spacing.Simple, + SqlBuilder.AlterTableAddColumn(table, column, tempDefault), + SqlBuilder.AlterTableDropConstraint(table.Name, tempDefault.Name))!; + } } private static SqlPreCommand AlterTableAddColumnDefaultZero(ITable table, IColumn column)