activerecord-import 0.2.8 → 0.2.9

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.8
1
+ 0.2.9
@@ -2,15 +2,15 @@ class ActiveRecord::Base
2
2
  class << self
3
3
  def establish_connection_with_activerecord_import(*args)
4
4
  establish_connection_without_activerecord_import(*args)
5
- ActiveSupport.run_load_hooks(:active_record_connection_established, connection)
5
+ ActiveSupport.run_load_hooks(:active_record_connection_established, connection_pool)
6
6
  end
7
7
  alias_method_chain :establish_connection, :activerecord_import
8
8
  end
9
9
  end
10
10
 
11
- ActiveSupport.on_load(:active_record_connection_established) do |connection|
12
- if !ActiveRecord.const_defined?(:Import) || !ActiveRecord::Import.respond_to?(:load_from_connection)
11
+ ActiveSupport.on_load(:active_record_connection_established) do |connection_pool|
12
+ if !ActiveRecord.const_defined?(:Import) || !ActiveRecord::Import.respond_to?(:load_from_connection_pool)
13
13
  require File.join File.dirname(__FILE__), "activerecord-import/base"
14
14
  end
15
- ActiveRecord::Import.load_from_connection connection
15
+ ActiveRecord::Import.load_from_connection_pool connection_pool
16
16
  end
@@ -2,5 +2,5 @@ require "active_record/connection_adapters/mysql2_adapter"
2
2
  require "activerecord-import/adapters/mysql_adapter"
3
3
 
4
4
  class ActiveRecord::ConnectionAdapters::Mysql2Adapter
5
- include ActiveRecord::Import::MysqlAdapter::InstanceMethods
6
- end
5
+ include ActiveRecord::Import::MysqlAdapter
6
+ end
@@ -2,5 +2,5 @@ require "active_record/connection_adapters/mysql_adapter"
2
2
  require "activerecord-import/adapters/mysql_adapter"
3
3
 
4
4
  class ActiveRecord::ConnectionAdapters::MysqlAdapter
5
- include ActiveRecord::Import::MysqlAdapter::InstanceMethods
6
- end
5
+ include ActiveRecord::Import::MysqlAdapter
6
+ end
@@ -2,6 +2,6 @@ require "active_record/connection_adapters/postgresql_adapter"
2
2
  require "activerecord-import/adapters/postgresql_adapter"
3
3
 
4
4
  class ActiveRecord::ConnectionAdapters::PostgreSQLAdapter
5
- include ActiveRecord::Import::PostgreSQLAdapter::InstanceMethods
5
+ include ActiveRecord::Import::PostgreSQLAdapter
6
6
  end
7
7
 
@@ -2,6 +2,6 @@ require "active_record/connection_adapters/sqlite3_adapter"
2
2
  require "activerecord-import/adapters/sqlite3_adapter"
3
3
 
4
4
  class ActiveRecord::ConnectionAdapters::Sqlite3Adapter
5
- include ActiveRecord::Import::Sqlite3Adapter::InstanceMethods
5
+ include ActiveRecord::Import::Sqlite3Adapter
6
6
  end
7
7
 
@@ -3,12 +3,6 @@ module ActiveRecord::Import::AbstractAdapter
3
3
  QUERY_OVERHEAD = 8 #This was shown to be true for MySQL, but it's not clear where the overhead is from.
4
4
 
5
5
  module ClassMethods
6
- # Returns the sum of the sizes of the passed in objects. This should
7
- # probably be moved outside this class, but to where?
8
- def sum_sizes( *objects ) # :nodoc:
9
- objects.inject( 0 ){ |sum,o| sum += o.bytesize }
10
- end
11
-
12
6
  def get_insert_value_sets( values, sql_size, max_bytes ) # :nodoc:
13
7
  value_sets = []
14
8
  arr, current_arr_values_size, current_size = [], 0, 0
@@ -51,7 +45,7 @@ module ActiveRecord::Import::AbstractAdapter
51
45
  sql_size = QUERY_OVERHEAD + base_sql.size + post_sql.size
52
46
 
53
47
  # the number of bytes the requested insert statement values will take up
54
- values_in_bytes = self.class.sum_sizes( *values )
48
+ values_in_bytes = values.sum {|value| value.bytesize }
55
49
 
56
50
  # the number of bytes (commas) it will take to comma separate our values
57
51
  comma_separated_bytes = values.size-1
@@ -1,59 +1,53 @@
1
1
  module ActiveRecord::Import::MysqlAdapter
2
- module InstanceMethods
3
- def self.included(klass)
4
- klass.instance_eval do
5
- include ActiveRecord::Import::ImportSupport
6
- include ActiveRecord::Import::OnDuplicateKeyUpdateSupport
7
- end
8
- end
9
-
10
- # Returns the maximum number of bytes that the server will allow
11
- # in a single packet
12
- def max_allowed_packet # :nodoc:
13
- result = execute( "SHOW VARIABLES like 'max_allowed_packet';" )
14
- # original Mysql gem responds to #fetch_row while Mysql2 responds to #first
15
- val = result.respond_to?(:fetch_row) ? result.fetch_row[1] : result.first[1]
16
- val.to_i
17
- end
18
-
19
- # Returns a generated ON DUPLICATE KEY UPDATE statement given the passed
20
- # in +args+.
21
- def sql_for_on_duplicate_key_update( table_name, *args ) # :nodoc:
22
- sql = ' ON DUPLICATE KEY UPDATE '
23
- arg = args.first
24
- if arg.is_a?( Array )
25
- sql << sql_for_on_duplicate_key_update_as_array( table_name, arg )
26
- elsif arg.is_a?( Hash )
27
- sql << sql_for_on_duplicate_key_update_as_hash( table_name, arg )
28
- elsif arg.is_a?( String )
29
- sql << arg
30
- else
31
- raise ArgumentError.new( "Expected Array or Hash" )
32
- end
33
- sql
34
- end
2
+ include ActiveRecord::Import::ImportSupport
3
+ include ActiveRecord::Import::OnDuplicateKeyUpdateSupport
35
4
 
36
- def sql_for_on_duplicate_key_update_as_array( table_name, arr ) # :nodoc:
37
- results = arr.map do |column|
38
- qc = quote_column_name( column )
39
- "#{table_name}.#{qc}=VALUES(#{qc})"
40
- end
41
- results.join( ',' )
42
- end
5
+ # Returns the maximum number of bytes that the server will allow
6
+ # in a single packet
7
+ def max_allowed_packet # :nodoc:
8
+ result = execute( "SHOW VARIABLES like 'max_allowed_packet';" )
9
+ # original Mysql gem responds to #fetch_row while Mysql2 responds to #first
10
+ val = result.respond_to?(:fetch_row) ? result.fetch_row[1] : result.first[1]
11
+ val.to_i
12
+ end
43
13
 
44
- def sql_for_on_duplicate_key_update_as_hash( table_name, hsh ) # :nodoc:
45
- sql = ' ON DUPLICATE KEY UPDATE '
46
- results = hsh.map do |column1, column2|
47
- qc1 = quote_column_name( column1 )
48
- qc2 = quote_column_name( column2 )
49
- "#{table_name}.#{qc1}=VALUES( #{qc2} )"
50
- end
51
- results.join( ',')
14
+ # Returns a generated ON DUPLICATE KEY UPDATE statement given the passed
15
+ # in +args+.
16
+ def sql_for_on_duplicate_key_update( table_name, *args ) # :nodoc:
17
+ sql = ' ON DUPLICATE KEY UPDATE '
18
+ arg = args.first
19
+ if arg.is_a?( Array )
20
+ sql << sql_for_on_duplicate_key_update_as_array( table_name, arg )
21
+ elsif arg.is_a?( Hash )
22
+ sql << sql_for_on_duplicate_key_update_as_hash( table_name, arg )
23
+ elsif arg.is_a?( String )
24
+ sql << arg
25
+ else
26
+ raise ArgumentError.new( "Expected Array or Hash" )
52
27
  end
28
+ sql
29
+ end
53
30
 
54
- #return true if the statement is a duplicate key record error
55
- def duplicate_key_update_error?(exception)# :nodoc:
56
- exception.is_a?(ActiveRecord::StatementInvalid) && exception.to_s.include?('Duplicate entry')
31
+ def sql_for_on_duplicate_key_update_as_array( table_name, arr ) # :nodoc:
32
+ results = arr.map do |column|
33
+ qc = quote_column_name( column )
34
+ "#{table_name}.#{qc}=VALUES(#{qc})"
57
35
  end
36
+ results.join( ',' )
37
+ end
38
+
39
+ def sql_for_on_duplicate_key_update_as_hash( table_name, hsh ) # :nodoc:
40
+ sql = ' ON DUPLICATE KEY UPDATE '
41
+ results = hsh.map do |column1, column2|
42
+ qc1 = quote_column_name( column1 )
43
+ qc2 = quote_column_name( column2 )
44
+ "#{table_name}.#{qc1}=VALUES( #{qc2} )"
45
+ end
46
+ results.join( ',')
47
+ end
48
+
49
+ #return true if the statement is a duplicate key record error
50
+ def duplicate_key_update_error?(exception)# :nodoc:
51
+ exception.is_a?(ActiveRecord::StatementInvalid) && exception.to_s.include?('Duplicate entry')
58
52
  end
59
- end
53
+ end
@@ -1,13 +1,7 @@
1
1
  module ActiveRecord::Import::PostgreSQLAdapter
2
- module InstanceMethods
3
- def self.included(klass)
4
- klass.instance_eval do
5
- include ActiveRecord::Import::ImportSupport
6
- end
7
- end
2
+ include ActiveRecord::Import::ImportSupport
8
3
 
9
- def next_value_for_sequence(sequence_name)
10
- %{nextval('#{sequence_name}')}
11
- end
4
+ def next_value_for_sequence(sequence_name)
5
+ %{nextval('#{sequence_name}')}
12
6
  end
13
7
  end
@@ -1,7 +1,5 @@
1
1
  module ActiveRecord::Import::Sqlite3Adapter
2
- module InstanceMethods
3
- def next_value_for_sequence(sequence_name)
4
- %{nextval('#{sequence_name}')}
5
- end
2
+ def next_value_for_sequence(sequence_name)
3
+ %{nextval('#{sequence_name}')}
6
4
  end
7
5
  end
@@ -12,12 +12,8 @@ module ActiveRecord::Import
12
12
  end
13
13
 
14
14
  # Loads the import functionality for the passed in ActiveRecord connection
15
- def self.load_from_connection(connection)
16
- import_adapter = "ActiveRecord::Import::#{connection.class.name.demodulize}::InstanceMethods"
17
- unless connection.class.ancestors.map(&:name).include?(import_adapter)
18
- config = connection.instance_variable_get :@config
19
- require_adapter config[:adapter]
20
- end
15
+ def self.load_from_connection_pool(connection_pool)
16
+ require_adapter connection_pool.spec.config[:adapter]
21
17
  end
22
18
  end
23
19
 
@@ -9,7 +9,7 @@ def should_support_mysql_import_functionality
9
9
  "('7','8','9')" ]
10
10
 
11
11
  adapter = ActiveRecord::Base.connection.class
12
- values_size_in_bytes = adapter.sum_sizes( *values )
12
+ values_size_in_bytes = values.sum {|value| value.bytesize }
13
13
  base_sql_size_in_bytes = 15
14
14
  max_bytes = 30
15
15
 
@@ -38,7 +38,7 @@ def should_support_mysql_import_functionality
38
38
  base_sql_size_in_bytes = 15
39
39
  max_bytes = 26
40
40
 
41
- values_size_in_bytes = adapter.sum_sizes( *values )
41
+ values_size_in_bytes = values.sum {|value| value.bytesize }
42
42
  value_sets = adapter.get_insert_value_sets( values, base_sql_size_in_bytes, max_bytes )
43
43
 
44
44
  assert_equal 2, value_sets.size, 'Two value sets were expected!'
metadata CHANGED
@@ -1,70 +1,68 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: activerecord-import
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.9
4
5
  prerelease:
5
- version: 0.2.8
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Zach Dennis
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2011-08-14 00:00:00 Z
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
12
+ date: 2012-01-20 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
16
15
  name: activerecord
17
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &70098107427660 !ruby/object:Gem::Requirement
18
17
  none: false
19
- requirements:
18
+ requirements:
20
19
  - - ~>
21
- - !ruby/object:Gem::Version
22
- version: 3.0pre
20
+ - !ruby/object:Gem::Version
21
+ version: '3.0'
23
22
  type: :runtime
24
23
  prerelease: false
25
- version_requirements: *id001
26
- - !ruby/object:Gem::Dependency
24
+ version_requirements: *70098107427660
25
+ - !ruby/object:Gem::Dependency
27
26
  name: rake
28
- requirement: &id002 !ruby/object:Gem::Requirement
27
+ requirement: &70098107425120 !ruby/object:Gem::Requirement
29
28
  none: false
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: "0"
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
34
33
  type: :development
35
34
  prerelease: false
36
- version_requirements: *id002
37
- - !ruby/object:Gem::Dependency
35
+ version_requirements: *70098107425120
36
+ - !ruby/object:Gem::Dependency
38
37
  name: jeweler
39
- requirement: &id003 !ruby/object:Gem::Requirement
38
+ requirement: &70098107421120 !ruby/object:Gem::Requirement
40
39
  none: false
41
- requirements:
42
- - - ">="
43
- - !ruby/object:Gem::Version
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
44
43
  version: 1.4.0
45
44
  type: :development
46
45
  prerelease: false
47
- version_requirements: *id003
48
- - !ruby/object:Gem::Dependency
46
+ version_requirements: *70098107421120
47
+ - !ruby/object:Gem::Dependency
49
48
  name: activerecord
50
- requirement: &id004 !ruby/object:Gem::Requirement
49
+ requirement: &70098107418880 !ruby/object:Gem::Requirement
51
50
  none: false
52
- requirements:
51
+ requirements:
53
52
  - - ~>
54
- - !ruby/object:Gem::Version
55
- version: 3.0pre
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
56
55
  type: :runtime
57
56
  prerelease: false
58
- version_requirements: *id004
59
- description: Extraction of the ActiveRecord::Base#import functionality from ar-extensions for Rails 3 and beyond
57
+ version_requirements: *70098107418880
58
+ description: Extraction of the ActiveRecord::Base#import functionality from ar-extensions
59
+ for Rails 3 and beyond
60
60
  email: zach.dennis@gmail.com
61
61
  executables: []
62
-
63
62
  extensions: []
64
-
65
- extra_rdoc_files:
63
+ extra_rdoc_files:
66
64
  - README.markdown
67
- files:
65
+ files:
68
66
  - README.markdown
69
67
  - Rakefile
70
68
  - VERSION
@@ -112,35 +110,32 @@ files:
112
110
  - test/test_helper.rb
113
111
  homepage: http://github.com/zdennis/activerecord-import
114
112
  licenses: []
115
-
116
113
  post_install_message:
117
114
  rdoc_options: []
118
-
119
- require_paths:
115
+ require_paths:
120
116
  - lib
121
- required_ruby_version: !ruby/object:Gem::Requirement
117
+ required_ruby_version: !ruby/object:Gem::Requirement
122
118
  none: false
123
- requirements:
124
- - - ">="
125
- - !ruby/object:Gem::Version
126
- hash: 2563263173991236631
127
- segments:
119
+ requirements:
120
+ - - ! '>='
121
+ - !ruby/object:Gem::Version
122
+ version: '0'
123
+ segments:
128
124
  - 0
129
- version: "0"
130
- required_rubygems_version: !ruby/object:Gem::Requirement
125
+ hash: -2341236183371821495
126
+ required_rubygems_version: !ruby/object:Gem::Requirement
131
127
  none: false
132
- requirements:
133
- - - ">="
134
- - !ruby/object:Gem::Version
135
- version: "0"
128
+ requirements:
129
+ - - ! '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
136
132
  requirements: []
137
-
138
133
  rubyforge_project:
139
- rubygems_version: 1.8.5
134
+ rubygems_version: 1.8.10
140
135
  signing_key:
141
136
  specification_version: 3
142
137
  summary: Bulk-loading extension for ActiveRecord
143
- test_files:
138
+ test_files:
144
139
  - test/active_record/connection_adapter_test.rb
145
140
  - test/adapters/jdbcmysql.rb
146
141
  - test/adapters/mysql.rb