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, extra_flags)
click to toggle source
# File lib/active_record/tasks/sqlserver_database_tasks.rb, line 51 def structure_dump(filename, extra_flags) server_arg = "-S #{Shellwords.escape(configuration['host'])}" server_arg += ":#{Shellwords.escape(configuration['port'])}" if configuration['port'] command = [ "defncopy", server_arg, "-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, extra_flags)
click to toggle source
# File lib/active_record/tasks/sqlserver_database_tasks.rb, line 76 def structure_load(filename, extra_flags) connection.execute File.read(filename) end
Private Instance Methods
configuration()
click to toggle source
# File lib/active_record/tasks/sqlserver_database_tasks.rb, line 83 def configuration @configuration end
default_collation()
click to toggle source
# File lib/active_record/tasks/sqlserver_database_tasks.rb, line 87 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 91 def establish_master_connection establish_connection configuration.merge('database' => 'master') end