# Source code for the SQLServerAdapter extensions. module ActiveRecord #:nodoc: module ConnectionAdapters #:nodoc: # Adds new functionality to ActiveRecord SQLServerAdapter. class SQLServerAdapter < AbstractAdapter def support_select_into_table? true end # Inserts an INTO table_name clause to the sql_query. def add_select_into_table(new_table_name, sql_query) sql_query.sub(/FROM/i, "INTO #{new_table_name} FROM") end # Copy the specified table. def copy_table(old_table_name, new_table_name) execute add_select_into_table(new_table_name, "SELECT * FROM #{old_table_name}") end protected # Call +bulk_load+, as that method wraps this method. # # Bulk load the data in the specified file. This implementation relies # on bcp being in your PATH. # # Options: # * :ignore -- Ignore the specified number of lines from the source file # * :columns -- Array of column names defining the source file column order # * :fields -- Hash of options for fields: # * :delimited_by -- The field delimiter # * :enclosed_by -- The field enclosure def do_bulk_load(file, table_name, options={}) env_name = options[:env] || RAILS_ENV config = ActiveRecord::Base.configurations[env_name] puts "Loading table \"#{table_name}\" from file \"#{filename}\"" cmd = "bcp \"#{config['database']}.dbo.#{table_name}\" in " + "\"#{filename}\" -S \"#{config['host']}\" -c " + "-t \"#{options[:delimited_by]}\" -b10000 -a8192 -q -E -U \"#{config['username']}\" " + "-P \"#{config['password']}\" -e \"#{filename}.in.errors\"" `#{cmd}` end end end end