提交 9a5b1fad 编写于 作者: E Edouard CHIN

Combine delete and insert statements in the same query

上级 22a26d24
......@@ -372,12 +372,13 @@ def insert_fixtures_set(fixture_set, tables_to_delete = [])
build_fixture_sql(fixtures, table_name)
end.compact
total_sql = Array.wrap(combine_multi_statements(fixture_inserts, tables_to_delete))
table_deletes = tables_to_delete.map { |table| "DELETE FROM #{quote_table_name table}".dup }
total_sql = Array.wrap(combine_multi_statements(table_deletes + fixture_inserts))
disable_referential_integrity do
transaction(requires_new: true) do
total_sql.each do |sql|
execute sql, "Fixtures Insert"
execute sql, "Fixtures Load"
yield if block_given?
end
end
......@@ -445,10 +446,8 @@ def build_fixture_sql(fixtures, table_name)
manager.to_sql
end
def combine_multi_statements(fixture_inserts, tables_to_delete)
tables_to_delete.each { |table| delete "DELETE FROM #{quote_table_name(table)}", "Fixture Delete" }
fixture_inserts.join(";\n")
def combine_multi_statements(total_sql)
total_sql.join(";\n")
end
# Returns a subquery for the given key using the join information.
......
......@@ -545,14 +545,12 @@ def insert_fixtures_set(fixture_set, tables_to_delete = [])
private
def combine_multi_statements(fixture_inserts, tables_to_delete)
super
fixture_inserts.each_with_object([]) do |sql, total_sql|
previous_packet = total_sql.last
def combine_multi_statements(total_sql)
total_sql.each_with_object([]) do |sql, total_sql_chunks|
previous_packet = total_sql_chunks.last
sql << ";\n"
if max_allowed_packet_reached?(sql, previous_packet) || total_sql.empty?
total_sql << sql
if max_allowed_packet_reached?(sql, previous_packet) || total_sql_chunks.empty?
total_sql_chunks << sql
else
previous_packet << sql
end
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册