activerecord-import 1.4.0 → 1.4.1

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.
Files changed (121) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +74 -8
  3. data/Brewfile +3 -1
  4. data/CHANGELOG.md +6 -0
  5. data/Gemfile +3 -1
  6. data/README.markdown +2 -2
  7. data/Rakefile +2 -0
  8. data/activerecord-import.gemspec +2 -1
  9. data/benchmarks/benchmark.rb +2 -0
  10. data/benchmarks/lib/base.rb +2 -0
  11. data/benchmarks/lib/cli_parser.rb +3 -1
  12. data/benchmarks/lib/float.rb +2 -0
  13. data/benchmarks/lib/mysql2_benchmark.rb +2 -0
  14. data/benchmarks/lib/output_to_csv.rb +2 -0
  15. data/benchmarks/lib/output_to_html.rb +4 -2
  16. data/benchmarks/models/test_innodb.rb +2 -0
  17. data/benchmarks/models/test_memory.rb +2 -0
  18. data/benchmarks/models/test_myisam.rb +2 -0
  19. data/benchmarks/schema/mysql2_schema.rb +2 -0
  20. data/gemfiles/4.2.gemfile +2 -0
  21. data/gemfiles/5.0.gemfile +2 -0
  22. data/gemfiles/5.1.gemfile +2 -0
  23. data/gemfiles/5.2.gemfile +2 -0
  24. data/gemfiles/6.0.gemfile +2 -0
  25. data/gemfiles/6.1.gemfile +2 -0
  26. data/gemfiles/7.0.gemfile +3 -0
  27. data/lib/activerecord-import/active_record/adapters/abstract_adapter.rb +2 -0
  28. data/lib/activerecord-import/active_record/adapters/jdbcmysql_adapter.rb +2 -0
  29. data/lib/activerecord-import/active_record/adapters/jdbcpostgresql_adapter.rb +2 -0
  30. data/lib/activerecord-import/active_record/adapters/jdbcsqlite3_adapter.rb +2 -0
  31. data/lib/activerecord-import/active_record/adapters/mysql2_adapter.rb +2 -0
  32. data/lib/activerecord-import/active_record/adapters/postgresql_adapter.rb +2 -0
  33. data/lib/activerecord-import/active_record/adapters/seamless_database_pool_adapter.rb +2 -0
  34. data/lib/activerecord-import/active_record/adapters/sqlite3_adapter.rb +2 -0
  35. data/lib/activerecord-import/adapters/abstract_adapter.rb +2 -0
  36. data/lib/activerecord-import/adapters/em_mysql2_adapter.rb +2 -0
  37. data/lib/activerecord-import/adapters/mysql2_adapter.rb +2 -0
  38. data/lib/activerecord-import/adapters/mysql_adapter.rb +2 -0
  39. data/lib/activerecord-import/adapters/postgresql_adapter.rb +37 -24
  40. data/lib/activerecord-import/adapters/sqlite3_adapter.rb +4 -2
  41. data/lib/activerecord-import/base.rb +3 -1
  42. data/lib/activerecord-import/import.rb +21 -10
  43. data/lib/activerecord-import/mysql2.rb +2 -0
  44. data/lib/activerecord-import/postgresql.rb +2 -0
  45. data/lib/activerecord-import/sqlite3.rb +2 -0
  46. data/lib/activerecord-import/synchronize.rb +2 -0
  47. data/lib/activerecord-import/value_sets_parser.rb +2 -0
  48. data/lib/activerecord-import/version.rb +3 -1
  49. data/lib/activerecord-import.rb +3 -1
  50. data/test/adapters/jdbcmysql.rb +2 -0
  51. data/test/adapters/jdbcpostgresql.rb +2 -0
  52. data/test/adapters/jdbcsqlite3.rb +2 -0
  53. data/test/adapters/makara_postgis.rb +2 -0
  54. data/test/adapters/mysql2.rb +2 -0
  55. data/test/adapters/mysql2_makara.rb +2 -0
  56. data/test/adapters/mysql2spatial.rb +2 -0
  57. data/test/adapters/postgis.rb +2 -0
  58. data/test/adapters/postgresql.rb +2 -0
  59. data/test/adapters/postgresql_makara.rb +2 -0
  60. data/test/adapters/seamless_database_pool.rb +2 -0
  61. data/test/adapters/spatialite.rb +2 -0
  62. data/test/adapters/sqlite3.rb +2 -0
  63. data/test/import_test.rb +21 -0
  64. data/test/jdbcmysql/import_test.rb +2 -0
  65. data/test/jdbcpostgresql/import_test.rb +2 -0
  66. data/test/jdbcsqlite3/import_test.rb +2 -0
  67. data/test/makara_postgis/import_test.rb +2 -0
  68. data/test/models/account.rb +2 -0
  69. data/test/models/alarm.rb +2 -0
  70. data/test/models/animal.rb +2 -0
  71. data/test/models/bike_maker.rb +2 -0
  72. data/test/models/book.rb +2 -0
  73. data/test/models/car.rb +2 -0
  74. data/test/models/card.rb +2 -0
  75. data/test/models/chapter.rb +2 -0
  76. data/test/models/customer.rb +2 -0
  77. data/test/models/deck.rb +2 -0
  78. data/test/models/dictionary.rb +2 -0
  79. data/test/models/discount.rb +2 -0
  80. data/test/models/end_note.rb +2 -0
  81. data/test/models/group.rb +2 -0
  82. data/test/models/order.rb +2 -0
  83. data/test/models/playing_card.rb +2 -0
  84. data/test/models/promotion.rb +2 -0
  85. data/test/models/question.rb +2 -0
  86. data/test/models/rule.rb +2 -0
  87. data/test/models/tag.rb +3 -0
  88. data/test/models/tag_alias.rb +5 -0
  89. data/test/models/topic.rb +2 -0
  90. data/test/models/user.rb +2 -0
  91. data/test/models/user_token.rb +2 -0
  92. data/test/models/vendor.rb +2 -0
  93. data/test/models/widget.rb +2 -0
  94. data/test/mysql2/import_test.rb +2 -0
  95. data/test/mysql2_makara/import_test.rb +2 -0
  96. data/test/mysqlspatial2/import_test.rb +2 -0
  97. data/test/postgis/import_test.rb +2 -0
  98. data/test/postgresql/import_test.rb +2 -0
  99. data/test/schema/generic_schema.rb +8 -0
  100. data/test/schema/jdbcpostgresql_schema.rb +2 -0
  101. data/test/schema/mysql2_schema.rb +2 -0
  102. data/test/schema/postgis_schema.rb +2 -0
  103. data/test/schema/postgresql_schema.rb +2 -0
  104. data/test/schema/sqlite3_schema.rb +2 -0
  105. data/test/schema/version.rb +2 -0
  106. data/test/sqlite3/import_test.rb +2 -0
  107. data/test/support/active_support/test_case_extensions.rb +2 -0
  108. data/test/support/assertions.rb +2 -0
  109. data/test/support/factories.rb +2 -0
  110. data/test/support/generate.rb +4 -2
  111. data/test/support/mysql/import_examples.rb +2 -1
  112. data/test/support/postgresql/import_examples.rb +40 -1
  113. data/test/support/shared_examples/on_duplicate_key_ignore.rb +2 -0
  114. data/test/support/shared_examples/on_duplicate_key_update.rb +2 -0
  115. data/test/support/shared_examples/recursive_import.rb +2 -0
  116. data/test/support/sqlite3/import_examples.rb +2 -1
  117. data/test/synchronize_test.rb +2 -0
  118. data/test/test_helper.rb +8 -0
  119. data/test/value_sets_bytes_parser_test.rb +2 -0
  120. data/test/value_sets_records_parser_test.rb +2 -0
  121. metadata +5 -3
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'active_support/core_ext/array'
2
4
 
3
5
  module ActiveRecord::Import
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActiveRecord
2
4
  module Import
3
- VERSION = "1.4.0".freeze
5
+ VERSION = "1.4.1"
4
6
  end
5
7
  end
@@ -1,4 +1,6 @@
1
- # rubocop:disable Style/FileName
1
+ # rubocop:disable Naming/FileName
2
+ # frozen_string_literal: true
3
+
2
4
  require "active_support/lazy_load_hooks"
3
5
 
4
6
  ActiveSupport.on_load(:active_record) do
@@ -1 +1,3 @@
1
+ # frozen_string_literal: true
2
+
1
3
  ENV["ARE_DB"] = "jdbcmysql"
@@ -1 +1,3 @@
1
+ # frozen_string_literal: true
2
+
1
3
  ENV["ARE_DB"] = "jdbcpostgresql"
@@ -1 +1,3 @@
1
+ # frozen_string_literal: true
2
+
1
3
  ENV["ARE_DB"] = "jdbcsqlite3"
@@ -1 +1,3 @@
1
+ # frozen_string_literal: true
2
+
1
3
  ENV["ARE_DB"] = "postgis"
@@ -1 +1,3 @@
1
+ # frozen_string_literal: true
2
+
1
3
  ENV["ARE_DB"] = "mysql2"
@@ -1 +1,3 @@
1
+ # frozen_string_literal: true
2
+
1
3
  ENV["ARE_DB"] = "mysql2_makara"
@@ -1 +1,3 @@
1
+ # frozen_string_literal: true
2
+
1
3
  ENV["ARE_DB"] = "mysql2spatial"
@@ -1 +1,3 @@
1
+ # frozen_string_literal: true
2
+
1
3
  ENV["ARE_DB"] = "postgis"
@@ -1 +1,3 @@
1
+ # frozen_string_literal: true
2
+
1
3
  ENV["ARE_DB"] = "postgresql"
@@ -1 +1,3 @@
1
+ # frozen_string_literal: true
2
+
1
3
  ENV["ARE_DB"] = "postgresql"
@@ -1 +1,3 @@
1
+ # frozen_string_literal: true
2
+
1
3
  ENV["ARE_DB"] = "seamless_database_pool"
@@ -1 +1,3 @@
1
+ # frozen_string_literal: true
2
+
1
3
  ENV["ARE_DB"] = "spatialite"
@@ -1 +1,3 @@
1
+ # frozen_string_literal: true
2
+
1
3
  ENV["ARE_DB"] = "sqlite3"
data/test/import_test.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require File.expand_path('../test_helper', __FILE__)
2
4
 
3
5
  describe "#import" do
@@ -159,6 +161,25 @@ describe "#import" do
159
161
  Tag.import columns, values, validate: false
160
162
  end
161
163
  end
164
+
165
+ it "should import models that are required to belong to models with composite primary keys" do
166
+ tag = Tag.create!(tag_id: 1, publisher_id: 1, tag: 'Mystery')
167
+ valid_tag_alias = TagAlias.new(tag_id: tag.tag_id, parent_id: tag.publisher_id, alias: 'Detective')
168
+ invalid_tag_aliases = [
169
+ TagAlias.new(tag_id: nil, parent_id: nil, alias: 'Detective'),
170
+ TagAlias.new(tag_id: tag.tag_id, parent_id: nil, alias: 'Detective'),
171
+ TagAlias.new(tag_id: nil, parent_id: tag.publisher_id, alias: 'Detective'),
172
+ ]
173
+
174
+ assert_difference "TagAlias.count", +1 do
175
+ TagAlias.import [valid_tag_alias]
176
+ end
177
+ invalid_tag_aliases.each do |invalid_tag_alias|
178
+ assert_no_difference "TagAlias.count" do
179
+ TagAlias.import [invalid_tag_alias]
180
+ end
181
+ end
182
+ end
162
183
  end
163
184
  end
164
185
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
2
4
  require File.expand_path(File.dirname(__FILE__) + '/../support/assertions')
3
5
  require File.expand_path(File.dirname(__FILE__) + '/../support/mysql/import_examples')
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
2
4
  require File.expand_path(File.dirname(__FILE__) + '/../support/postgresql/import_examples')
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
2
4
  require File.expand_path(File.dirname(__FILE__) + '/../support/sqlite3/import_examples')
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
2
4
  require File.expand_path(File.dirname(__FILE__) + '/../support/postgresql/import_examples')
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Account < ActiveRecord::Base
2
4
  self.locking_column = :lock
3
5
  end
data/test/models/alarm.rb CHANGED
@@ -1,2 +1,4 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Alarm < ActiveRecord::Base
2
4
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Animal < ActiveRecord::Base
2
4
  after_initialize :validate_name_presence, if: :new_record?
3
5
  def validate_name_presence
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Bike
2
4
  def self.table_name_prefix
3
5
  'bike_'
data/test/models/book.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Book < ActiveRecord::Base
2
4
  belongs_to :topic, inverse_of: :books
3
5
  belongs_to :tag, foreign_key: [:tag_id, :parent_id]
data/test/models/car.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Car < ActiveRecord::Base
2
4
  self.primary_key = :Name
3
5
  end
data/test/models/card.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Card < ActiveRecord::Base
2
4
  belongs_to :deck, polymorphic: true
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Chapter < ActiveRecord::Base
2
4
  belongs_to :book, inverse_of: :chapters
3
5
  validates :title, presence: true
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Customer < ActiveRecord::Base
2
4
  has_many :orders,
3
5
  inverse_of: :customer,
data/test/models/deck.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Deck < ActiveRecord::Base
2
4
  has_many :cards
3
5
  def self.polymorphic_name
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'book'
2
4
 
3
5
  class Dictionary < Book
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Discount < ActiveRecord::Base
2
4
  belongs_to :discountable, polymorphic: true
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class EndNote < ActiveRecord::Base
2
4
  belongs_to :book, inverse_of: :end_notes
3
5
  validates :note, presence: true
data/test/models/group.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Group < ActiveRecord::Base
2
4
  self.table_name = 'group'
3
5
  end
data/test/models/order.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Order < ActiveRecord::Base
2
4
  belongs_to :customer,
3
5
  inverse_of: :orders,
@@ -1,2 +1,4 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class PlayingCard < ActiveRecord::Base
2
4
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Promotion < ActiveRecord::Base
2
4
  self.primary_key = :promotion_id
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Question < ActiveRecord::Base
2
4
  has_one :rule
3
5
  end
data/test/models/rule.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Rule < ActiveRecord::Base
2
4
  belongs_to :question
3
5
  end
data/test/models/tag.rb CHANGED
@@ -1,4 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Tag < ActiveRecord::Base
2
4
  self.primary_keys = :tag_id, :publisher_id unless ENV["SKIP_COMPOSITE_PK"]
3
5
  has_many :books, inverse_of: :tag
6
+ has_many :tag_aliases, inverse_of: :tag
4
7
  end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ class TagAlias < ActiveRecord::Base
4
+ belongs_to :tag, foreign_key: [:tag_id, :parent_id], required: true
5
+ end
data/test/models/topic.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Topic < ActiveRecord::Base
2
4
  validates_presence_of :author_name
3
5
  validates :title, numericality: { only_integer: true }, on: :context_test
data/test/models/user.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class User < ActiveRecord::Base
2
4
  has_many :user_tokens, primary_key: :name, foreign_key: :user_name
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class UserToken < ActiveRecord::Base
2
4
  belongs_to :user, primary_key: :name, foreign_key: :user_name
3
5
  validates :user, presence: true
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Vendor < ActiveRecord::Base
2
4
  store :preferences, accessors: [:color], coder: JSON
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class CustomCoder
2
4
  def load(value)
3
5
  if value.nil?
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
2
4
  require File.expand_path(File.dirname(__FILE__) + '/../support/assertions')
3
5
  require File.expand_path(File.dirname(__FILE__) + '/../support/mysql/import_examples')
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
2
4
 
3
5
  require File.expand_path(File.dirname(__FILE__) + '/../support/assertions')
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
2
4
 
3
5
  require File.expand_path(File.dirname(__FILE__) + '/../support/assertions')
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
2
4
  require File.expand_path(File.dirname(__FILE__) + '/../support/postgresql/import_examples')
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
2
4
  require File.expand_path(File.dirname(__FILE__) + '/../support/postgresql/import_examples')
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  ActiveRecord::Schema.define do
2
4
  create_table :schema_info, force: :cascade do |t|
3
5
  t.integer :version, unique: true
@@ -204,6 +206,12 @@ ActiveRecord::Schema.define do
204
206
  PRIMARY KEY (tag_id, publisher_id)
205
207
  );
206
208
  ).split.join(' ').strip
209
+
210
+ create_table :tag_aliases, force: :cascade do |t|
211
+ t.integer :tag_id, null: false
212
+ t.integer :parent_id, null: false
213
+ t.string :alias, null: false
214
+ end
207
215
  end
208
216
 
209
217
  create_table :customers, force: :cascade do |t|
@@ -1 +1,3 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require File.expand_path(File.dirname(__FILE__) + '/postgresql_schema')
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  ActiveRecord::Schema.define do
2
4
  create_table :books, force: :cascade do |t|
3
5
  t.string :title, null: false
@@ -1 +1,3 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require File.expand_path(File.dirname(__FILE__) + '/postgresql_schema')
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  ActiveRecord::Schema.define do
2
4
  execute('CREATE extension IF NOT EXISTS "hstore";')
3
5
  execute('CREATE extension IF NOT EXISTS "pgcrypto";')
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  ActiveRecord::Schema.define do
2
4
  create_table :alarms, force: true do |t|
3
5
  t.column :device_id, :integer, null: false
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class SchemaInfo < ActiveRecord::Base
2
4
  if respond_to?(:table_name=)
3
5
  self.table_name = 'schema_info'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
2
4
  require File.expand_path(File.dirname(__FILE__) + '/../support/sqlite3/import_examples')
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class ActiveSupport::TestCase
2
4
  include ActiveRecord::TestFixtures
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class ActiveSupport::TestCase
2
4
  module ImportAssertions
3
5
  def self.extended(klass)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  FactoryBot.define do
2
4
  sequence(:book_title) { |n| "Book #{n}" }
3
5
  sequence(:chapter_title) { |n| "Chapter #{n}" }
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class ActiveSupport::TestCase
2
- def Build(*args) # rubocop:disable Style/MethodName
4
+ def Build(*args) # rubocop:disable Naming/MethodName
3
5
  n = args.shift if args.first.is_a?(Numeric)
4
6
  factory = args.shift
5
7
  factory_bot_args = args.shift || {}
@@ -13,7 +15,7 @@ class ActiveSupport::TestCase
13
15
  end
14
16
  end
15
17
 
16
- def Generate(*args) # rubocop:disable Style/MethodName
18
+ def Generate(*args) # rubocop:disable Naming/MethodName
17
19
  n = args.shift if args.first.is_a?(Numeric)
18
20
  factory = args.shift
19
21
  factory_bot_args = args.shift || {}
@@ -1,4 +1,5 @@
1
- # encoding: UTF-8
1
+ # frozen_string_literal: true
2
+
2
3
  def should_support_mysql_import_functionality
3
4
  # Forcefully disable strict mode for this session.
4
5
  ActiveRecord::Base.connection.execute "set sql_mode='STRICT_ALL_TABLES'"
@@ -1,4 +1,5 @@
1
- # encoding: UTF-8
1
+ # frozen_string_literal: true
2
+
2
3
  def should_support_postgresql_import_functionality
3
4
  should_support_recursive_import
4
5
 
@@ -102,6 +103,8 @@ def should_support_postgresql_import_functionality
102
103
  books.first.id.to_s
103
104
  end
104
105
  end
106
+ let(:true_returning_value) { ENV['AR_VERSION'].to_f >= 5.0 ? true : 't' }
107
+ let(:false_returning_value) { ENV['AR_VERSION'].to_f >= 5.0 ? false : 'f' }
105
108
 
106
109
  it "creates records" do
107
110
  assert_difference("Book.count", +1) { result }
@@ -150,6 +153,34 @@ def should_support_postgresql_import_functionality
150
153
  end
151
154
  end
152
155
 
156
+ context "when returning is raw sql" do
157
+ let(:result) { Book.import(books, returning: "title, (xmax = '0') AS inserted") }
158
+
159
+ setup { result }
160
+
161
+ it "returns ids" do
162
+ assert_equal [book_id], result.ids
163
+ end
164
+
165
+ it "returns specified columns" do
166
+ assert_equal [['It', true_returning_value]], result.results
167
+ end
168
+ end
169
+
170
+ context "when returning contains raw sql" do
171
+ let(:result) { Book.import(books, returning: [:title, "id, (xmax = '0') AS inserted"]) }
172
+
173
+ setup { result }
174
+
175
+ it "returns ids" do
176
+ assert_equal [book_id], result.ids
177
+ end
178
+
179
+ it "returns specified columns" do
180
+ assert_equal [['It', book_id, true_returning_value]], result.results
181
+ end
182
+ end
183
+
153
184
  context "setting model attributes" do
154
185
  let(:code) { 'abc' }
155
186
  let(:discount) { 0.10 }
@@ -179,6 +210,14 @@ def should_support_postgresql_import_functionality
179
210
  assert_equal updated_promotion.discount, discount
180
211
  end
181
212
  end
213
+
214
+ context 'returning raw sql' do
215
+ let(:returning_columns) { [:discount, "(xmax = '0') AS inserted"] }
216
+
217
+ it "sets custom model attributes" do
218
+ assert_equal updated_promotion.inserted, false_returning_value
219
+ end
220
+ end
182
221
  end
183
222
  end
184
223
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  def should_support_on_duplicate_key_ignore
2
4
  describe "#import" do
3
5
  extend ActiveSupport::TestCase::ImportAssertions
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  def should_support_basic_on_duplicate_key_update
2
4
  describe "#import" do
3
5
  extend ActiveSupport::TestCase::ImportAssertions
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  def should_support_recursive_import
2
4
  describe "importing objects with associations" do
3
5
  let(:new_topics) { Build(num_topics, :topic_with_book) }
@@ -1,4 +1,5 @@
1
- # encoding: UTF-8
1
+ # frozen_string_literal: true
2
+
2
3
  def should_support_sqlite3_import_functionality
3
4
  if ActiveRecord::Base.connection.supports_on_duplicate_key_update?
4
5
  should_support_sqlite_upsert_functionality
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require File.expand_path('../test_helper', __FILE__)
2
4
 
3
5
  describe ".synchronize" do
data/test/test_helper.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'pathname'
2
4
  require 'rake'
3
5
  test_dir = Pathname.new File.dirname(__FILE__)
@@ -50,6 +52,12 @@ FileUtils.mkdir_p 'log'
50
52
  ActiveRecord::Base.logger = Logger.new("log/test.log")
51
53
  ActiveRecord::Base.logger.level = Logger::DEBUG
52
54
 
55
+ if ActiveRecord.respond_to?(:use_yaml_unsafe_load)
56
+ ActiveRecord.use_yaml_unsafe_load = true
57
+ elsif ActiveRecord::Base.respond_to?(:use_yaml_unsafe_load)
58
+ ActiveRecord::Base.use_yaml_unsafe_load = true
59
+ end
60
+
53
61
  if ENV['AR_VERSION'].to_f >= 6.0
54
62
  yaml_config = if Gem::Version.new(Psych::VERSION) >= Gem::Version.new('3.2.1')
55
63
  YAML.safe_load_file(test_dir.join("database.yml"), aliases: true)[adapter]
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require File.expand_path(File.dirname(__FILE__) + '/test_helper')
2
4
 
3
5
  require 'activerecord-import/value_sets_parser'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require File.expand_path(File.dirname(__FILE__) + '/test_helper')
2
4
 
3
5
  require 'activerecord-import/value_sets_parser'