Skip to content

Commit 144b89c

Browse files
committed
Create a private #do_execute method that uses the underlying DBI #do and move many one off commands to use it.
1 parent a3ebb11 commit 144b89c

File tree

1 file changed

+27
-21
lines changed

1 file changed

+27
-21
lines changed

lib/active_record/connection_adapters/sqlserver_adapter.rb

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -231,10 +231,10 @@ def quoted_date(value)
231231
# REFERENTIAL INTEGRITY ====================================#
232232

233233
def disable_referential_integrity(&block)
234-
execute "EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'"
234+
do_execute "EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'"
235235
yield
236236
ensure
237-
execute "EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL'"
237+
do_execute "EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL'"
238238
end
239239

240240
# CONNECTION MANAGEMENT ====================================#
@@ -279,15 +279,15 @@ def execute(sql, name = nil, &block)
279279
end
280280

281281
def begin_db_transaction
282-
execute "BEGIN TRANSACTION"
282+
do_execute "BEGIN TRANSACTION"
283283
end
284284

285285
def commit_db_transaction
286-
execute "COMMIT TRANSACTION"
286+
do_execute "COMMIT TRANSACTION"
287287
end
288288

289289
def rollback_db_transaction
290-
execute "ROLLBACK TRANSACTION" rescue nil
290+
do_execute "ROLLBACK TRANSACTION" rescue nil
291291
end
292292

293293
def add_limit_offset!(sql, options)
@@ -435,7 +435,7 @@ def create_table(table_name, options = {})
435435
end
436436

437437
def rename_table(table_name, new_name)
438-
execute "EXEC sp_rename '#{table_name}', '#{new_name}'"
438+
do_execute "EXEC sp_rename '#{table_name}', '#{new_name}'"
439439
end
440440

441441
def drop_table(table_name, options = {})
@@ -453,7 +453,7 @@ def remove_column(table_name, *column_names)
453453
remove_check_constraints(table_name, column_name)
454454
remove_default_constraint(table_name, column_name)
455455
remove_indexes(table_name, column_name)
456-
execute "ALTER TABLE #{quote_table_name(table_name)} DROP COLUMN #{quote_column_name(column_name)}"
456+
do_execute "ALTER TABLE #{quote_table_name(table_name)} DROP COLUMN #{quote_column_name(column_name)}"
457457
end
458458
remove_sqlserver_columns_cache_for(table_name)
459459
end
@@ -467,24 +467,24 @@ def change_column(table_name, column_name, type, options = {})
467467
remove_default_constraint(table_name, column_name)
468468
sql_commands << "ALTER TABLE #{quote_table_name(table_name)} ADD CONSTRAINT #{default_name(table_name,column_name)} DEFAULT #{quote(options[:default])} FOR #{quote_column_name(column_name)}"
469469
end
470-
sql_commands.each { |c| execute(c) }
470+
sql_commands.each { |c| do_execute(c) }
471471
remove_sqlserver_columns_cache_for(table_name)
472472
end
473473

474474
def change_column_default(table_name, column_name, default)
475475
remove_default_constraint(table_name, column_name)
476-
execute "ALTER TABLE #{quote_table_name(table_name)} ADD CONSTRAINT #{default_name(table_name, column_name)} DEFAULT #{quote(default)} FOR #{quote_column_name(column_name)}"
476+
do_execute "ALTER TABLE #{quote_table_name(table_name)} ADD CONSTRAINT #{default_name(table_name, column_name)} DEFAULT #{quote(default)} FOR #{quote_column_name(column_name)}"
477477
remove_sqlserver_columns_cache_for(table_name)
478478
end
479479

480480
def rename_column(table_name, column_name, new_column_name)
481481
column_for(table_name,column_name)
482-
execute "EXEC sp_rename '#{table_name}.#{column_name}', '#{new_column_name}', 'COLUMN'"
482+
do_execute "EXEC sp_rename '#{table_name}.#{column_name}', '#{new_column_name}', 'COLUMN'"
483483
remove_sqlserver_columns_cache_for(table_name)
484484
end
485485

486486
def remove_index(table_name, options = {})
487-
execute "DROP INDEX #{table_name}.#{quote_column_name(index_name(table_name, options))}"
487+
do_execute "DROP INDEX #{table_name}.#{quote_column_name(index_name(table_name, options))}"
488488
end
489489

490490
def type_to_sql(type, limit = nil, precision = nil, scale = nil)
@@ -513,11 +513,11 @@ def add_order_by_for_association_limiting!(sql, options)
513513
def change_column_null(table_name, column_name, null, default = nil)
514514
column = column_for(table_name,column_name)
515515
unless null || default.nil?
516-
execute("UPDATE #{quote_table_name(table_name)} SET #{quote_column_name(column_name)}=#{quote(default)} WHERE #{quote_column_name(column_name)} IS NULL")
516+
do_execute("UPDATE #{quote_table_name(table_name)} SET #{quote_column_name(column_name)}=#{quote(default)} WHERE #{quote_column_name(column_name)} IS NULL")
517517
end
518518
sql = "ALTER TABLE #{table_name} ALTER COLUMN #{quote_column_name(column_name)} #{type_to_sql column.type, column.limit, column.precision, column.scale}"
519519
sql << " NOT NULL" unless null
520-
execute sql
520+
do_execute sql
521521
end
522522

523523
def pk_and_sequence_for(table_name)
@@ -530,19 +530,19 @@ def pk_and_sequence_for(table_name)
530530
def recreate_database(name)
531531
existing_database = current_database.to_s
532532
if name.to_s == existing_database
533-
execute 'USE master'
533+
do_execute 'USE master'
534534
end
535535
drop_database(name)
536536
create_database(name)
537537
ensure
538-
execute "USE #{existing_database}" if name.to_s == existing_database
538+
do_execute "USE #{existing_database}" if name.to_s == existing_database
539539
end
540540

541541
def drop_database(name)
542542
retry_count = 0
543543
max_retries = 1
544544
begin
545-
execute "DROP DATABASE #{name}"
545+
do_execute "DROP DATABASE #{name}"
546546
rescue ActiveRecord::StatementInvalid => err
547547
# Remove existing connections and rollback any transactions if we received the message
548548
# 'Cannot drop the database 'test' because it is currently in use'
@@ -558,7 +558,7 @@ def drop_database(name)
558558
end
559559

560560
def create_database(name)
561-
execute "CREATE DATABASE #{name}"
561+
do_execute "CREATE DATABASE #{name}"
562562
end
563563

564564
def current_database
@@ -568,7 +568,7 @@ def current_database
568568
def remove_database_connections_and_rollback(name)
569569
# This should disconnect all other users and rollback any transactions for SQL 2000 and 2005
570570
# http://sqlserver2000.databases.aspfaq.com/how-do-i-drop-a-sql-server-database.html
571-
execute "ALTER DATABASE #{name} SET SINGLE_USER WITH ROLLBACK IMMEDIATE"
571+
do_execute "ALTER DATABASE #{name} SET SINGLE_USER WITH ROLLBACK IMMEDIATE"
572572
end
573573

574574

@@ -610,6 +610,12 @@ def raw_execute(sql, name = nil, &block)
610610
end
611611
end
612612

613+
def do_execute(sql,name=nil)
614+
log(sql, name || 'EXECUTE') do
615+
raw_connection.do(sql)
616+
end
617+
end
618+
613619
def raw_select(sql, name = nil)
614620
handle = raw_execute(sql,name)
615621
fields = handle.column_names
@@ -653,14 +659,14 @@ def add_limit_offset_for_association_limiting!(sql, options)
653659
def remove_check_constraints(table_name, column_name)
654660
constraints = select_values("SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE where TABLE_NAME = '#{quote_string(table_name)}' and COLUMN_NAME = '#{quote_string(column_name)}'")
655661
constraints.each do |constraint|
656-
execute "ALTER TABLE #{quote_table_name(table_name)} DROP CONSTRAINT #{quote_column_name(constraint)}"
662+
do_execute "ALTER TABLE #{quote_table_name(table_name)} DROP CONSTRAINT #{quote_column_name(constraint)}"
657663
end
658664
end
659665

660666
def remove_default_constraint(table_name, column_name)
661667
constraints = select_values("SELECT def.name FROM sysobjects def, syscolumns col, sysobjects tab WHERE col.cdefault = def.id AND col.name = '#{quote_string(column_name)}' AND tab.name = '#{quote_string(table_name)}' AND col.id = tab.id")
662668
constraints.each do |constraint|
663-
execute "ALTER TABLE #{quote_table_name(table_name)} DROP CONSTRAINT #{quote_column_name(constraint)}"
669+
do_execute "ALTER TABLE #{quote_table_name(table_name)} DROP CONSTRAINT #{quote_column_name(constraint)}"
664670
end
665671
end
666672

@@ -685,7 +691,7 @@ def with_identity_insert_enabled(table_name, &block)
685691

686692
def set_identity_insert(table_name, enable = true)
687693
sql = "SET IDENTITY_INSERT #{table_name} #{enable ? 'ON' : 'OFF'}"
688-
log(sql,'IDENTITY_INSERT') { execute(sql) }
694+
do_execute(sql,'IDENTITY_INSERT')
689695
rescue Exception => e
690696
raise ActiveRecordError, "IDENTITY_INSERT could not be turned #{enable ? 'ON' : 'OFF'} for table #{table_name}"
691697
end

0 commit comments

Comments
 (0)