Skip to content

Commit 73836f5

Browse files
committed
Batch SQL statements when creating tables
Ref: https://github.com/rails/rails/pull/57000/files
1 parent 0ea0486 commit 73836f5

1 file changed

Lines changed: 21 additions & 17 deletions

File tree

lib/active_record/connection_adapters/sqlserver/schema_statements.rb

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -10,25 +10,29 @@ def create_table(table_name, **options)
1010
res
1111
end
1212

13-
def drop_table(*table_names, **options)
14-
table_names.each do |table_name|
15-
# Mimic CASCADE option as best we can.
16-
if options[:force] == :cascade
17-
execute_procedure(:sp_fkeys, pktable_name: table_name).each do |fkdata|
18-
fktable = fkdata["FKTABLE_NAME"]
19-
fkcolmn = fkdata["FKCOLUMN_NAME"]
20-
pktable = fkdata["PKTABLE_NAME"]
21-
pkcolmn = fkdata["PKCOLUMN_NAME"]
22-
remove_foreign_key fktable, name: fkdata["FK_NAME"]
23-
execute "DELETE FROM #{quote_table_name(fktable)} WHERE #{quote_column_name(fkcolmn)} IN ( SELECT #{quote_column_name(pkcolmn)} FROM #{quote_table_name(pktable)} )"
24-
end
25-
end
26-
if options[:if_exists] && version_year < 2016
27-
execute "IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = #{quote(table_name)}) DROP TABLE #{quote_table_name(table_name)}", "SCHEMA"
28-
else
29-
super
13+
def drop_table_sql(table_name, if_exists: nil, force: nil, **)
14+
sqls = []
15+
16+
# Mimic CASCADE option as best we can.
17+
if force == :cascade
18+
execute_procedure(:sp_fkeys, pktable_name: table_name).each do |fkdata|
19+
fktable = fkdata["FKTABLE_NAME"]
20+
fkcolmn = fkdata["FKCOLUMN_NAME"]
21+
pktable = fkdata["PKTABLE_NAME"]
22+
pkcolmn = fkdata["PKCOLUMN_NAME"]
23+
remove_foreign_key fktable, name: fkdata["FK_NAME"]
24+
25+
sqls << "DELETE FROM #{quote_table_name(fktable)} WHERE #{quote_column_name(fkcolmn)} IN ( SELECT #{quote_column_name(pkcolmn)} FROM #{quote_table_name(pktable)} )"
3026
end
3127
end
28+
29+
if if_exists && version_year < 2016
30+
sqls << "IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = #{quote(table_name)}) DROP TABLE #{quote_table_name(table_name)}"
31+
else
32+
sqls << super
33+
end
34+
35+
sqls.join("; ")
3236
end
3337

3438
def indexes(table_name)

0 commit comments

Comments
 (0)