activerecord-import 1.4.0 → 1.4.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +74 -8
- data/Brewfile +3 -1
- data/CHANGELOG.md +6 -0
- data/Gemfile +3 -1
- data/README.markdown +2 -2
- data/Rakefile +2 -0
- data/activerecord-import.gemspec +2 -1
- data/benchmarks/benchmark.rb +2 -0
- data/benchmarks/lib/base.rb +2 -0
- data/benchmarks/lib/cli_parser.rb +3 -1
- data/benchmarks/lib/float.rb +2 -0
- data/benchmarks/lib/mysql2_benchmark.rb +2 -0
- data/benchmarks/lib/output_to_csv.rb +2 -0
- data/benchmarks/lib/output_to_html.rb +4 -2
- data/benchmarks/models/test_innodb.rb +2 -0
- data/benchmarks/models/test_memory.rb +2 -0
- data/benchmarks/models/test_myisam.rb +2 -0
- data/benchmarks/schema/mysql2_schema.rb +2 -0
- data/gemfiles/4.2.gemfile +2 -0
- data/gemfiles/5.0.gemfile +2 -0
- data/gemfiles/5.1.gemfile +2 -0
- data/gemfiles/5.2.gemfile +2 -0
- data/gemfiles/6.0.gemfile +2 -0
- data/gemfiles/6.1.gemfile +2 -0
- data/gemfiles/7.0.gemfile +3 -0
- data/lib/activerecord-import/active_record/adapters/abstract_adapter.rb +2 -0
- data/lib/activerecord-import/active_record/adapters/jdbcmysql_adapter.rb +2 -0
- data/lib/activerecord-import/active_record/adapters/jdbcpostgresql_adapter.rb +2 -0
- data/lib/activerecord-import/active_record/adapters/jdbcsqlite3_adapter.rb +2 -0
- data/lib/activerecord-import/active_record/adapters/mysql2_adapter.rb +2 -0
- data/lib/activerecord-import/active_record/adapters/postgresql_adapter.rb +2 -0
- data/lib/activerecord-import/active_record/adapters/seamless_database_pool_adapter.rb +2 -0
- data/lib/activerecord-import/active_record/adapters/sqlite3_adapter.rb +2 -0
- data/lib/activerecord-import/adapters/abstract_adapter.rb +2 -0
- data/lib/activerecord-import/adapters/em_mysql2_adapter.rb +2 -0
- data/lib/activerecord-import/adapters/mysql2_adapter.rb +2 -0
- data/lib/activerecord-import/adapters/mysql_adapter.rb +2 -0
- data/lib/activerecord-import/adapters/postgresql_adapter.rb +37 -24
- data/lib/activerecord-import/adapters/sqlite3_adapter.rb +4 -2
- data/lib/activerecord-import/base.rb +3 -1
- data/lib/activerecord-import/import.rb +21 -10
- data/lib/activerecord-import/mysql2.rb +2 -0
- data/lib/activerecord-import/postgresql.rb +2 -0
- data/lib/activerecord-import/sqlite3.rb +2 -0
- data/lib/activerecord-import/synchronize.rb +2 -0
- data/lib/activerecord-import/value_sets_parser.rb +2 -0
- data/lib/activerecord-import/version.rb +3 -1
- data/lib/activerecord-import.rb +3 -1
- data/test/adapters/jdbcmysql.rb +2 -0
- data/test/adapters/jdbcpostgresql.rb +2 -0
- data/test/adapters/jdbcsqlite3.rb +2 -0
- data/test/adapters/makara_postgis.rb +2 -0
- data/test/adapters/mysql2.rb +2 -0
- data/test/adapters/mysql2_makara.rb +2 -0
- data/test/adapters/mysql2spatial.rb +2 -0
- data/test/adapters/postgis.rb +2 -0
- data/test/adapters/postgresql.rb +2 -0
- data/test/adapters/postgresql_makara.rb +2 -0
- data/test/adapters/seamless_database_pool.rb +2 -0
- data/test/adapters/spatialite.rb +2 -0
- data/test/adapters/sqlite3.rb +2 -0
- data/test/import_test.rb +21 -0
- data/test/jdbcmysql/import_test.rb +2 -0
- data/test/jdbcpostgresql/import_test.rb +2 -0
- data/test/jdbcsqlite3/import_test.rb +2 -0
- data/test/makara_postgis/import_test.rb +2 -0
- data/test/models/account.rb +2 -0
- data/test/models/alarm.rb +2 -0
- data/test/models/animal.rb +2 -0
- data/test/models/bike_maker.rb +2 -0
- data/test/models/book.rb +2 -0
- data/test/models/car.rb +2 -0
- data/test/models/card.rb +2 -0
- data/test/models/chapter.rb +2 -0
- data/test/models/customer.rb +2 -0
- data/test/models/deck.rb +2 -0
- data/test/models/dictionary.rb +2 -0
- data/test/models/discount.rb +2 -0
- data/test/models/end_note.rb +2 -0
- data/test/models/group.rb +2 -0
- data/test/models/order.rb +2 -0
- data/test/models/playing_card.rb +2 -0
- data/test/models/promotion.rb +2 -0
- data/test/models/question.rb +2 -0
- data/test/models/rule.rb +2 -0
- data/test/models/tag.rb +3 -0
- data/test/models/tag_alias.rb +5 -0
- data/test/models/topic.rb +2 -0
- data/test/models/user.rb +2 -0
- data/test/models/user_token.rb +2 -0
- data/test/models/vendor.rb +2 -0
- data/test/models/widget.rb +2 -0
- data/test/mysql2/import_test.rb +2 -0
- data/test/mysql2_makara/import_test.rb +2 -0
- data/test/mysqlspatial2/import_test.rb +2 -0
- data/test/postgis/import_test.rb +2 -0
- data/test/postgresql/import_test.rb +2 -0
- data/test/schema/generic_schema.rb +8 -0
- data/test/schema/jdbcpostgresql_schema.rb +2 -0
- data/test/schema/mysql2_schema.rb +2 -0
- data/test/schema/postgis_schema.rb +2 -0
- data/test/schema/postgresql_schema.rb +2 -0
- data/test/schema/sqlite3_schema.rb +2 -0
- data/test/schema/version.rb +2 -0
- data/test/sqlite3/import_test.rb +2 -0
- data/test/support/active_support/test_case_extensions.rb +2 -0
- data/test/support/assertions.rb +2 -0
- data/test/support/factories.rb +2 -0
- data/test/support/generate.rb +4 -2
- data/test/support/mysql/import_examples.rb +2 -1
- data/test/support/postgresql/import_examples.rb +40 -1
- data/test/support/shared_examples/on_duplicate_key_ignore.rb +2 -0
- data/test/support/shared_examples/on_duplicate_key_update.rb +2 -0
- data/test/support/shared_examples/recursive_import.rb +2 -0
- data/test/support/sqlite3/import_examples.rb +2 -1
- data/test/synchronize_test.rb +2 -0
- data/test/test_helper.rb +8 -0
- data/test/value_sets_bytes_parser_test.rb +2 -0
- data/test/value_sets_records_parser_test.rb +2 -0
- metadata +5 -3
data/lib/activerecord-import.rb
CHANGED
data/test/adapters/jdbcmysql.rb
CHANGED
data/test/adapters/mysql2.rb
CHANGED
data/test/adapters/postgis.rb
CHANGED
data/test/adapters/postgresql.rb
CHANGED
data/test/adapters/spatialite.rb
CHANGED
data/test/adapters/sqlite3.rb
CHANGED
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
|
|
data/test/models/account.rb
CHANGED
data/test/models/alarm.rb
CHANGED
data/test/models/animal.rb
CHANGED
data/test/models/bike_maker.rb
CHANGED
data/test/models/book.rb
CHANGED
data/test/models/car.rb
CHANGED
data/test/models/card.rb
CHANGED
data/test/models/chapter.rb
CHANGED
data/test/models/customer.rb
CHANGED
data/test/models/deck.rb
CHANGED
data/test/models/dictionary.rb
CHANGED
data/test/models/discount.rb
CHANGED
data/test/models/end_note.rb
CHANGED
data/test/models/group.rb
CHANGED
data/test/models/order.rb
CHANGED
data/test/models/playing_card.rb
CHANGED
data/test/models/promotion.rb
CHANGED
data/test/models/question.rb
CHANGED
data/test/models/rule.rb
CHANGED
data/test/models/tag.rb
CHANGED
data/test/models/topic.rb
CHANGED
data/test/models/user.rb
CHANGED
data/test/models/user_token.rb
CHANGED
data/test/models/vendor.rb
CHANGED
data/test/models/widget.rb
CHANGED
data/test/mysql2/import_test.rb
CHANGED
data/test/postgis/import_test.rb
CHANGED
@@ -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|
|
data/test/schema/version.rb
CHANGED
data/test/sqlite3/import_test.rb
CHANGED
data/test/support/assertions.rb
CHANGED
data/test/support/factories.rb
CHANGED
data/test/support/generate.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class ActiveSupport::TestCase
|
2
|
-
def Build(*args) # rubocop:disable
|
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
|
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
|
-
#
|
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
|
data/test/synchronize_test.rb
CHANGED
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]
|