activerecord-import 0.2.11 → 0.3.0
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/Rakefile +1 -1
- data/VERSION +1 -1
- data/lib/activerecord-import/active_record/adapters/mysql2_adapter.rb +2 -2
- data/lib/activerecord-import/active_record/adapters/sqlite3_adapter.rb +2 -2
- data/lib/activerecord-import/adapters/mysql2_adapter.rb +5 -0
- data/lib/activerecord-import/adapters/sqlite3_adapter.rb +1 -1
- data/lib/activerecord-import/base.rb +11 -1
- data/lib/activerecord-import/import.rb +20 -5
- data/lib/activerecord-import/synchronize.rb +5 -1
- metadata +4 -3
    
        data/Rakefile
    CHANGED
    
    | @@ -36,7 +36,7 @@ namespace :display do | |
| 36 36 | 
             
            end
         | 
| 37 37 | 
             
            task :default => ["display:notice"]
         | 
| 38 38 |  | 
| 39 | 
            -
            ADAPTERS = %w(mysql mysql2 jdbcmysql postgresql sqlite3 seamless_database_pool)
         | 
| 39 | 
            +
            ADAPTERS = %w(mysql mysql2 jdbcmysql postgresql sqlite3 seamless_database_pool mysqlspatial mysql2spatial spatialite postgis)
         | 
| 40 40 | 
             
            ADAPTERS.each do |adapter|
         | 
| 41 41 | 
             
              namespace :test do
         | 
| 42 42 | 
             
                desc "Runs #{adapter} database tests."
         | 
    
        data/VERSION
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            0. | 
| 1 | 
            +
            0.3.0
         | 
| @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            require "active_record/connection_adapters/mysql2_adapter"
         | 
| 2 | 
            -
            require "activerecord-import/adapters/ | 
| 2 | 
            +
            require "activerecord-import/adapters/mysql2_adapter"
         | 
| 3 3 |  | 
| 4 4 | 
             
            class ActiveRecord::ConnectionAdapters::Mysql2Adapter
         | 
| 5 | 
            -
              include ActiveRecord::Import:: | 
| 5 | 
            +
              include ActiveRecord::Import::Mysql2Adapter
         | 
| 6 6 | 
             
            end
         | 
| @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            require "active_record/connection_adapters/sqlite3_adapter"
         | 
| 2 2 | 
             
            require "activerecord-import/adapters/sqlite3_adapter"
         | 
| 3 3 |  | 
| 4 | 
            -
            class ActiveRecord::ConnectionAdapters:: | 
| 5 | 
            -
              include ActiveRecord::Import:: | 
| 4 | 
            +
            class ActiveRecord::ConnectionAdapters::SQLite3Adapter
         | 
| 5 | 
            +
              include ActiveRecord::Import::SQLite3Adapter
         | 
| 6 6 | 
             
            end
         | 
| 7 7 |  | 
| @@ -5,10 +5,20 @@ require "active_record/version" | |
| 5 5 | 
             
            module ActiveRecord::Import
         | 
| 6 6 | 
             
              AdapterPath = File.join File.expand_path(File.dirname(__FILE__)), "/active_record/adapters"
         | 
| 7 7 |  | 
| 8 | 
            +
              def self.base_adapter(adapter)
         | 
| 9 | 
            +
                case adapter
         | 
| 10 | 
            +
                when 'mysqlspatial' then 'mysql'
         | 
| 11 | 
            +
                when 'mysql2spatial' then 'mysql2'
         | 
| 12 | 
            +
                when 'spatialite' then 'sqlite3'
         | 
| 13 | 
            +
                when 'postgis' then 'postgresql'
         | 
| 14 | 
            +
                else adapter
         | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
              
         | 
| 8 18 | 
             
              # Loads the import functionality for a specific database adapter
         | 
| 9 19 | 
             
              def self.require_adapter(adapter)
         | 
| 10 20 | 
             
                require File.join(AdapterPath,"/abstract_adapter")
         | 
| 11 | 
            -
                require File.join(AdapterPath,"/#{adapter}_adapter")
         | 
| 21 | 
            +
                require File.join(AdapterPath,"/#{base_adapter(adapter)}_adapter")
         | 
| 12 22 | 
             
              end
         | 
| 13 23 |  | 
| 14 24 | 
             
              # Loads the import functionality for the passed in ActiveRecord connection
         | 
| @@ -137,8 +137,8 @@ class ActiveRecord::Base | |
| 137 137 | 
             
                #
         | 
| 138 138 | 
             
                #  # Example synchronizing unsaved/new instances in memory by using a uniqued imported field
         | 
| 139 139 | 
             
                #  posts = [BlogPost.new(:title => "Foo"), BlogPost.new(:title => "Bar")]
         | 
| 140 | 
            -
                #  BlogPost.import posts, :synchronize => posts
         | 
| 141 | 
            -
                #  puts posts.first. | 
| 140 | 
            +
                #  BlogPost.import posts, :synchronize => posts, :synchronize_keys => [:title]
         | 
| 141 | 
            +
                #  puts posts.first.persisted? # => true
         | 
| 142 142 | 
             
                #
         | 
| 143 143 | 
             
                # == On Duplicate Key Update (MySQL only)
         | 
| 144 144 | 
             
                #
         | 
| @@ -276,6 +276,13 @@ class ActiveRecord::Base | |
| 276 276 | 
             
                # information on +column_names+, +array_of_attributes_ and
         | 
| 277 277 | 
             
                # +options+.
         | 
| 278 278 | 
             
                def import_without_validations_or_callbacks( column_names, array_of_attributes, options={} )
         | 
| 279 | 
            +
                  scope_columns, scope_values = scope_attributes.to_a.transpose
         | 
| 280 | 
            +
             | 
| 281 | 
            +
                  unless scope_columns.blank?
         | 
| 282 | 
            +
                    column_names.concat scope_columns
         | 
| 283 | 
            +
                    array_of_attributes.each { |a| a.concat scope_values }
         | 
| 284 | 
            +
                  end
         | 
| 285 | 
            +
             | 
| 279 286 | 
             
                  columns = column_names.each_with_index.map do |name, i|
         | 
| 280 287 | 
             
                    column = columns_hash[name.to_s]
         | 
| 281 288 |  | 
| @@ -310,14 +317,22 @@ class ActiveRecord::Base | |
| 310 317 | 
             
                # Returns SQL the VALUES for an INSERT statement given the passed in +columns+
         | 
| 311 318 | 
             
                # and +array_of_attributes+.
         | 
| 312 319 | 
             
                def values_sql_for_columns_and_attributes(columns, array_of_attributes)   # :nodoc:
         | 
| 320 | 
            +
                  # connection gets called a *lot* in this high intensity loop.
         | 
| 321 | 
            +
                  # Reuse the same one w/in the loop, otherwise it would keep being re-retreived (= lots of time for large imports)
         | 
| 322 | 
            +
                  connection_memo = connection
         | 
| 313 323 | 
             
                  array_of_attributes.map do |arr|
         | 
| 314 324 | 
             
                    my_values = arr.each_with_index.map do |val,j|
         | 
| 315 325 | 
             
                      column = columns[j]
         | 
| 316 326 |  | 
| 317 | 
            -
                       | 
| 318 | 
            -
             | 
| 327 | 
            +
                      # be sure to query sequence_name *last*, only if cheaper tests fail, because it's costly
         | 
| 328 | 
            +
                      if val.nil? && column.name == primary_key && !sequence_name.blank?
         | 
| 329 | 
            +
                         connection_memo.next_value_for_sequence(sequence_name)
         | 
| 319 330 | 
             
                      else
         | 
| 320 | 
            -
                         | 
| 331 | 
            +
                        if serialized_attributes.include?(column.name)
         | 
| 332 | 
            +
                          connection_memo.quote(serialized_attributes[column.name].dump(val), column)
         | 
| 333 | 
            +
                        else
         | 
| 334 | 
            +
                          connection_memo.quote(val, column)
         | 
| 335 | 
            +
                        end
         | 
| 321 336 | 
             
                      end
         | 
| 322 337 | 
             
                    end
         | 
| 323 338 | 
             
                    "(#{my_values.join(',')})"
         | 
| @@ -43,6 +43,10 @@ module ActiveRecord # :nodoc: | |
| 43 43 | 
             
                      instance.clear_aggregation_cache
         | 
| 44 44 | 
             
                      instance.clear_association_cache
         | 
| 45 45 | 
             
                      instance.instance_variable_set '@attributes', matched_instance.attributes
         | 
| 46 | 
            +
                      # Since the instance now accurately reflects the record in
         | 
| 47 | 
            +
                      # the database, ensure that instance.persisted? is true.
         | 
| 48 | 
            +
                      instance.instance_variable_set '@new_record', false
         | 
| 49 | 
            +
                      instance.instance_variable_set '@destroyed', false
         | 
| 46 50 | 
             
                    end
         | 
| 47 51 | 
             
                  end
         | 
| 48 52 | 
             
                end
         | 
| @@ -52,4 +56,4 @@ module ActiveRecord # :nodoc: | |
| 52 56 | 
             
                  self.class.synchronize(instances, key)
         | 
| 53 57 | 
             
                end
         | 
| 54 58 | 
             
              end
         | 
| 55 | 
            -
            end
         | 
| 59 | 
            +
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: activerecord-import
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.3.0
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -9,7 +9,7 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date:  | 
| 12 | 
            +
            date: 2013-01-25 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: activerecord
         | 
| @@ -95,6 +95,7 @@ files: | |
| 95 95 | 
             
            - lib/activerecord-import/active_record/adapters/seamless_database_pool_adapter.rb
         | 
| 96 96 | 
             
            - lib/activerecord-import/active_record/adapters/sqlite3_adapter.rb
         | 
| 97 97 | 
             
            - lib/activerecord-import/adapters/abstract_adapter.rb
         | 
| 98 | 
            +
            - lib/activerecord-import/adapters/mysql2_adapter.rb
         | 
| 98 99 | 
             
            - lib/activerecord-import/adapters/mysql_adapter.rb
         | 
| 99 100 | 
             
            - lib/activerecord-import/adapters/postgresql_adapter.rb
         | 
| 100 101 | 
             
            - lib/activerecord-import/adapters/sqlite3_adapter.rb
         | 
| @@ -119,7 +120,7 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 119 120 | 
             
                  version: '0'
         | 
| 120 121 | 
             
                  segments:
         | 
| 121 122 | 
             
                  - 0
         | 
| 122 | 
            -
                  hash:  | 
| 123 | 
            +
                  hash: -2739522167439917244
         | 
| 123 124 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 124 125 | 
             
              none: false
         | 
| 125 126 | 
             
              requirements:
         |