activerecord-import 0.2.8 → 0.2.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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