db-evolve 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/tasks/db.rb +41 -10
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 694c48e78daf4ddf885edf8bf20889058bc298cd
|
4
|
+
data.tar.gz: ac15d6126a72447c50b4d83ea9fe5631b7fb8315
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 66620868e04882314151f08f9f3a739158c3dc016b4e6dd17cd3068d904a0c1f3188838a1ed4416404618d4266b985502f9e31d5cb45761d22de8f79fb0c708f
|
7
|
+
data.tar.gz: 62f3056ed8d5d15d0c57fd6b2a4bb9e1ae1f4aa8befe88e2d08f044b9983d383cf7e75e6d728dc145109f43e27065505e0202584c73c081131c8647f7e01b5a6
|
data/lib/tasks/db.rb
CHANGED
@@ -105,7 +105,7 @@ def do_evolve(noop, yes, nowait)
|
|
105
105
|
|
106
106
|
to_run += calc_index_changes(existing_indexes, $schema_indexes, renames, rename_cols_by_table)
|
107
107
|
|
108
|
-
to_run += calc_fk_changes($foreign_keys, Set.new(
|
108
|
+
to_run += calc_fk_changes($foreign_keys, Set.new(existing_tables.keys), renames)
|
109
109
|
|
110
110
|
to_run += calc_perms_changes($schema_tables, noop) unless $check_perms_for.empty?
|
111
111
|
|
@@ -169,6 +169,11 @@ end
|
|
169
169
|
def calc_index_changes(existing_indexes, schema_indexes, table_renames, rename_cols_by_table)
|
170
170
|
# rename_cols_by_table is by the new table name
|
171
171
|
existing_indexes = Set.new existing_indexes
|
172
|
+
existing_indexes.each do |index|
|
173
|
+
if table_renames[index[:table]].present?
|
174
|
+
index[:table] = table_renames[index[:table]]
|
175
|
+
end
|
176
|
+
end
|
172
177
|
schema_indexes = Set.new schema_indexes
|
173
178
|
|
174
179
|
add_indexes = schema_indexes - existing_indexes
|
@@ -201,10 +206,10 @@ def calc_index_changes(existing_indexes, schema_indexes, table_renames, rename_c
|
|
201
206
|
return to_run
|
202
207
|
end
|
203
208
|
|
204
|
-
def calc_fk_changes(foreign_keys,
|
209
|
+
def calc_fk_changes(foreign_keys, existing_tables, renames)
|
205
210
|
existing_foreign_keys = []
|
206
|
-
unless
|
207
|
-
|
211
|
+
unless existing_tables.empty?
|
212
|
+
existing_tables_sql = (existing_tables.map {|tn| ActiveRecord::Base.sanitize(tn)}).join(',')
|
208
213
|
sql = %{
|
209
214
|
SELECT
|
210
215
|
tc.constraint_name, tc.table_name, kcu.column_name,
|
@@ -217,12 +222,16 @@ def calc_fk_changes(foreign_keys, tables)
|
|
217
222
|
JOIN information_schema.constraint_column_usage AS ccu
|
218
223
|
ON ccu.constraint_name = tc.constraint_name
|
219
224
|
WHERE constraint_type = 'FOREIGN KEY'
|
220
|
-
AND tc.table_name in (#{
|
225
|
+
AND tc.table_name in (#{existing_tables_sql});
|
221
226
|
}
|
222
227
|
build_pg_connection.exec(sql).each do |row|
|
228
|
+
from_table = row['table_name']
|
229
|
+
from_table = renames[from_table] if renames[from_table].present?
|
230
|
+
to_table = row['foreign_table_name']
|
231
|
+
to_table = renames[to_table] if renames[to_table].present?
|
223
232
|
existing_foreign_keys << HashWithIndifferentAccess.new({
|
224
|
-
:from_table =>
|
225
|
-
:to_table =>
|
233
|
+
:from_table => from_table,
|
234
|
+
:to_table => to_table,
|
226
235
|
:column => row['column_name'],
|
227
236
|
:primary_key => row['foreign_column_name'],
|
228
237
|
:name => row['constraint_name'],
|
@@ -234,6 +243,26 @@ def calc_fk_changes(foreign_keys, tables)
|
|
234
243
|
foreign_keys = Set.new foreign_keys
|
235
244
|
add_fks = foreign_keys - existing_foreign_keys
|
236
245
|
delete_fks = existing_foreign_keys - foreign_keys
|
246
|
+
|
247
|
+
rename_fks = []
|
248
|
+
delete_fks.each do |delete_fk|
|
249
|
+
dfk = delete_fk.clone
|
250
|
+
dfk.delete(:name)
|
251
|
+
add_fks.each do |add_fk|
|
252
|
+
afk = add_fk.clone
|
253
|
+
afk.delete(:name)
|
254
|
+
if afk==dfk
|
255
|
+
delete_fks.delete delete_fk
|
256
|
+
add_fks.delete add_fk
|
257
|
+
rename_fks << {
|
258
|
+
:table => delete_fk[:from_table],
|
259
|
+
:from_name => delete_fk[:name],
|
260
|
+
:to_name => add_fk[:name]
|
261
|
+
}
|
262
|
+
# ALTER TABLE name RENAME CONSTRAINT "error_test_id_fkey" TO "the_new_name_fkey";
|
263
|
+
end
|
264
|
+
end
|
265
|
+
end
|
237
266
|
|
238
267
|
to_run = []
|
239
268
|
delete_fks.each do |fk|
|
@@ -242,6 +271,9 @@ def calc_fk_changes(foreign_keys, tables)
|
|
242
271
|
add_fks.each do |fk|
|
243
272
|
to_run << "ALTER TABLE #{escape_table(fk[:from_table])} ADD CONSTRAINT #{escape_table(fk[:name])} FOREIGN KEY (#{escape_table(fk[:column])}) REFERENCES #{escape_table(fk[:to_table])} (#{escape_table(fk[:primary_key])}) MATCH FULL"
|
244
273
|
end
|
274
|
+
rename_fks.each do |fk|
|
275
|
+
to_run << "ALTER TABLE #{escape_table(fk[:table])} RENAME CONSTRAINT #{escape_table(fk[:from_name])} TO #{escape_table(fk[:to_name])}"
|
276
|
+
end
|
245
277
|
|
246
278
|
if !to_run.empty?
|
247
279
|
to_run.unshift("\n-- update foreign keys")
|
@@ -499,12 +531,11 @@ def gen_pg_adapter()
|
|
499
531
|
end
|
500
532
|
|
501
533
|
def sql_renames(renames)
|
502
|
-
to_run = []
|
503
534
|
pg_a = gen_pg_adapter()
|
504
535
|
renames.each do |k,v|
|
505
536
|
pg_a.rename_table(k, v)
|
506
|
-
to_run += $tmp_to_run
|
507
537
|
end
|
538
|
+
to_run = $tmp_to_run.clone
|
508
539
|
if !to_run.empty?
|
509
540
|
to_run.unshift("\n-- rename tables")
|
510
541
|
end
|
@@ -539,7 +570,7 @@ def sql_adds(tables)
|
|
539
570
|
$tmp_to_run << "REVOKE ALL ON #{(tables.map {|t| escape_table(t)}).join(',')} FROM #{$check_perms_for.to_a.join(',')}"
|
540
571
|
end
|
541
572
|
end
|
542
|
-
return $tmp_to_run
|
573
|
+
return $tmp_to_run.clone
|
543
574
|
end
|
544
575
|
|
545
576
|
def can_convert(type1, type2)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: db-evolve
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Derek Anderson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-03-
|
11
|
+
date: 2016-03-09 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: A diff/patch-esque tool to replace schema migrations in Ruby. See https://github.com/keredson/ruby-db-evolve
|
14
14
|
for details.
|