class SqlServer

Attributes

address[R]
database[R]
name[R]
password[R]
username[R]

Public Class Methods

new(name, address, database, username, password) click to toggle source
# File lib/migsql/sqlserver.rb, line 7
def initialize(name, address, database, username, password)
  @name     = name
  @address  = address
  @database = database
  @username = username
  @password = password
end

Public Instance Methods

apply_migration(path) click to toggle source
# File lib/migsql/sqlserver.rb, line 74
def apply_migration(path)
  client = get_client
  sql    = File.read(path)
  begin
    sql = parse_sql(sql)
    sql.each do |statement|
      client.execute(statement).each
    end
  rescue Exception => e
    puts "Failed to apply migration from #{path}!".red
    raise e
  end
end
get_client() click to toggle source
# File lib/migsql/sqlserver.rb, line 33
def get_client
  require 'tiny_tds'
  TinyTds::Client.new(
    :username => username,
    :password => password,
    :host     => address,
    :database => database
  )
end
get_migration_status() click to toggle source
# File lib/migsql/sqlserver.rb, line 43
def get_migration_status
  client = get_client
  begin
    results = client.execute('SELECT migration FROM _migration')
    result = results.each(:first => true)[0]['migration']
    result = '0' if result.length == 0
  rescue
    result = '0'
  end
  result
end
get_sql(name) click to toggle source
# File lib/migsql/sqlserver.rb, line 17
def get_sql(name)
  File.read("#{File.dirname(__FILE__)}/../../sql/#{name}.sql")
end
parse_sql(sql) click to toggle source

This method will parse some SSMS stuff, such as GO

# File lib/migsql/sqlserver.rb, line 70
def parse_sql(sql)
  sql.split(/go\n/i)
end
remove_migration() click to toggle source
# File lib/migsql/sqlserver.rb, line 64
def remove_migration
  client = get_client
  client.execute('DROP TABLE _migration')
end
set_migration_status(to) click to toggle source
# File lib/migsql/sqlserver.rb, line 55
def set_migration_status(to)
  client = get_client
  sql = [
    get_sql('create_migration_table'),
    "UPDATE _migration SET migration = '#{to}'"
  ].join(' ')
  client.execute(sql).each
end