/// <summary> /// Returns full definition of the column. /// </summary> /// <param name="addDefaults">Whether default value should be added in case NOT NULL constraint is specified but no default value is set.</param> /// <returns>Full definition of the column.</returns> public string GetFullDefinition(bool addDefaults) { var definitionSql = new StringBuilder(100); definitionSql.Append(PgDiffStringExtension.QuoteName(this.Name)); definitionSql.Append(' '); definitionSql.Append(this.Type); if (this.DefaultValue != null && this.DefaultValue.Length > 0) { definitionSql.Append(" DEFAULT "); definitionSql.Append(this.DefaultValue); } else if (!this.NullValue && addDefaults) { var defaultColValue = PgColumnUtils.GetDefaultValue(this.Type); if (defaultColValue != null) { definitionSql.Append(" DEFAULT "); definitionSql.Append(defaultColValue); } } if (!this.NullValue) { definitionSql.Append(" NOT NULL"); } return(definitionSql.ToString()); }
/// <summary> /// Adds statements for modification of columns to the list of statements. /// </summary> private static void AddModifyTableColumns(IList <string> statements, PgTable oldTable, PgTable newTable, IList <PgColumn> dropDefaultsColumns, bool addDefaults) { foreach (PgColumn newColumn in newTable.Columns) { if (!oldTable.ContainsColumn(newColumn.Name)) { continue; } PgColumn oldColumn = oldTable.GetColumn(newColumn.Name); var newColumnName = PgDiffStringExtension.QuoteName(newColumn.Name); if (!oldColumn.Type.Equals(newColumn.Type)) { statements.Add($"\tALTER COLUMN {newColumnName} TYPE {newColumn.Type} /* TypeParameterChange of table {newTable.Name}. Old: {oldColumn.Type} New: {newColumn.Type} */"); } var oldDefault = oldColumn.DefaultValue ?? string.Empty; var newDefault = newColumn.DefaultValue ?? string.Empty; if (!oldDefault.Equals(newDefault)) { if (newDefault.Length == 0) { statements.Add("\tALTER COLUMN " + newColumnName + " DROP DEFAULT"); } else { statements.Add("\tALTER COLUMN " + newColumnName + " SET DEFAULT " + newDefault); } } if (oldColumn.NullValue != newColumn.NullValue) { if (newColumn.NullValue) { statements.Add("\tALTER COLUMN " + newColumnName + " DROP NOT NULL"); } else { if (addDefaults) { var defaultValue = PgColumnUtils.GetDefaultValue(newColumn.Type); if (defaultValue != null) { statements.Add("\tALTER COLUMN " + newColumnName + " SET DEFAULT " + defaultValue); dropDefaultsColumns.Add(newColumn); } } statements.Add("\tALTER COLUMN " + newColumnName + " SET NOT NULL"); } } } }
private static void AddModifyTableColumns(List <string> statements, PgDiffArguments arguments, PgTable oldTable, PgTable newTable, List <PgColumn> dropDefaultsColumns) { foreach (var newColumn in newTable.Columns) { if (!oldTable.ContainsColumn(newColumn.Name)) { continue; } var oldColumn = oldTable.GetColumn(newColumn.Name); var newColumnName = PgDiffUtils.GetQuotedName(newColumn.Name); if (!oldColumn.Type.Equals(newColumn.Type)) { statements.Add("\tALTER COLUMN " + newColumnName + " TYPE " + newColumn.Type + " /* " + string.Format(Resources.TypeParameterChange, newTable.Name, oldColumn.Type, newColumn.Type) + " */"); } var oldDefault = oldColumn.DefaultValue ?? ""; var newDefault = newColumn.DefaultValue ?? ""; if (!oldDefault.Equals(newDefault)) { statements.Add(newDefault.Length == 0 ? $"\tALTER COLUMN {newColumnName} DROP DEFAULT" : $"\tALTER COLUMN {newColumnName} SET DEFAULT {newDefault}"); } if (oldColumn.NullValue == newColumn.NullValue) { continue; } if (newColumn.NullValue) { statements.Add($"\tALTER COLUMN {newColumnName} DROP NOT NULL"); } else { if (arguments.AddDefaults) { var defaultValue = PgColumnUtils.GetDefaultValue(newColumn.Type); if (defaultValue != null) { statements.Add($"\tALTER COLUMN {newColumnName} SET DEFAULT {defaultValue}"); dropDefaultsColumns.Add(newColumn); } } statements.Add($"\tALTER COLUMN {newColumnName} SET NOT NULL"); } } }