45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
# File 'lib/dbsketch/rendering/sql/table_renderer.rb', line 45
def alter table_diff
raise ArgumentError, "table_diff is not a Dbsketch::Comparison::TableDiff" unless table_diff.is_a? Dbsketch::Comparison::TableDiff
queries = []
deleted_columns = table_diff.columns.select { |d| d.deletion? }
if not deleted_columns.empty?
queries << "alter table #{table_diff.new_table.name} drop column #{deleted_columns.map { |d| d.old_column.name }.join(", ")}"
end
added_columns = table_diff.columns.select { |d| d.addition? }
if not added_columns.empty?
queries << "alter table #{table_diff.new_table.name} add #{added_columns.map { |d| @column_renderer.create d.new_column }.join(", ")}"
end
queries << table_diff.columns.select { |d| d.change? }.map { |d| "alter table #{table_diff.new_table.name} alter column #{@column_renderer.create d.new_column}" }
if nil != table_diff.primary_key
queries << "alter table #{table_diff.new_table.name} drop constraint #{table_diff.primary_key.old_key.name}" if table_diff.primary_key.deletion? or table_diff.primary_key.change?
queries << "alter table #{table_diff.new_table.name} add #{create_primary_key table_diff.primary_key.new_key}" if table_diff.primary_key.addition? or table_diff.primary_key.change?
end
deleted_and_changed = table_diff.check_constraints.select { |chk_diff| chk_diff.deletion? or chk_diff.change? }
if not deleted_and_changed.empty?
queries << "alter table #{table_diff.new_table.name} drop constraint #{deleted_and_changed.map { |d| d.old_constraint.name }.join(", ")}"
end
added_and_changed = table_diff.check_constraints.select { |chk_diff| chk_diff.addition? or chk_diff.change? }
if not added_and_changed.empty?
queries << "alter table #{table_diff.new_table.name} add #{added_and_changed.map { |d| create_check_constraint d.new_constraint }.join(", ")}"
end
queries.flatten.join("\n")
deleted_and_changed = table_diff.foreign_keys.select { |d| d.deletion? or d.change? }
if not deleted_and_changed.empty?
queries << "alter table #{table_diff.new_table.name} drop constraint #{deleted_and_changed.map { |d| d.old_key.name }.join(", ")}"
end
added_and_changed = table_diff.foreign_keys.select { |d| d.addition? or d.change? }
if not added_and_changed.empty?
queries << "alter table #{table_diff.new_table.name} add #{added_and_changed.map { |d| @fk_renderer.create d.new_key }.join(", ")}"
end
queries.flatten.join("\n")
deleted_and_changed = table_diff.unique_constraints.select { |d| d.deletion? or d.change? }
if not deleted_and_changed.empty?
queries << "alter table #{table_diff.new_table.name} drop constraint #{deleted_and_changed.map { |d| d.old_constraint.name }.join(", ")}"
end
added_and_changed = table_diff.unique_constraints.select { |d| d.addition? or d.change? }
if not added_and_changed.empty?
queries << "alter table #{table_diff.new_table.name} add #{added_and_changed.map { |d| create_unique_constraint d.new_constraint }.join(", ")}"
end
queries.flatten.join("\n")
end
|