Clean up module usage. There's no need to use InstanceMethods -- normal Ruby modules and includes will work fine here.
This commit is contained in:
parent
a41050c2b5
commit
b5261d0225
|
@ -2,5 +2,5 @@ require "active_record/connection_adapters/mysql2_adapter"
|
||||||
require "activerecord-import/adapters/mysql_adapter"
|
require "activerecord-import/adapters/mysql_adapter"
|
||||||
|
|
||||||
class ActiveRecord::ConnectionAdapters::Mysql2Adapter
|
class ActiveRecord::ConnectionAdapters::Mysql2Adapter
|
||||||
include ActiveRecord::Import::MysqlAdapter::InstanceMethods
|
include ActiveRecord::Import::MysqlAdapter
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,5 +2,5 @@ require "active_record/connection_adapters/mysql_adapter"
|
||||||
require "activerecord-import/adapters/mysql_adapter"
|
require "activerecord-import/adapters/mysql_adapter"
|
||||||
|
|
||||||
class ActiveRecord::ConnectionAdapters::MysqlAdapter
|
class ActiveRecord::ConnectionAdapters::MysqlAdapter
|
||||||
include ActiveRecord::Import::MysqlAdapter::InstanceMethods
|
include ActiveRecord::Import::MysqlAdapter
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,6 +2,6 @@ require "active_record/connection_adapters/postgresql_adapter"
|
||||||
require "activerecord-import/adapters/postgresql_adapter"
|
require "activerecord-import/adapters/postgresql_adapter"
|
||||||
|
|
||||||
class ActiveRecord::ConnectionAdapters::PostgreSQLAdapter
|
class ActiveRecord::ConnectionAdapters::PostgreSQLAdapter
|
||||||
include ActiveRecord::Import::PostgreSQLAdapter::InstanceMethods
|
include ActiveRecord::Import::PostgreSQLAdapter
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,6 @@ require "active_record/connection_adapters/sqlite3_adapter"
|
||||||
require "activerecord-import/adapters/sqlite3_adapter"
|
require "activerecord-import/adapters/sqlite3_adapter"
|
||||||
|
|
||||||
class ActiveRecord::ConnectionAdapters::Sqlite3Adapter
|
class ActiveRecord::ConnectionAdapters::Sqlite3Adapter
|
||||||
include ActiveRecord::Import::Sqlite3Adapter::InstanceMethods
|
include ActiveRecord::Import::Sqlite3Adapter
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,59 +1,53 @@
|
||||||
module ActiveRecord::Import::MysqlAdapter
|
module ActiveRecord::Import::MysqlAdapter
|
||||||
module InstanceMethods
|
include ActiveRecord::Import::ImportSupport
|
||||||
def self.included(klass)
|
include ActiveRecord::Import::OnDuplicateKeyUpdateSupport
|
||||||
klass.instance_eval do
|
|
||||||
include ActiveRecord::Import::ImportSupport
|
|
||||||
include ActiveRecord::Import::OnDuplicateKeyUpdateSupport
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# Returns the maximum number of bytes that the server will allow
|
|
||||||
# in a single packet
|
|
||||||
def max_allowed_packet # :nodoc:
|
|
||||||
result = execute( "SHOW VARIABLES like 'max_allowed_packet';" )
|
|
||||||
# original Mysql gem responds to #fetch_row while Mysql2 responds to #first
|
|
||||||
val = result.respond_to?(:fetch_row) ? result.fetch_row[1] : result.first[1]
|
|
||||||
val.to_i
|
|
||||||
end
|
|
||||||
|
|
||||||
# Returns a generated ON DUPLICATE KEY UPDATE statement given the passed
|
|
||||||
# in +args+.
|
|
||||||
def sql_for_on_duplicate_key_update( table_name, *args ) # :nodoc:
|
|
||||||
sql = ' ON DUPLICATE KEY UPDATE '
|
|
||||||
arg = args.first
|
|
||||||
if arg.is_a?( Array )
|
|
||||||
sql << sql_for_on_duplicate_key_update_as_array( table_name, arg )
|
|
||||||
elsif arg.is_a?( Hash )
|
|
||||||
sql << sql_for_on_duplicate_key_update_as_hash( table_name, arg )
|
|
||||||
elsif arg.is_a?( String )
|
|
||||||
sql << arg
|
|
||||||
else
|
|
||||||
raise ArgumentError.new( "Expected Array or Hash" )
|
|
||||||
end
|
|
||||||
sql
|
|
||||||
end
|
|
||||||
|
|
||||||
def sql_for_on_duplicate_key_update_as_array( table_name, arr ) # :nodoc:
|
# Returns the maximum number of bytes that the server will allow
|
||||||
results = arr.map do |column|
|
# in a single packet
|
||||||
qc = quote_column_name( column )
|
def max_allowed_packet # :nodoc:
|
||||||
"#{table_name}.#{qc}=VALUES(#{qc})"
|
result = execute( "SHOW VARIABLES like 'max_allowed_packet';" )
|
||||||
end
|
# original Mysql gem responds to #fetch_row while Mysql2 responds to #first
|
||||||
results.join( ',' )
|
val = result.respond_to?(:fetch_row) ? result.fetch_row[1] : result.first[1]
|
||||||
end
|
val.to_i
|
||||||
|
|
||||||
def sql_for_on_duplicate_key_update_as_hash( table_name, hsh ) # :nodoc:
|
|
||||||
sql = ' ON DUPLICATE KEY UPDATE '
|
|
||||||
results = hsh.map do |column1, column2|
|
|
||||||
qc1 = quote_column_name( column1 )
|
|
||||||
qc2 = quote_column_name( column2 )
|
|
||||||
"#{table_name}.#{qc1}=VALUES( #{qc2} )"
|
|
||||||
end
|
|
||||||
results.join( ',')
|
|
||||||
end
|
|
||||||
|
|
||||||
#return true if the statement is a duplicate key record error
|
|
||||||
def duplicate_key_update_error?(exception)# :nodoc:
|
|
||||||
exception.is_a?(ActiveRecord::StatementInvalid) && exception.to_s.include?('Duplicate entry')
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
# Returns a generated ON DUPLICATE KEY UPDATE statement given the passed
|
||||||
|
# in +args+.
|
||||||
|
def sql_for_on_duplicate_key_update( table_name, *args ) # :nodoc:
|
||||||
|
sql = ' ON DUPLICATE KEY UPDATE '
|
||||||
|
arg = args.first
|
||||||
|
if arg.is_a?( Array )
|
||||||
|
sql << sql_for_on_duplicate_key_update_as_array( table_name, arg )
|
||||||
|
elsif arg.is_a?( Hash )
|
||||||
|
sql << sql_for_on_duplicate_key_update_as_hash( table_name, arg )
|
||||||
|
elsif arg.is_a?( String )
|
||||||
|
sql << arg
|
||||||
|
else
|
||||||
|
raise ArgumentError.new( "Expected Array or Hash" )
|
||||||
|
end
|
||||||
|
sql
|
||||||
|
end
|
||||||
|
|
||||||
|
def sql_for_on_duplicate_key_update_as_array( table_name, arr ) # :nodoc:
|
||||||
|
results = arr.map do |column|
|
||||||
|
qc = quote_column_name( column )
|
||||||
|
"#{table_name}.#{qc}=VALUES(#{qc})"
|
||||||
|
end
|
||||||
|
results.join( ',' )
|
||||||
|
end
|
||||||
|
|
||||||
|
def sql_for_on_duplicate_key_update_as_hash( table_name, hsh ) # :nodoc:
|
||||||
|
sql = ' ON DUPLICATE KEY UPDATE '
|
||||||
|
results = hsh.map do |column1, column2|
|
||||||
|
qc1 = quote_column_name( column1 )
|
||||||
|
qc2 = quote_column_name( column2 )
|
||||||
|
"#{table_name}.#{qc1}=VALUES( #{qc2} )"
|
||||||
|
end
|
||||||
|
results.join( ',')
|
||||||
|
end
|
||||||
|
|
||||||
|
#return true if the statement is a duplicate key record error
|
||||||
|
def duplicate_key_update_error?(exception)# :nodoc:
|
||||||
|
exception.is_a?(ActiveRecord::StatementInvalid) && exception.to_s.include?('Duplicate entry')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
|
@ -1,13 +1,7 @@
|
||||||
module ActiveRecord::Import::PostgreSQLAdapter
|
module ActiveRecord::Import::PostgreSQLAdapter
|
||||||
module InstanceMethods
|
include ActiveRecord::Import::ImportSupport
|
||||||
def self.included(klass)
|
|
||||||
klass.instance_eval do
|
|
||||||
include ActiveRecord::Import::ImportSupport
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def next_value_for_sequence(sequence_name)
|
def next_value_for_sequence(sequence_name)
|
||||||
%{nextval('#{sequence_name}')}
|
%{nextval('#{sequence_name}')}
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
module ActiveRecord::Import::Sqlite3Adapter
|
module ActiveRecord::Import::Sqlite3Adapter
|
||||||
module InstanceMethods
|
def next_value_for_sequence(sequence_name)
|
||||||
def next_value_for_sequence(sequence_name)
|
%{nextval('#{sequence_name}')}
|
||||||
%{nextval('#{sequence_name}')}
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue