activerecord-import 0.24.0 → 0.25.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.
- checksums.yaml +4 -4
 - data/.travis.yml +20 -11
 - data/CHANGELOG.md +14 -0
 - data/Rakefile +1 -0
 - data/gemfiles/5.0.gemfile +1 -0
 - data/gemfiles/5.1.gemfile +1 -0
 - data/gemfiles/5.2.gemfile +2 -2
 - data/lib/activerecord-import.rb +1 -0
 - data/lib/activerecord-import/base.rb +1 -0
 - data/lib/activerecord-import/import.rb +49 -39
 - data/lib/activerecord-import/version.rb +1 -1
 - data/test/adapters/makara_postgis.rb +1 -0
 - data/test/makara_postgis/import_test.rb +8 -0
 - data/test/schema/mysql2_schema.rb +19 -0
 - data/test/support/mysql/import_examples.rb +12 -0
 - data/test/test_helper.rb +8 -0
 - metadata +8 -4
 - data/test/schema/mysql_schema.rb +0 -16
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 26224d6c0d4c23f3edaf1faea68466f18c03fbbc
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 55107f77211b86e3be77b287d224e488dbb280ac
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: c0815961332178cf2858b39663f1d9f6ef3d61985cd4cb528cef410714e4bf07c354515b5e06124ad4bb5c7e57e7a179c48d7fb5c5e28886bc9e30c4399e82c9
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: df5e8ccd8a658d4981cd26167e09fa8c5e0425c58e4397c48e6f7721221d1de3cc4c6cdf903e3330f07cf6a74b93214cd11cca977f6d75cf6e8b43409807c23b
         
     | 
    
        data/.travis.yml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            language: ruby
         
     | 
| 
       2 
2 
     | 
    
         
             
            cache: bundler
         
     | 
| 
       3 
3 
     | 
    
         
             
            rvm:
         
     | 
| 
       4 
     | 
    
         
            -
              - 2.3. 
     | 
| 
      
 4 
     | 
    
         
            +
              - 2.3.7
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
       6 
6 
     | 
    
         
             
            env:
         
     | 
| 
       7 
7 
     | 
    
         
             
              global:
         
     | 
| 
         @@ -20,8 +20,6 @@ matrix: 
     | 
|
| 
       20 
20 
     | 
    
         
             
              include:
         
     | 
| 
       21 
21 
     | 
    
         
             
                - rvm: jruby-9.1.14.0
         
     | 
| 
       22 
22 
     | 
    
         
             
                  env: AR_VERSION=4.2
         
     | 
| 
       23 
     | 
    
         
            -
                  before_install:
         
     | 
| 
       24 
     | 
    
         
            -
                    - gem update --system
         
     | 
| 
       25 
23 
     | 
    
         | 
| 
       26 
24 
     | 
    
         
             
                  script:
         
     | 
| 
       27 
25 
     | 
    
         
             
                    - bundle exec rake test:jdbcsqlite3
         
     | 
| 
         @@ -30,23 +28,32 @@ matrix: 
     | 
|
| 
       30 
28 
     | 
    
         | 
| 
       31 
29 
     | 
    
         
             
              fast_finish: true
         
     | 
| 
       32 
30 
     | 
    
         | 
| 
       33 
     | 
    
         
            -
            before_script:
         
     | 
| 
       34 
     | 
    
         
            -
              - mysql -e 'create database activerecord_import_test;'
         
     | 
| 
       35 
     | 
    
         
            -
              - psql -c 'create database activerecord_import_test;' -U postgres
         
     | 
| 
       36 
     | 
    
         
            -
              - psql activerecord_import_test -c 'create extension if not exists hstore;' -U postgres
         
     | 
| 
       37 
     | 
    
         
            -
              - psql -c 'create extension if not exists postgis;' -U postgres
         
     | 
| 
       38 
     | 
    
         
            -
              - psql -c 'create extension if not exists "uuid-ossp";' -U postgres
         
     | 
| 
       39 
     | 
    
         
            -
              - cp test/travis/database.yml test/database.yml
         
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
31 
     | 
    
         
             
            addons:
         
     | 
| 
       42 
32 
     | 
    
         
             
              postgresql: "9.5"
         
     | 
| 
       43 
33 
     | 
    
         
             
              apt:
         
     | 
| 
       44 
34 
     | 
    
         
             
                sources:
         
     | 
| 
       45 
35 
     | 
    
         
             
                  - travis-ci/sqlite3
         
     | 
| 
      
 36 
     | 
    
         
            +
                  - mysql-5.7-trusty
         
     | 
| 
       46 
37 
     | 
    
         
             
                packages:
         
     | 
| 
       47 
38 
     | 
    
         
             
                  - sqlite3
         
     | 
| 
      
 39 
     | 
    
         
            +
                  - mysql-server
         
     | 
| 
      
 40 
     | 
    
         
            +
                  - mysql-client
         
     | 
| 
       48 
41 
     | 
    
         
             
                  - postgresql-9.5-postgis-2.3
         
     | 
| 
       49 
42 
     | 
    
         | 
| 
      
 43 
     | 
    
         
            +
            before_install:
         
     | 
| 
      
 44 
     | 
    
         
            +
              - gem update --system
         
     | 
| 
      
 45 
     | 
    
         
            +
              - sudo mysql -e "use mysql; update user set authentication_string=PASSWORD('') where User='root'; update user set plugin='mysql_native_password';FLUSH PRIVILEGES;"
         
     | 
| 
      
 46 
     | 
    
         
            +
              - sudo mysql_upgrade
         
     | 
| 
      
 47 
     | 
    
         
            +
              - sudo service mysql restart
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
            before_script:
         
     | 
| 
      
 50 
     | 
    
         
            +
              - mysql -e 'create database activerecord_import_test;'
         
     | 
| 
      
 51 
     | 
    
         
            +
              - psql -c 'create database activerecord_import_test;' -U postgres
         
     | 
| 
      
 52 
     | 
    
         
            +
              - psql activerecord_import_test -c 'create extension if not exists hstore;' -U postgres
         
     | 
| 
      
 53 
     | 
    
         
            +
              - psql -c 'create extension if not exists postgis;' -U postgres
         
     | 
| 
      
 54 
     | 
    
         
            +
              - psql -c 'create extension if not exists "uuid-ossp";' -U postgres
         
     | 
| 
      
 55 
     | 
    
         
            +
              - cp test/travis/database.yml test/database.yml
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
       50 
57 
     | 
    
         
             
            script:
         
     | 
| 
       51 
58 
     | 
    
         
             
              - bundle exec rake test:mysql2
         
     | 
| 
       52 
59 
     | 
    
         
             
              - bundle exec rake test:mysql2_makara
         
     | 
| 
         @@ -60,3 +67,5 @@ script: 
     | 
|
| 
       60 
67 
     | 
    
         
             
              - bundle exec rubocop
         
     | 
| 
       61 
68 
     | 
    
         | 
| 
       62 
69 
     | 
    
         
             
            dist: trusty
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
            sudo: required
         
     | 
    
        data/CHANGELOG.md
    CHANGED
    
    | 
         @@ -1,3 +1,17 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            ## Changes in 0.25.0
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            ### New Features
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            * Add support for makara_postgis adapter. Thanks to @chadwilken via \#527.
         
     | 
| 
      
 6 
     | 
    
         
            +
            * Skip validating presence of belongs_to associations. Thanks to @Sohair63, @naiyt, @jkowens via \#528.
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            ### Fixes
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            * Add missing require for ActiveSupport.on_load. Thanks to @onk via \#529.
         
     | 
| 
      
 11 
     | 
    
         
            +
            * Support setting attribute values in before_validation callbacks.
         
     | 
| 
      
 12 
     | 
    
         
            +
              Thanks to @SirRawlins, @jkowens via \#531.
         
     | 
| 
      
 13 
     | 
    
         
            +
            * Ignore virtual columns. Thanks to @dbourguignon, @jkowens via \#530.
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
       1 
15 
     | 
    
         
             
            ## Changes in 0.24.0
         
     | 
| 
       2 
16 
     | 
    
         | 
| 
       3 
17 
     | 
    
         
             
            ### Fixes
         
     | 
    
        data/Rakefile
    CHANGED
    
    
    
        data/gemfiles/5.0.gemfile
    CHANGED
    
    
    
        data/gemfiles/5.1.gemfile
    CHANGED
    
    
    
        data/gemfiles/5.2.gemfile
    CHANGED
    
    | 
         @@ -1,2 +1,2 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            gem 'activerecord', '~> 5.2.0 
     | 
| 
       2 
     | 
    
         
            -
            gem 'composite_primary_keys', '~> 11.0 
     | 
| 
      
 1 
     | 
    
         
            +
            gem 'activerecord', '~> 5.2.0'
         
     | 
| 
      
 2 
     | 
    
         
            +
            gem 'composite_primary_keys', '~> 11.0'
         
     | 
    
        data/lib/activerecord-import.rb
    CHANGED
    
    
| 
         @@ -38,8 +38,14 @@ module ActiveRecord::Import #:nodoc: 
     | 
|
| 
       38 
38 
     | 
    
         
             
                    model.errors.clear
         
     | 
| 
       39 
39 
     | 
    
         | 
| 
       40 
40 
     | 
    
         
             
                    validate_callbacks = model._validate_callbacks.dup
         
     | 
| 
      
 41 
     | 
    
         
            +
                    associations = model.class.reflect_on_all_associations(:belongs_to).map(&:name)
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
       41 
43 
     | 
    
         
             
                    model._validate_callbacks.each do |callback|
         
     | 
| 
       42 
     | 
    
         
            -
                       
     | 
| 
      
 44 
     | 
    
         
            +
                      filter = callback.raw_filter
         
     | 
| 
      
 45 
     | 
    
         
            +
                      if filter.is_a?(ActiveRecord::Validations::UniquenessValidator) ||
         
     | 
| 
      
 46 
     | 
    
         
            +
                         (defined?(ActiveRecord::Validations::PresenceValidator) && filter.is_a?(ActiveRecord::Validations::PresenceValidator) && associations.include?(filter.attributes.first))
         
     | 
| 
      
 47 
     | 
    
         
            +
                        validate_callbacks.delete(callback)
         
     | 
| 
      
 48 
     | 
    
         
            +
                      end
         
     | 
| 
       43 
49 
     | 
    
         
             
                    end
         
     | 
| 
       44 
50 
     | 
    
         | 
| 
       45 
51 
     | 
    
         
             
                    model.run_callbacks(:validation) do
         
     | 
| 
         @@ -95,7 +101,12 @@ class ActiveRecord::Associations::CollectionAssociation 
     | 
|
| 
       95 
101 
     | 
    
         | 
| 
       96 
102 
     | 
    
         
             
                model_klass = reflection.klass
         
     | 
| 
       97 
103 
     | 
    
         
             
                symbolized_foreign_key = reflection.foreign_key.to_sym
         
     | 
| 
       98 
     | 
    
         
            -
             
     | 
| 
      
 104 
     | 
    
         
            +
             
     | 
| 
      
 105 
     | 
    
         
            +
                symbolized_column_names = if model_klass.connection.respond_to?(:supports_virtual_columns?) && model_klass.connection.supports_virtual_columns?
         
     | 
| 
      
 106 
     | 
    
         
            +
                  model_klass.columns.reject(&:virtual?).map { |c| c.name.to_sym }
         
     | 
| 
      
 107 
     | 
    
         
            +
                else
         
     | 
| 
      
 108 
     | 
    
         
            +
                  model_klass.column_names.map(&:to_sym)
         
     | 
| 
      
 109 
     | 
    
         
            +
                end
         
     | 
| 
       99 
110 
     | 
    
         | 
| 
       100 
111 
     | 
    
         
             
                owner_primary_key = reflection.active_record_primary_key.to_sym
         
     | 
| 
       101 
112 
     | 
    
         
             
                owner_primary_key_value = owner.send(owner_primary_key)
         
     | 
| 
         @@ -494,8 +505,8 @@ class ActiveRecord::Base 
     | 
|
| 
       494 
505 
     | 
    
         
             
                    end
         
     | 
| 
       495 
506 
     | 
    
         
             
                  end
         
     | 
| 
       496 
507 
     | 
    
         | 
| 
       497 
     | 
    
         
            -
                  is_validating = options[:validate]
         
     | 
| 
       498 
     | 
    
         
            -
                   
     | 
| 
      
 508 
     | 
    
         
            +
                  is_validating = options[:validate_with_context].present? ? true : options[:validate]
         
     | 
| 
      
 509 
     | 
    
         
            +
                  validator = ActiveRecord::Import::Validator.new(options)
         
     | 
| 
       499 
510 
     | 
    
         | 
| 
       500 
511 
     | 
    
         
             
                  # assume array of model objects
         
     | 
| 
       501 
512 
     | 
    
         
             
                  if args.last.is_a?( Array ) && args.last.first.is_a?(ActiveRecord::Base)
         
     | 
| 
         @@ -504,7 +515,11 @@ class ActiveRecord::Base 
     | 
|
| 
       504 
515 
     | 
    
         
             
                      column_names = args.first.dup
         
     | 
| 
       505 
516 
     | 
    
         
             
                    else
         
     | 
| 
       506 
517 
     | 
    
         
             
                      models = args.first
         
     | 
| 
       507 
     | 
    
         
            -
                      column_names =  
     | 
| 
      
 518 
     | 
    
         
            +
                      column_names = if connection.respond_to?(:supports_virtual_columns?) && connection.supports_virtual_columns?
         
     | 
| 
      
 519 
     | 
    
         
            +
                        columns.reject(&:virtual?).map(&:name)
         
     | 
| 
      
 520 
     | 
    
         
            +
                      else
         
     | 
| 
      
 521 
     | 
    
         
            +
                        self.column_names.dup
         
     | 
| 
      
 522 
     | 
    
         
            +
                      end
         
     | 
| 
       508 
523 
     | 
    
         
             
                    end
         
     | 
| 
       509 
524 
     | 
    
         | 
| 
       510 
525 
     | 
    
         
             
                    if models.first.id.nil? && column_names.include?(primary_key) && columns_hash[primary_key].type == :uuid
         
     | 
| 
         @@ -520,12 +535,19 @@ class ActiveRecord::Base 
     | 
|
| 
       520 
535 
     | 
    
         
             
                      serialized_attributes
         
     | 
| 
       521 
536 
     | 
    
         
             
                    end
         
     | 
| 
       522 
537 
     | 
    
         | 
| 
       523 
     | 
    
         
            -
                    array_of_attributes =  
     | 
| 
      
 538 
     | 
    
         
            +
                    array_of_attributes = []
         
     | 
| 
      
 539 
     | 
    
         
            +
             
     | 
| 
      
 540 
     | 
    
         
            +
                    models.each do |model|
         
     | 
| 
       524 
541 
     | 
    
         
             
                      if supports_setting_primary_key_of_imported_objects?
         
     | 
| 
       525 
542 
     | 
    
         
             
                        load_association_ids(model)
         
     | 
| 
       526 
543 
     | 
    
         
             
                      end
         
     | 
| 
       527 
544 
     | 
    
         | 
| 
       528 
     | 
    
         
            -
                       
     | 
| 
      
 545 
     | 
    
         
            +
                      if is_validating && !validator.valid_model?(model)
         
     | 
| 
      
 546 
     | 
    
         
            +
                        raise(ActiveRecord::RecordInvalid, model) if options[:raise_error]
         
     | 
| 
      
 547 
     | 
    
         
            +
                        next
         
     | 
| 
      
 548 
     | 
    
         
            +
                      end
         
     | 
| 
      
 549 
     | 
    
         
            +
             
     | 
| 
      
 550 
     | 
    
         
            +
                      array_of_attributes << column_names.map do |name|
         
     | 
| 
       529 
551 
     | 
    
         
             
                        if stored_attrs.key?(name.to_sym) ||
         
     | 
| 
       530 
552 
     | 
    
         
             
                           serialized_attrs.key?(name) ||
         
     | 
| 
       531 
553 
     | 
    
         
             
                           default_values.key?(name.to_s)
         
     | 
| 
         @@ -597,17 +619,27 @@ class ActiveRecord::Base 
     | 
|
| 
       597 
619 
     | 
    
         
             
                  end
         
     | 
| 
       598 
620 
     | 
    
         | 
| 
       599 
621 
     | 
    
         
             
                  return_obj = if is_validating
         
     | 
| 
       600 
     | 
    
         
            -
                     
     | 
| 
       601 
     | 
    
         
            -
                       
     | 
| 
       602 
     | 
    
         
            -
                        models. 
     | 
| 
       603 
     | 
    
         
            -
             
     | 
| 
      
 622 
     | 
    
         
            +
                    import_with_validations( column_names, array_of_attributes, options ) do |failed_instances|
         
     | 
| 
      
 623 
     | 
    
         
            +
                      if models
         
     | 
| 
      
 624 
     | 
    
         
            +
                        models.each { |m| failed_instances << m if m.errors.any? }
         
     | 
| 
      
 625 
     | 
    
         
            +
                      else
         
     | 
| 
      
 626 
     | 
    
         
            +
                        # create instances for each of our column/value sets
         
     | 
| 
      
 627 
     | 
    
         
            +
                        arr = validations_array_for_column_names_and_attributes( column_names, array_of_attributes )
         
     | 
| 
      
 628 
     | 
    
         
            +
             
     | 
| 
      
 629 
     | 
    
         
            +
                        # keep track of the instance and the position it is currently at. if this fails
         
     | 
| 
      
 630 
     | 
    
         
            +
                        # validation we'll use the index to remove it from the array_of_attributes
         
     | 
| 
      
 631 
     | 
    
         
            +
                        arr.each_with_index do |hsh, i|
         
     | 
| 
      
 632 
     | 
    
         
            +
                          model = new
         
     | 
| 
      
 633 
     | 
    
         
            +
                          hsh.each_pair { |k, v| model[k] = v }
         
     | 
| 
      
 634 
     | 
    
         
            +
                          next if validator.valid_model?(model)
         
     | 
| 
       604 
635 
     | 
    
         
             
                          raise(ActiveRecord::RecordInvalid, model) if options[:raise_error]
         
     | 
| 
       605 
636 
     | 
    
         
             
                          array_of_attributes[i] = nil
         
     | 
| 
       606 
     | 
    
         
            -
                           
     | 
| 
      
 637 
     | 
    
         
            +
                          failure = model.dup
         
     | 
| 
      
 638 
     | 
    
         
            +
                          failure.errors.send(:initialize_dup, model.errors)
         
     | 
| 
      
 639 
     | 
    
         
            +
                          failed_instances << failure
         
     | 
| 
       607 
640 
     | 
    
         
             
                        end
         
     | 
| 
      
 641 
     | 
    
         
            +
                        array_of_attributes.compact!
         
     | 
| 
       608 
642 
     | 
    
         
             
                      end
         
     | 
| 
       609 
     | 
    
         
            -
                    else
         
     | 
| 
       610 
     | 
    
         
            -
                      import_with_validations( column_names, array_of_attributes, options )
         
     | 
| 
       611 
643 
     | 
    
         
             
                    end
         
     | 
| 
       612 
644 
     | 
    
         
             
                  else
         
     | 
| 
       613 
645 
     | 
    
         
             
                    import_without_validations_or_callbacks( column_names, array_of_attributes, options )
         
     | 
| 
         @@ -640,29 +672,7 @@ class ActiveRecord::Base 
     | 
|
| 
       640 
672 
     | 
    
         
             
                def import_with_validations( column_names, array_of_attributes, options = {} )
         
     | 
| 
       641 
673 
     | 
    
         
             
                  failed_instances = []
         
     | 
| 
       642 
674 
     | 
    
         | 
| 
       643 
     | 
    
         
            -
                   
     | 
| 
       644 
     | 
    
         
            -
             
     | 
| 
       645 
     | 
    
         
            -
                  if block_given?
         
     | 
| 
       646 
     | 
    
         
            -
                    yield validator, failed_instances
         
     | 
| 
       647 
     | 
    
         
            -
                  else
         
     | 
| 
       648 
     | 
    
         
            -
                    # create instances for each of our column/value sets
         
     | 
| 
       649 
     | 
    
         
            -
                    arr = validations_array_for_column_names_and_attributes( column_names, array_of_attributes )
         
     | 
| 
       650 
     | 
    
         
            -
             
     | 
| 
       651 
     | 
    
         
            -
                    # keep track of the instance and the position it is currently at. if this fails
         
     | 
| 
       652 
     | 
    
         
            -
                    # validation we'll use the index to remove it from the array_of_attributes
         
     | 
| 
       653 
     | 
    
         
            -
                    arr.each_with_index do |hsh, i|
         
     | 
| 
       654 
     | 
    
         
            -
                      model = new
         
     | 
| 
       655 
     | 
    
         
            -
                      hsh.each_pair { |k, v| model[k] = v }
         
     | 
| 
       656 
     | 
    
         
            -
                      next if validator.valid_model? model
         
     | 
| 
       657 
     | 
    
         
            -
                      raise(ActiveRecord::RecordInvalid, model) if options[:raise_error]
         
     | 
| 
       658 
     | 
    
         
            -
                      array_of_attributes[i] = nil
         
     | 
| 
       659 
     | 
    
         
            -
                      failure = model.dup
         
     | 
| 
       660 
     | 
    
         
            -
                      failure.errors.send(:initialize_dup, model.errors)
         
     | 
| 
       661 
     | 
    
         
            -
                      failed_instances << failure
         
     | 
| 
       662 
     | 
    
         
            -
                    end
         
     | 
| 
       663 
     | 
    
         
            -
                  end
         
     | 
| 
       664 
     | 
    
         
            -
             
     | 
| 
       665 
     | 
    
         
            -
                  array_of_attributes.compact!
         
     | 
| 
      
 675 
     | 
    
         
            +
                  yield failed_instances if block_given?
         
     | 
| 
       666 
676 
     | 
    
         | 
| 
       667 
677 
     | 
    
         
             
                  result = if options[:all_or_none] && failed_instances.any?
         
     | 
| 
       668 
678 
     | 
    
         
             
                    ActiveRecord::Import::Result.new([], 0, [], [])
         
     | 
| 
         @@ -945,7 +955,7 @@ Hash key mismatch. 
     | 
|
| 
       945 
955 
     | 
    
         | 
| 
       946 
956 
     | 
    
         
             
            When importing an array of hashes with provided columns_names, each hash must contain keys for all column_names.
         
     | 
| 
       947 
957 
     | 
    
         | 
| 
       948 
     | 
    
         
            -
            Required keys: #{ 
     | 
| 
      
 958 
     | 
    
         
            +
            Required keys: #{required_keys}
         
     | 
| 
       949 
959 
     | 
    
         
             
            Missing keys: #{missing_keys}
         
     | 
| 
       950 
960 
     | 
    
         | 
| 
       951 
961 
     | 
    
         
             
            Hash: #{hash}
         
     | 
| 
         @@ -958,7 +968,7 @@ When importing an array of hashes, all hashes must have the same keys. 
     | 
|
| 
       958 
968 
     | 
    
         
             
            If you have records that are missing some values, we recommend you either set default values
         
     | 
| 
       959 
969 
     | 
    
         
             
            for the missing keys or group these records into batches by key set before importing.
         
     | 
| 
       960 
970 
     | 
    
         | 
| 
       961 
     | 
    
         
            -
            Required keys: #{ 
     | 
| 
      
 971 
     | 
    
         
            +
            Required keys: #{required_keys}
         
     | 
| 
       962 
972 
     | 
    
         
             
            Extra keys: #{extra_keys}
         
     | 
| 
       963 
973 
     | 
    
         
             
            Missing keys: #{missing_keys}
         
     | 
| 
       964 
974 
     | 
    
         | 
| 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            ENV["ARE_DB"] = "postgis"
         
     | 
| 
         @@ -0,0 +1,8 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
         
     | 
| 
      
 2 
     | 
    
         
            +
            require File.expand_path(File.dirname(__FILE__) + '/../support/postgresql/import_examples')
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            should_support_postgresql_import_functionality
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            if ActiveRecord::Base.connection.supports_on_duplicate_key_update?
         
     | 
| 
      
 7 
     | 
    
         
            +
              should_support_postgresql_upsert_functionality
         
     | 
| 
      
 8 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,19 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            ActiveRecord::Schema.define do
         
     | 
| 
      
 2 
     | 
    
         
            +
              create_table :books, force: :cascade do |t|
         
     | 
| 
      
 3 
     | 
    
         
            +
                t.string :title, null: false
         
     | 
| 
      
 4 
     | 
    
         
            +
                t.virtual :upper_title, type: :string, as: "upper(`title`)" if t.respond_to?(:virtual)
         
     | 
| 
      
 5 
     | 
    
         
            +
                t.string :publisher, null: false, default: 'Default Publisher'
         
     | 
| 
      
 6 
     | 
    
         
            +
                t.string :author_name, null: false
         
     | 
| 
      
 7 
     | 
    
         
            +
                t.datetime :created_at
         
     | 
| 
      
 8 
     | 
    
         
            +
                t.datetime :created_on
         
     | 
| 
      
 9 
     | 
    
         
            +
                t.datetime :updated_at
         
     | 
| 
      
 10 
     | 
    
         
            +
                t.datetime :updated_on
         
     | 
| 
      
 11 
     | 
    
         
            +
                t.date :publish_date
         
     | 
| 
      
 12 
     | 
    
         
            +
                t.integer :topic_id
         
     | 
| 
      
 13 
     | 
    
         
            +
                t.integer :tag_id
         
     | 
| 
      
 14 
     | 
    
         
            +
                t.integer :publisher_id
         
     | 
| 
      
 15 
     | 
    
         
            +
                t.boolean :for_sale, default: true
         
     | 
| 
      
 16 
     | 
    
         
            +
                t.integer :status, default: 0
         
     | 
| 
      
 17 
     | 
    
         
            +
                t.string :type
         
     | 
| 
      
 18 
     | 
    
         
            +
              end
         
     | 
| 
      
 19 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -82,5 +82,17 @@ def should_support_mysql_import_functionality 
     | 
|
| 
       82 
82 
     | 
    
         
             
                    assert_equal "Chad Fowler", topics.last.author_name, "wrong author!"
         
     | 
| 
       83 
83 
     | 
    
         
             
                  end
         
     | 
| 
       84 
84 
     | 
    
         
             
                end
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
      
 86 
     | 
    
         
            +
                if ENV['AR_VERSION'].to_f >= 5.1
         
     | 
| 
      
 87 
     | 
    
         
            +
                  context "with virtual columns" do
         
     | 
| 
      
 88 
     | 
    
         
            +
                    let(:books) { [Book.new(author_name: "foo", title: "bar")] }
         
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
      
 90 
     | 
    
         
            +
                    it "ignores virtual columns and creates record" do
         
     | 
| 
      
 91 
     | 
    
         
            +
                      assert_difference "Book.count", +1 do
         
     | 
| 
      
 92 
     | 
    
         
            +
                        Book.import books
         
     | 
| 
      
 93 
     | 
    
         
            +
                      end
         
     | 
| 
      
 94 
     | 
    
         
            +
                    end
         
     | 
| 
      
 95 
     | 
    
         
            +
                  end
         
     | 
| 
      
 96 
     | 
    
         
            +
                end
         
     | 
| 
       85 
97 
     | 
    
         
             
              end
         
     | 
| 
       86 
98 
     | 
    
         
             
            end
         
     | 
    
        data/test/test_helper.rb
    CHANGED
    
    | 
         @@ -33,6 +33,14 @@ rescue LoadError 
     | 
|
| 
       33 
33 
     | 
    
         
             
              ENV["SKIP_COMPOSITE_PK"] = "true"
         
     | 
| 
       34 
34 
     | 
    
         
             
            end
         
     | 
| 
       35 
35 
     | 
    
         | 
| 
      
 36 
     | 
    
         
            +
            # Support MySQL 5.7
         
     | 
| 
      
 37 
     | 
    
         
            +
            if ActiveSupport::VERSION::STRING < "4.1"
         
     | 
| 
      
 38 
     | 
    
         
            +
              require "active_record/connection_adapters/mysql2_adapter"
         
     | 
| 
      
 39 
     | 
    
         
            +
              class ActiveRecord::ConnectionAdapters::Mysql2Adapter
         
     | 
| 
      
 40 
     | 
    
         
            +
                NATIVE_DATABASE_TYPES[:primary_key] = "int(11) auto_increment PRIMARY KEY"
         
     | 
| 
      
 41 
     | 
    
         
            +
              end
         
     | 
| 
      
 42 
     | 
    
         
            +
            end
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
       36 
44 
     | 
    
         
             
            require "ruby-debug" if RUBY_VERSION.to_f < 1.9
         
     | 
| 
       37 
45 
     | 
    
         | 
| 
       38 
46 
     | 
    
         
             
            adapter = ENV["ARE_DB"] || "sqlite3"
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: activerecord-import
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.25.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Zach Dennis
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2018- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2018-07-10 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: activerecord
         
     | 
| 
         @@ -101,6 +101,7 @@ files: 
     | 
|
| 
       101 
101 
     | 
    
         
             
            - test/adapters/jdbcmysql.rb
         
     | 
| 
       102 
102 
     | 
    
         
             
            - test/adapters/jdbcpostgresql.rb
         
     | 
| 
       103 
103 
     | 
    
         
             
            - test/adapters/jdbcsqlite3.rb
         
     | 
| 
      
 104 
     | 
    
         
            +
            - test/adapters/makara_postgis.rb
         
     | 
| 
       104 
105 
     | 
    
         
             
            - test/adapters/mysql2.rb
         
     | 
| 
       105 
106 
     | 
    
         
             
            - test/adapters/mysql2_makara.rb
         
     | 
| 
       106 
107 
     | 
    
         
             
            - test/adapters/mysql2spatial.rb
         
     | 
| 
         @@ -115,6 +116,7 @@ files: 
     | 
|
| 
       115 
116 
     | 
    
         
             
            - test/jdbcmysql/import_test.rb
         
     | 
| 
       116 
117 
     | 
    
         
             
            - test/jdbcpostgresql/import_test.rb
         
     | 
| 
       117 
118 
     | 
    
         
             
            - test/jdbcsqlite3/import_test.rb
         
     | 
| 
      
 119 
     | 
    
         
            +
            - test/makara_postgis/import_test.rb
         
     | 
| 
       118 
120 
     | 
    
         
             
            - test/models/account.rb
         
     | 
| 
       119 
121 
     | 
    
         
             
            - test/models/alarm.rb
         
     | 
| 
       120 
122 
     | 
    
         
             
            - test/models/bike_maker.rb
         
     | 
| 
         @@ -141,7 +143,7 @@ files: 
     | 
|
| 
       141 
143 
     | 
    
         
             
            - test/postgresql/import_test.rb
         
     | 
| 
       142 
144 
     | 
    
         
             
            - test/schema/generic_schema.rb
         
     | 
| 
       143 
145 
     | 
    
         
             
            - test/schema/jdbcpostgresql_schema.rb
         
     | 
| 
       144 
     | 
    
         
            -
            - test/schema/ 
     | 
| 
      
 146 
     | 
    
         
            +
            - test/schema/mysql2_schema.rb
         
     | 
| 
       145 
147 
     | 
    
         
             
            - test/schema/postgis_schema.rb
         
     | 
| 
       146 
148 
     | 
    
         
             
            - test/schema/postgresql_schema.rb
         
     | 
| 
       147 
149 
     | 
    
         
             
            - test/schema/version.rb
         
     | 
| 
         @@ -189,6 +191,7 @@ test_files: 
     | 
|
| 
       189 
191 
     | 
    
         
             
            - test/adapters/jdbcmysql.rb
         
     | 
| 
       190 
192 
     | 
    
         
             
            - test/adapters/jdbcpostgresql.rb
         
     | 
| 
       191 
193 
     | 
    
         
             
            - test/adapters/jdbcsqlite3.rb
         
     | 
| 
      
 194 
     | 
    
         
            +
            - test/adapters/makara_postgis.rb
         
     | 
| 
       192 
195 
     | 
    
         
             
            - test/adapters/mysql2.rb
         
     | 
| 
       193 
196 
     | 
    
         
             
            - test/adapters/mysql2_makara.rb
         
     | 
| 
       194 
197 
     | 
    
         
             
            - test/adapters/mysql2spatial.rb
         
     | 
| 
         @@ -203,6 +206,7 @@ test_files: 
     | 
|
| 
       203 
206 
     | 
    
         
             
            - test/jdbcmysql/import_test.rb
         
     | 
| 
       204 
207 
     | 
    
         
             
            - test/jdbcpostgresql/import_test.rb
         
     | 
| 
       205 
208 
     | 
    
         
             
            - test/jdbcsqlite3/import_test.rb
         
     | 
| 
      
 209 
     | 
    
         
            +
            - test/makara_postgis/import_test.rb
         
     | 
| 
       206 
210 
     | 
    
         
             
            - test/models/account.rb
         
     | 
| 
       207 
211 
     | 
    
         
             
            - test/models/alarm.rb
         
     | 
| 
       208 
212 
     | 
    
         
             
            - test/models/bike_maker.rb
         
     | 
| 
         @@ -229,7 +233,7 @@ test_files: 
     | 
|
| 
       229 
233 
     | 
    
         
             
            - test/postgresql/import_test.rb
         
     | 
| 
       230 
234 
     | 
    
         
             
            - test/schema/generic_schema.rb
         
     | 
| 
       231 
235 
     | 
    
         
             
            - test/schema/jdbcpostgresql_schema.rb
         
     | 
| 
       232 
     | 
    
         
            -
            - test/schema/ 
     | 
| 
      
 236 
     | 
    
         
            +
            - test/schema/mysql2_schema.rb
         
     | 
| 
       233 
237 
     | 
    
         
             
            - test/schema/postgis_schema.rb
         
     | 
| 
       234 
238 
     | 
    
         
             
            - test/schema/postgresql_schema.rb
         
     | 
| 
       235 
239 
     | 
    
         
             
            - test/schema/version.rb
         
     | 
    
        data/test/schema/mysql_schema.rb
    DELETED
    
    | 
         @@ -1,16 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            ActiveRecord::Schema.define do
         
     | 
| 
       2 
     | 
    
         
            -
              create_table :books, options: 'ENGINE=MyISAM', force: true do |t|
         
     | 
| 
       3 
     | 
    
         
            -
                t.column :title, :string, null: false
         
     | 
| 
       4 
     | 
    
         
            -
                t.column :publisher, :string, null: false, default: 'Default Publisher'
         
     | 
| 
       5 
     | 
    
         
            -
                t.column :author_name, :string, null: false
         
     | 
| 
       6 
     | 
    
         
            -
                t.column :created_at, :datetime
         
     | 
| 
       7 
     | 
    
         
            -
                t.column :created_on, :datetime
         
     | 
| 
       8 
     | 
    
         
            -
                t.column :updated_at, :datetime
         
     | 
| 
       9 
     | 
    
         
            -
                t.column :updated_on, :datetime
         
     | 
| 
       10 
     | 
    
         
            -
                t.column :publish_date, :date
         
     | 
| 
       11 
     | 
    
         
            -
                t.column :topic_id, :integer
         
     | 
| 
       12 
     | 
    
         
            -
                t.column :for_sale, :boolean, default: true
         
     | 
| 
       13 
     | 
    
         
            -
                t.column :status, :integer
         
     | 
| 
       14 
     | 
    
         
            -
              end
         
     | 
| 
       15 
     | 
    
         
            -
              execute "ALTER TABLE books ADD FULLTEXT( `title`, `publisher`, `author_name` )"
         
     | 
| 
       16 
     | 
    
         
            -
            end
         
     |