Skip to content

Commit

Permalink
Merge abcacbc into 2aefad2
Browse files Browse the repository at this point in the history
  • Loading branch information
abicky committed Sep 17, 2019
2 parents 2aefad2 + abcacbc commit 0a5ef40
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 35 deletions.
2 changes: 1 addition & 1 deletion lib/ridgepole/delta.rb
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ def script
append_change(table_name, attrs, buf, pre_buf_for_fk, post_buf_for_fk)
end

(@delta[:delete] || {}).reverse_each do |table_name, attrs|
(@delta[:delete] || {}).each do |table_name, attrs|
append_drop_table(table_name, attrs, buf)
end

Expand Down
8 changes: 8 additions & 0 deletions lib/ridgepole/diff.rb
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,14 @@ def diff(from, to, options = {})

delta[:delete] ||= {}
delta[:delete][table_name] = from_attrs

foreign_keys = from_attrs.fetch(:foreign_keys, {})
next if foreign_keys.empty?

table_delta = {}
scan_foreign_keys_change(foreign_keys, {}, table_delta, @options)
delta[:change] ||= {}
delta[:change][table_name] = table_delta
end
end

Expand Down
25 changes: 1 addition & 24 deletions lib/ridgepole/dsl_parser.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
# frozen_string_literal: true

require 'tsort'

module Ridgepole
class DSLParser
def initialize(options = {})
Expand All @@ -12,11 +10,7 @@ def parse(dsl, opts = {})
definition, execute = Context.eval(dsl, opts)
check_orphan_index(definition)
check_orphan_foreign_key(definition)
sorted_definition = {}
DependencyGraph.new(definition).tsort_each do |table_name|
sorted_definition[table_name] = definition[table_name]
end
[sorted_definition, execute]
[definition, execute]
end

private
Expand All @@ -32,22 +26,5 @@ def check_orphan_foreign_key(definition)
raise "Table `#{table_name}` to create the foreign key is not defined: #{attrs[:foreign_keys].keys.join(',')}" if attrs[:foreign_keys] && !(attrs[:definition])
end
end

class DependencyGraph
include TSort

def initialize(definition)
@definition = definition
end

def tsort_each_child(table_name, &block)
keys = @definition[table_name].fetch(:foreign_keys, {})
keys.each_value { |v| block.call(v[:to_table]) }
end

def tsort_each_node(&block)
@definition.each_key(&block)
end
end
end
end
27 changes: 17 additions & 10 deletions spec/mysql/fk/migrate_drop_fk_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -60,29 +60,36 @@
context 'when drop fk when drop table' do
let(:dsl) do
erbh(<<-ERB)
create_table "0_parent", <%= i cond('>= 5.1',id: :integer) %>, force: :cascade do |t|
create_table "users", <%= i cond('>= 5.1',id: :integer) %>, force: :cascade do |t|
t.integer "invitation_id"
t.index ["invitation_id"], name: "idx_invitation_id", <%= i cond(5.0, using: :btree) %>
end
create_table "1_child", force: :cascade do |t|
t.integer "0_parent_id"
t.index ["0_parent_id"], name: "par_id", <%= i cond(5.0, using: :btree) %>
add_foreign_key "users", "invitations", name: "users_ibfk"
create_table "invitations", <%= i cond('>= 5.1',id: :integer) %>, force: :cascade do |t|
t.integer "user_id"
t.index ["user_id"], name: "idx_user_id", <%= i cond(5.0, using: :btree) %>
end
add_foreign_key "1_child", "0_parent", name: "child_ibfk_1"
add_foreign_key "invitations", "users", name: "invitations_ibfk"
ERB
end

let(:sorted_dsl) do
erbh(<<-ERB)
create_table "0_parent", <%= i cond('>= 5.1',id: :integer) %>, force: :cascade do |t|
create_table "invitations", <%= i cond('>= 5.1',id: :integer) %>, force: :cascade do |t|
t.integer "user_id"
t.index ["user_id"], name: "idx_user_id", <%= i cond(5.0, using: :btree) %>
end
create_table "1_child", force: :cascade do |t|
t.integer "0_parent_id"
t.index ["0_parent_id"], name: "par_id", <%= i cond(5.0, using: :btree) %>
create_table "users", <%= i cond('>= 5.1',id: :integer) %>, force: :cascade do |t|
t.integer "invitation_id"
t.index ["invitation_id"], name: "idx_invitation_id", <%= i cond(5.0, using: :btree) %>
end
add_foreign_key "1_child", "0_parent", name: "child_ibfk_1"
add_foreign_key "invitations", "users", name: "invitations_ibfk"
add_foreign_key "users", "invitations", name: "users_ibfk"
ERB
end

Expand Down

0 comments on commit 0a5ef40

Please sign in to comment.