ridgepole 0.8.2 → 0.8.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 57ca4e6b9d4ac5f62c434e2cd3116f13b77e308666beb4e7e242def292d25957
4
- data.tar.gz: 3cb9d7fb9e6949b9627ddb23219b5dbe7a7e34168e00fcf0cb073fd123b90e36
3
+ metadata.gz: a86332195811295a61f945779cad2b09c6fd8b01df116e505f89995c576f978c
4
+ data.tar.gz: 491952fd6d83ffb361bbae4153b0fff3d216512948ed0f6b521e408375f898ab
5
5
  SHA512:
6
- metadata.gz: 9ba1cab03cb73b791fc28bf52985dd7caef619694fad6fc0ab9b22eedc53791da70050d6c77b4017019708dade6387777836c427dc080c9dace6690ac83a1a3b
7
- data.tar.gz: 3f8446b608a6bdc86095aa3639bd3e57bcebdf423c858edf3f12613e98a6674be7bf210ec6443d0964189143cae3f5af4223a36cda705e8c0bf3ddaf44026fab
6
+ metadata.gz: e7868cb379bb0329e9efef9a5402c9ef5f369740aa4cd1ff68e80798582fbf32bdb6b15840e9866c0dff7aa3fe903aab8f7d7b07359137072face3c462407698
7
+ data.tar.gz: 94a72fd2146fbcdaa81c235916b3445c13d8eb3297b5c686c011938f6918d85383fb44b00513c52e96fca78b34b1a7b035558d03f36991e1cc0d277f9aa75ebe
data/README.md CHANGED
@@ -105,6 +105,8 @@ It defines DB schema using [Rails DSL](http://guides.rubyonrails.org/migrations.
105
105
  * Drop tables in an order considering foreign key constraints ([pull#284](https://github.com/winebarrel/ridgepole/pull/284))
106
106
  * `>= 0.8.2`
107
107
  * Support `postgres://` schema ([pull#285](https://github.com/winebarrel/ridgepole/pull/285))
108
+ * `>= 0.8.3`
109
+ * Fix "topological sort failed" error ([pull#287](https://github.com/winebarrel/ridgepole/pull/287))
108
110
  </details>
109
111
 
110
112
  ## Installation
@@ -42,7 +42,7 @@ module Ridgepole
42
42
  append_change(table_name, attrs, buf, pre_buf_for_fk, post_buf_for_fk)
43
43
  end
44
44
 
45
- (@delta[:delete] || {}).reverse_each do |table_name, attrs|
45
+ (@delta[:delete] || {}).each do |table_name, attrs|
46
46
  append_drop_table(table_name, attrs, buf)
47
47
  end
48
48
 
@@ -47,6 +47,14 @@ module Ridgepole
47
47
 
48
48
  delta[:delete] ||= {}
49
49
  delta[:delete][table_name] = from_attrs
50
+
51
+ foreign_keys = from_attrs.fetch(:foreign_keys, {})
52
+ next if foreign_keys.empty?
53
+
54
+ table_delta = {}
55
+ scan_foreign_keys_change(foreign_keys, {}, table_delta, @options)
56
+ delta[:change] ||= {}
57
+ delta[:change][table_name] = table_delta
50
58
  end
51
59
  end
52
60
 
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'tsort'
4
-
5
3
  module Ridgepole
6
4
  class DSLParser
7
5
  def initialize(options = {})
@@ -12,11 +10,7 @@ module Ridgepole
12
10
  definition, execute = Context.eval(dsl, opts)
13
11
  check_orphan_index(definition)
14
12
  check_orphan_foreign_key(definition)
15
- sorted_definition = {}
16
- DependencyGraph.new(definition).tsort_each do |table_name|
17
- sorted_definition[table_name] = definition[table_name]
18
- end
19
- [sorted_definition, execute]
13
+ [definition, execute]
20
14
  end
21
15
 
22
16
  private
@@ -32,22 +26,5 @@ module Ridgepole
32
26
  raise "Table `#{table_name}` to create the foreign key is not defined: #{attrs[:foreign_keys].keys.join(',')}" if attrs[:foreign_keys] && !(attrs[:definition])
33
27
  end
34
28
  end
35
-
36
- class DependencyGraph
37
- include TSort
38
-
39
- def initialize(definition)
40
- @definition = definition
41
- end
42
-
43
- def tsort_each_child(table_name, &block)
44
- keys = @definition[table_name].fetch(:foreign_keys, {})
45
- keys.each_value { |v| block.call(v[:to_table]) }
46
- end
47
-
48
- def tsort_each_node(&block)
49
- @definition.each_key(&block)
50
- end
51
- end
52
29
  end
53
30
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Ridgepole
4
- VERSION = '0.8.2'
4
+ VERSION = '0.8.3'
5
5
  end
@@ -60,29 +60,36 @@ describe 'Ridgepole::Client#diff -> migrate' do
60
60
  context 'when drop fk when drop table' do
61
61
  let(:dsl) do
62
62
  erbh(<<-ERB)
63
- create_table "0_parent", <%= i cond('>= 5.1',id: :integer) %>, force: :cascade do |t|
63
+ create_table "users", <%= i cond('>= 5.1',id: :integer) %>, force: :cascade do |t|
64
+ t.integer "invitation_id"
65
+ t.index ["invitation_id"], name: "idx_invitation_id", <%= i cond(5.0, using: :btree) %>
64
66
  end
65
67
 
66
- create_table "1_child", force: :cascade do |t|
67
- t.integer "0_parent_id"
68
- t.index ["0_parent_id"], name: "par_id", <%= i cond(5.0, using: :btree) %>
68
+ add_foreign_key "users", "invitations", name: "users_ibfk"
69
+
70
+ create_table "invitations", <%= i cond('>= 5.1',id: :integer) %>, force: :cascade do |t|
71
+ t.integer "user_id"
72
+ t.index ["user_id"], name: "idx_user_id", <%= i cond(5.0, using: :btree) %>
69
73
  end
70
74
 
71
- add_foreign_key "1_child", "0_parent", name: "child_ibfk_1"
75
+ add_foreign_key "invitations", "users", name: "invitations_ibfk"
72
76
  ERB
73
77
  end
74
78
 
75
79
  let(:sorted_dsl) do
76
80
  erbh(<<-ERB)
77
- create_table "0_parent", <%= i cond('>= 5.1',id: :integer) %>, force: :cascade do |t|
81
+ create_table "invitations", <%= i cond('>= 5.1',id: :integer) %>, force: :cascade do |t|
82
+ t.integer "user_id"
83
+ t.index ["user_id"], name: "idx_user_id", <%= i cond(5.0, using: :btree) %>
78
84
  end
79
85
 
80
- create_table "1_child", force: :cascade do |t|
81
- t.integer "0_parent_id"
82
- t.index ["0_parent_id"], name: "par_id", <%= i cond(5.0, using: :btree) %>
86
+ create_table "users", <%= i cond('>= 5.1',id: :integer) %>, force: :cascade do |t|
87
+ t.integer "invitation_id"
88
+ t.index ["invitation_id"], name: "idx_invitation_id", <%= i cond(5.0, using: :btree) %>
83
89
  end
84
90
 
85
- add_foreign_key "1_child", "0_parent", name: "child_ibfk_1"
91
+ add_foreign_key "invitations", "users", name: "invitations_ibfk"
92
+ add_foreign_key "users", "invitations", name: "users_ibfk"
86
93
  ERB
87
94
  end
88
95
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ridgepole
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.2
4
+ version: 0.8.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Genki Sugawara
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-09-12 00:00:00.000000000 Z
11
+ date: 2019-09-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -442,7 +442,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
442
442
  - !ruby/object:Gem::Version
443
443
  version: '0'
444
444
  requirements: []
445
- rubygems_version: 3.0.4
445
+ rubygems_version: 3.0.3
446
446
  signing_key:
447
447
  specification_version: 4
448
448
  summary: Ridgepole is a tool to manage DB schema.