/// <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"); } } } }
/// <summary> /// Adds statements for removal of columns to the list of statements. /// </summary> private static void AddDropTableColumns(IList <string> statements, PgTable oldTable, PgTable newTable) { foreach (PgColumn column in oldTable.Columns) { if (!newTable.ContainsColumn(column.Name)) { statements.Add("\tDROP COLUMN " + PgDiffStringExtension.QuoteName(column.Name)); } } }
private static void AddDropTableColumns(List <string> statements, PgTable oldTable, PgTable newTable) { foreach (var column in oldTable.Columns) { if (!newTable.ContainsColumn(column.Name)) { statements.Add("\tDROP COLUMN " + PgDiffUtils.GetQuotedName(column.Name)); } } }
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"); } } }
/// <summary> /// Adds statements for creation of new columns to the list of statements. /// </summary> private static void AddCreateTableColumns(IList <string> statements, PgTable oldTable, PgTable newTable, IList <PgColumn> dropDefaultsColumns, bool addDefaults) { foreach (PgColumn column in newTable.Columns) { if (!oldTable.ContainsColumn(column.Name)) { statements.Add("\tADD COLUMN " + column.GetFullDefinition(addDefaults)); if (addDefaults && !column.NullValue && (column.DefaultValue == null || column.DefaultValue == string.Empty)) { dropDefaultsColumns.Add(column); } } } }
private static void AddCreateTableColumns(List <string> statements, PgDiffArguments arguments, PgTable oldTable, PgTable newTable, List <PgColumn> dropDefaultsColumns) { foreach (var column in newTable.Columns) { if (!oldTable.ContainsColumn(column.Name)) { statements.Add("\tADD COLUMN " + column.GetFullDefinition(arguments.AddDefaults)); if (arguments.AddDefaults && !column.NullValue && string.IsNullOrEmpty(column.DefaultValue)) { dropDefaultsColumns.Add(column); } } } }
/// <summary> /// Parses ALTER COLUMN action. /// </summary> private static void ParseAlterColumn(Parser parser, PgTable table) { parser.ExpectOptional("COLUMN"); var columnName = ParserUtils.GetObjectName(parser.ParseIdentifier()); if (parser.ExpectOptional("SET")) { if (parser.ExpectOptional("STATISTICS")) { PgColumn column = table.GetColumn(columnName); if (column == null) { throw new TeamworkParserException($"CannotFindTableColumn {columnName} in table {table.Name} from {parser.String}"); } column.Statistics = parser.ParseInteger(); } else if (parser.ExpectOptional("DEFAULT")) { var defaultValue = parser.Expression(); if (table.ContainsColumn(columnName)) { PgColumn column = table.GetColumn(columnName); if (column == null) { throw new TeamworkParserException($"CannotFindTableColumn {columnName} in table {table.Name} from {parser.String}"); } column.DefaultValue = defaultValue; } else { throw new TeamworkParserException($"CannotFindColumnInTable {columnName} in table {table.Name}"); } } else if (parser.ExpectOptional("STORAGE")) { PgColumn column = table.GetColumn(columnName); if (column == null) { throw new TeamworkParserException($"CannotFindTableColumn {columnName} in table {table.Name} from {parser.String}"); } if (parser.ExpectOptional("PLAIN")) { column.Storage = "PLAIN"; } else if (parser.ExpectOptional("EXTERNAL")) { column.Storage = "EXTERNAL"; } else if (parser.ExpectOptional("EXTENDED")) { column.Storage = "EXTENDED"; } else if (parser.ExpectOptional("MAIN")) { column.Storage = "MAIN"; } else { throw new TeamworkParserException("CannotParseStringUnsupportedCommand"); } } else { throw new TeamworkParserException("CannotParseStringUnsupportedCommand"); } } else { throw new TeamworkParserException("CannotParseStringUnsupportedCommand"); } }
private static void ParseAlterColumn(Parser parser, PgTable table) { parser.ExpectOptional("COLUMN"); var columnName = ParserUtils.GetObjectName(parser.ParseIdentifier()); if (parser.ExpectOptional("SET")) { if (parser.ExpectOptional("STATISTICS")) { var column = table.GetColumn(columnName); if (column == null) { throw new Exception(string.Format(Resources.CannotFindTableColumn, columnName, table.Name, parser.GetString())); } column.Statistics = parser.ParseInteger(); } else if (parser.ExpectOptional("DEFAULT")) { var defaultValue = parser.GetExpression(); if (table.ContainsColumn(columnName)) { var column = table.GetColumn(columnName); if (column == null) { throw new Exception(string.Format(Resources.CannotFindTableColumn, columnName, table.Name, parser.GetString())); } column.DefaultValue = defaultValue; } else { throw new ParserException(string.Format(Resources.CannotFindColumnInTable, columnName, table.Name)); } } else if (parser.ExpectOptional("STORAGE")) { var column = table.GetColumn(columnName); if (column == null) { throw new Exception(string.Format(Resources.CannotFindTableColumn, columnName, table.Name, parser.GetString())); } if (parser.ExpectOptional("PLAIN")) { column.Storage = "PLAIN"; } else if (parser.ExpectOptional("EXTERNAL")) { column.Storage = "EXTERNAL"; } else if (parser.ExpectOptional("EXTENDED")) { column.Storage = "EXTENDED"; } else if (parser.ExpectOptional("MAIN")) { column.Storage = "MAIN"; } else { parser.ThrowUnsupportedCommand(); } } else { parser.ThrowUnsupportedCommand(); } } else { parser.ThrowUnsupportedCommand(); } }