Class: ActiveRecord::ConnectionAdapters::Mysql2AdapterWithoutLock

Inherits:
Mysql2Adapter
  • Object
show all
Defined in:
lib/mysql_online_migrations/mysql2_adapter_without_lock.rb

Constant Summary collapse

OPTIMIZABLE_DDL_REGEX =
/^(alter|create (unique )? ?index|drop index) /i
DDL_WITH_COMMA_REGEX =
/^alter /i
DDL_WITH_LOCK_NONE_REGEX =
/ LOCK=NONE\s*$/i

Instance Method Summary collapse

Constructor Details

#initialize(mysql2_adapter, verbose = false) ⇒ Mysql2AdapterWithoutLock

Returns a new instance of Mysql2AdapterWithoutLock.



9
10
11
12
13
14
15
# File 'lib/mysql_online_migrations/mysql2_adapter_without_lock.rb', line 9

def initialize(mysql2_adapter, verbose = false)
  @verbose = verbose
  params = [:@connection, :@logger, :@connection_options, :@config].map do |sym|
    mysql2_adapter.instance_variable_get(sym)
  end
  super(*params)
end

Instance Method Details

#execute(sql, name = nil) ⇒ Object



18
19
20
21
22
23
# File 'lib/mysql_online_migrations/mysql2_adapter_without_lock.rb', line 18

def execute(sql, name = nil)
  if sql =~ OPTIMIZABLE_DDL_REGEX
    sql = "#{sql} #{lock_none_statement(sql)}"
  end
  original_execute(sql, name)
end

#lock_none_statement(sql) ⇒ Object



25
26
27
28
29
30
31
# File 'lib/mysql_online_migrations/mysql2_adapter_without_lock.rb', line 25

def lock_none_statement(sql)
  return "" unless ActiveRecord::Base.mysql_online_migrations
  return "" if sql =~ DDL_WITH_LOCK_NONE_REGEX
  comma_delimiter = (sql =~ DDL_WITH_COMMA_REGEX ? "," : "")
  puts "ONLINE MIGRATION" if @verbose
  "#{comma_delimiter} LOCK=NONE"
end

#original_executeObject



17
# File 'lib/mysql_online_migrations/mysql2_adapter_without_lock.rb', line 17

alias_method :original_execute, :execute