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) ⇒ Mysql2AdapterWithoutLock

Returns a new instance of Mysql2AdapterWithoutLock.



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

def initialize(mysql2_adapter)
  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



16
17
18
19
20
21
# File 'lib/mysql_online_migrations/mysql2_adapter_without_lock.rb', line 16

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



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

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"
  "#{comma_delimiter} LOCK=NONE"
end

#original_executeObject



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

alias_method :original_execute, :execute