class ActiveRecord::Tasks::SQLServerDatabaseTasks

Constants

DEFAULT_COLLATION

Public Class Methods

new(configuration) click to toggle source
# File lib/active_record/tasks/sqlserver_database_tasks.rb, line 16
def initialize(configuration)
  @configuration = configuration
end

Public Instance Methods

charset() click to toggle source
# File lib/active_record/tasks/sqlserver_database_tasks.rb, line 37
def charset
  connection.charset
end
collation() click to toggle source
# File lib/active_record/tasks/sqlserver_database_tasks.rb, line 41
def collation
  connection.collation
end
create(master_established = false) click to toggle source
# File lib/active_record/tasks/sqlserver_database_tasks.rb, line 20
def create(master_established = false)
  establish_master_connection unless master_established
  connection.create_database configuration['database'], configuration.merge('collation' => default_collation)
  establish_connection configuration
rescue ActiveRecord::StatementInvalid => error
  if /database .* already exists/i === error.message
    raise DatabaseAlreadyExists
  else
    raise
  end
end
drop() click to toggle source
# File lib/active_record/tasks/sqlserver_database_tasks.rb, line 32
def drop
  establish_master_connection
  connection.drop_database configuration['database']
end
purge() click to toggle source
# File lib/active_record/tasks/sqlserver_database_tasks.rb, line 45
def purge
  clear_active_connections!
  drop
  create true
end
structure_dump(filename) click to toggle source
# File lib/active_record/tasks/sqlserver_database_tasks.rb, line 51
def structure_dump(filename)
  command = [
    "defncopy",
    "-S #{Shellwords.escape(configuration['host'])}",
    "-D #{Shellwords.escape(configuration['database'])}",
    "-U #{Shellwords.escape(configuration['username'])}",
    "-P #{Shellwords.escape(configuration['password'])}",
    "-o #{Shellwords.escape(filename)}",
  ]
  table_args = connection.tables.map { |t| Shellwords.escape(t) }
  command.concat(table_args)
  view_args = connection.views.map { |v| Shellwords.escape(v) }
  command.concat(view_args)
  raise 'Error dumping database' unless Kernel.system(command.join(' '))
  dump = File.read(filename)
  dump.gsub!(/^USE .*$\nGO\n/, '')                      # Strip db USE statements
  dump.gsub!(/^GO\n/, '')                               # Strip db GO statements
  dump.gsub!(/nvarchar\(8000\)/, 'nvarchar(4000)')      # Fix nvarchar(8000) column defs
  dump.gsub!(/nvarchar\(-1\)/, 'nvarchar(max)')         # Fix nvarchar(-1) column defs
  dump.gsub!(/text\(\d+\)/, 'text')                     # Fix text(16) column defs
  File.open(filename, "w") { |file| file.puts dump }
end
structure_load(filename) click to toggle source
# File lib/active_record/tasks/sqlserver_database_tasks.rb, line 74
def structure_load(filename)
  connection.execute File.read(filename)
end

Private Instance Methods

configuration() click to toggle source
# File lib/active_record/tasks/sqlserver_database_tasks.rb, line 81
def configuration
  @configuration
end
default_collation() click to toggle source
# File lib/active_record/tasks/sqlserver_database_tasks.rb, line 85
def default_collation
  configuration['collation'] || DEFAULT_COLLATION
end
establish_master_connection() click to toggle source
# File lib/active_record/tasks/sqlserver_database_tasks.rb, line 89
def establish_master_connection
  establish_connection configuration.merge('database' => 'master')
end