activerecord-import 0.14.1 → 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.
- checksums.yaml +5 -5
- data/.github/workflows/test.yaml +107 -0
- data/.gitignore +1 -0
- data/.rubocop.yml +74 -8
- data/Brewfile +3 -1
- data/CHANGELOG.md +448 -2
- data/Gemfile +26 -19
- data/LICENSE +21 -56
- data/README.markdown +568 -32
- data/Rakefile +5 -1
- data/activerecord-import.gemspec +8 -7
- data/benchmarks/README +2 -2
- data/benchmarks/benchmark.rb +8 -1
- data/benchmarks/lib/base.rb +2 -0
- data/benchmarks/lib/cli_parser.rb +5 -2
- 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/{mysql_schema.rb → mysql2_schema.rb} +2 -0
- data/gemfiles/4.2.gemfile +4 -3
- data/gemfiles/5.0.gemfile +4 -3
- data/gemfiles/5.1.gemfile +4 -0
- data/gemfiles/5.2.gemfile +4 -0
- data/gemfiles/6.0.gemfile +4 -0
- data/gemfiles/6.1.gemfile +4 -0
- data/gemfiles/7.0.gemfile +4 -0
- data/lib/activerecord-import/active_record/adapters/abstract_adapter.rb +2 -0
- data/lib/activerecord-import/active_record/adapters/jdbcmysql_adapter.rb +6 -4
- data/lib/activerecord-import/active_record/adapters/jdbcpostgresql_adapter.rb +2 -0
- data/lib/activerecord-import/active_record/adapters/jdbcsqlite3_adapter.rb +8 -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 +12 -16
- 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 +35 -18
- data/lib/activerecord-import/adapters/postgresql_adapter.rb +107 -28
- data/lib/activerecord-import/adapters/sqlite3_adapter.rb +141 -18
- data/lib/activerecord-import/base.rb +15 -8
- data/lib/activerecord-import/import.rb +642 -178
- 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 +5 -3
- data/lib/activerecord-import/value_sets_parser.rb +29 -3
- data/lib/activerecord-import/version.rb +3 -1
- data/lib/activerecord-import.rb +5 -16
- data/test/adapters/jdbcmysql.rb +2 -0
- data/test/adapters/jdbcpostgresql.rb +2 -0
- data/test/adapters/jdbcsqlite3.rb +3 -0
- data/test/adapters/makara_postgis.rb +3 -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/{travis → github}/database.yml +7 -1
- data/test/import_test.rb +498 -32
- data/test/jdbcmysql/import_test.rb +2 -1
- data/test/jdbcpostgresql/import_test.rb +2 -1
- data/test/jdbcsqlite3/import_test.rb +6 -0
- data/test/makara_postgis/import_test.rb +10 -0
- data/test/models/account.rb +5 -0
- data/test/models/alarm.rb +4 -0
- data/test/models/animal.rb +8 -0
- data/test/models/bike_maker.rb +9 -0
- data/test/models/book.rb +4 -0
- data/test/models/car.rb +5 -0
- data/test/models/card.rb +5 -0
- data/test/models/chapter.rb +2 -0
- data/test/models/customer.rb +8 -0
- data/test/models/deck.rb +8 -0
- data/test/models/dictionary.rb +6 -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 +8 -0
- data/test/models/playing_card.rb +4 -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 +7 -0
- data/test/models/tag_alias.rb +5 -0
- data/test/models/topic.rb +16 -0
- data/test/models/user.rb +5 -0
- data/test/models/user_token.rb +6 -0
- data/test/models/vendor.rb +9 -0
- data/test/models/widget.rb +18 -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 +6 -0
- data/test/postgresql/import_test.rb +2 -4
- data/test/schema/generic_schema.rb +88 -3
- data/test/schema/jdbcpostgresql_schema.rb +3 -0
- data/test/schema/mysql2_schema.rb +21 -0
- data/test/schema/postgis_schema.rb +3 -0
- data/test/schema/postgresql_schema.rb +63 -0
- data/test/schema/sqlite3_schema.rb +15 -0
- data/test/schema/version.rb +2 -0
- data/test/sqlite3/import_test.rb +4 -50
- data/test/support/active_support/test_case_extensions.rb +8 -1
- data/test/support/assertions.rb +2 -0
- data/test/support/factories.rb +17 -8
- data/test/support/generate.rb +10 -8
- data/test/support/mysql/import_examples.rb +17 -3
- data/test/support/postgresql/import_examples.rb +442 -9
- data/test/support/shared_examples/on_duplicate_key_ignore.rb +45 -0
- data/test/support/shared_examples/on_duplicate_key_update.rb +278 -1
- data/test/support/shared_examples/recursive_import.rb +137 -12
- data/test/support/sqlite3/import_examples.rb +232 -0
- data/test/synchronize_test.rb +10 -0
- data/test/test_helper.rb +44 -3
- data/test/value_sets_bytes_parser_test.rb +15 -2
- data/test/value_sets_records_parser_test.rb +2 -0
- metadata +74 -22
- data/.travis.yml +0 -52
- data/gemfiles/3.2.gemfile +0 -3
- data/gemfiles/4.0.gemfile +0 -3
- data/gemfiles/4.1.gemfile +0 -3
- data/test/schema/mysql_schema.rb +0 -16
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
|
4
|
+
require File.expand_path(File.dirname(__FILE__) + '/../support/postgresql/import_examples')
|
|
5
|
+
|
|
6
|
+
should_support_postgresql_import_functionality
|
|
7
|
+
|
|
8
|
+
if ActiveRecord::Base.connection.supports_on_duplicate_key_update?
|
|
9
|
+
should_support_postgresql_upsert_functionality
|
|
10
|
+
end
|
data/test/models/book.rb
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
class Book < ActiveRecord::Base
|
|
2
4
|
belongs_to :topic, inverse_of: :books
|
|
5
|
+
belongs_to :tag, foreign_key: [:tag_id, :parent_id]
|
|
6
|
+
|
|
3
7
|
has_many :chapters, inverse_of: :book
|
|
4
8
|
has_many :discounts, as: :discountable
|
|
5
9
|
has_many :end_notes, inverse_of: :book
|
data/test/models/car.rb
ADDED
data/test/models/card.rb
ADDED
data/test/models/chapter.rb
CHANGED
data/test/models/deck.rb
ADDED
data/test/models/discount.rb
CHANGED
data/test/models/end_note.rb
CHANGED
data/test/models/group.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
ADDED
data/test/models/topic.rb
CHANGED
|
@@ -1,9 +1,25 @@
|
|
|
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
|
|
6
|
+
validates :title, uniqueness: true
|
|
7
|
+
validates :content, uniqueness: true
|
|
8
|
+
validates :word_count, numericality: { greater_than: 0 }, if: :content?
|
|
9
|
+
|
|
10
|
+
validate -> { errors.add(:title, :validate_failed) if title == 'validate_failed' }
|
|
11
|
+
before_validation -> { errors.add(:title, :invalid) if title == 'invalid' }
|
|
4
12
|
|
|
5
13
|
has_many :books, inverse_of: :topic
|
|
6
14
|
belongs_to :parent, class_name: "Topic"
|
|
7
15
|
|
|
8
16
|
composed_of :description, mapping: [%w(title title), %w(author_name author_name)], allow_nil: true, class_name: "TopicDescription"
|
|
17
|
+
|
|
18
|
+
default_scope { where(approved: true) }
|
|
19
|
+
|
|
20
|
+
private
|
|
21
|
+
|
|
22
|
+
def word_count
|
|
23
|
+
@word_count ||= content.to_s.scan(/\w+/).count
|
|
24
|
+
end
|
|
9
25
|
end
|
data/test/models/user.rb
ADDED
data/test/models/widget.rb
CHANGED
|
@@ -1,3 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class CustomCoder
|
|
4
|
+
def load(value)
|
|
5
|
+
if value.nil?
|
|
6
|
+
{}
|
|
7
|
+
else
|
|
8
|
+
YAML.load(value)
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def dump(value)
|
|
13
|
+
YAML.dump(value)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
1
17
|
class Widget < ActiveRecord::Base
|
|
2
18
|
self.primary_key = :w_id
|
|
3
19
|
|
|
@@ -5,4 +21,6 @@ class Widget < ActiveRecord::Base
|
|
|
5
21
|
|
|
6
22
|
serialize :data, Hash
|
|
7
23
|
serialize :json_data, JSON
|
|
24
|
+
serialize :unspecified_data
|
|
25
|
+
serialize :custom_data, CustomCoder.new
|
|
8
26
|
end
|
data/test/mysql2/import_test.rb
CHANGED
data/test/postgis/import_test.rb
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
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
|
|
|
4
6
|
should_support_postgresql_import_functionality
|
|
7
|
+
|
|
8
|
+
if ActiveRecord::Base.connection.supports_on_duplicate_key_update?
|
|
9
|
+
should_support_postgresql_upsert_functionality
|
|
10
|
+
end
|
|
@@ -1,8 +1,6 @@
|
|
|
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
|
|
|
4
6
|
should_support_postgresql_import_functionality
|
|
5
|
-
|
|
6
|
-
if ActiveRecord::Base.connection.supports_on_duplicate_key_update?
|
|
7
|
-
should_support_postgresql_upsert_functionality
|
|
8
|
-
end
|
|
@@ -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
|
|
@@ -52,6 +54,20 @@ ActiveRecord::Schema.define do
|
|
|
52
54
|
t.string :name
|
|
53
55
|
end
|
|
54
56
|
|
|
57
|
+
create_table :cards, force: :cascade do |t|
|
|
58
|
+
t.string :name
|
|
59
|
+
t.string :deck_type
|
|
60
|
+
t.integer :deck_id
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
create_table :decks, force: :cascade do |t|
|
|
64
|
+
t.string :name
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
create_table :playing_cards, force: :cascade do |t|
|
|
68
|
+
t.string :name
|
|
69
|
+
end
|
|
70
|
+
|
|
55
71
|
create_table :books, force: :cascade do |t|
|
|
56
72
|
t.string :title, null: false
|
|
57
73
|
t.string :publisher, null: false, default: 'Default Publisher'
|
|
@@ -62,8 +78,11 @@ ActiveRecord::Schema.define do
|
|
|
62
78
|
t.datetime :updated_on
|
|
63
79
|
t.date :publish_date
|
|
64
80
|
t.integer :topic_id
|
|
81
|
+
t.integer :tag_id
|
|
82
|
+
t.integer :publisher_id
|
|
65
83
|
t.boolean :for_sale, default: true
|
|
66
84
|
t.integer :status, default: 0
|
|
85
|
+
t.string :type
|
|
67
86
|
end
|
|
68
87
|
|
|
69
88
|
create_table :chapters, force: :cascade do |t|
|
|
@@ -73,7 +92,7 @@ ActiveRecord::Schema.define do
|
|
|
73
92
|
t.datetime :updated_at
|
|
74
93
|
end
|
|
75
94
|
|
|
76
|
-
create_table :end_notes, force: :cascade do |t|
|
|
95
|
+
create_table :end_notes, primary_key: :end_note_id, force: :cascade do |t|
|
|
77
96
|
t.string :note
|
|
78
97
|
t.integer :book_id, null: false
|
|
79
98
|
t.datetime :created_at
|
|
@@ -111,10 +130,12 @@ ActiveRecord::Schema.define do
|
|
|
111
130
|
add_index :animals, [:name], unique: true, name: 'uk_animals'
|
|
112
131
|
|
|
113
132
|
create_table :widgets, id: false, force: :cascade do |t|
|
|
114
|
-
t.integer :w_id
|
|
133
|
+
t.integer :w_id, primary_key: true
|
|
115
134
|
t.boolean :active, default: false
|
|
116
135
|
t.text :data
|
|
117
136
|
t.text :json_data
|
|
137
|
+
t.text :unspecified_data
|
|
138
|
+
t.text :custom_data
|
|
118
139
|
end
|
|
119
140
|
|
|
120
141
|
create_table :promotions, primary_key: :promotion_id, force: :cascade do |t|
|
|
@@ -131,7 +152,8 @@ ActiveRecord::Schema.define do
|
|
|
131
152
|
t.string :discountable_type
|
|
132
153
|
end
|
|
133
154
|
|
|
134
|
-
create_table :rules, force: :cascade do |t|
|
|
155
|
+
create_table :rules, id: false, force: :cascade do |t|
|
|
156
|
+
t.integer :id
|
|
135
157
|
t.string :condition_text
|
|
136
158
|
t.integer :question_id
|
|
137
159
|
end
|
|
@@ -139,4 +161,67 @@ ActiveRecord::Schema.define do
|
|
|
139
161
|
create_table :questions, force: :cascade do |t|
|
|
140
162
|
t.string :body
|
|
141
163
|
end
|
|
164
|
+
|
|
165
|
+
create_table :vendors, force: :cascade do |t|
|
|
166
|
+
t.string :name, null: true
|
|
167
|
+
t.text :preferences
|
|
168
|
+
t.text :data
|
|
169
|
+
t.text :config
|
|
170
|
+
t.text :settings
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
create_table :cars, id: false, force: :cascade do |t|
|
|
174
|
+
t.string :Name, null: true
|
|
175
|
+
t.string :Features
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
create_table :users, force: :cascade do |t|
|
|
179
|
+
t.string :name, null: false
|
|
180
|
+
t.integer :lock_version, null: false, default: 0
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
create_table :user_tokens, force: :cascade do |t|
|
|
184
|
+
t.string :user_name, null: false
|
|
185
|
+
t.string :token, null: false
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
create_table :accounts, force: :cascade do |t|
|
|
189
|
+
t.string :name, null: false
|
|
190
|
+
t.integer :lock, null: false, default: 0
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
create_table :bike_makers, force: :cascade do |t|
|
|
194
|
+
t.string :name, null: false
|
|
195
|
+
t.integer :lock_version, null: false, default: 0
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
add_index :cars, :Name, unique: true
|
|
199
|
+
|
|
200
|
+
unless ENV["SKIP_COMPOSITE_PK"]
|
|
201
|
+
execute %(
|
|
202
|
+
CREATE TABLE IF NOT EXISTS tags (
|
|
203
|
+
tag_id INT NOT NULL,
|
|
204
|
+
publisher_id INT NOT NULL,
|
|
205
|
+
tag VARCHAR(50),
|
|
206
|
+
PRIMARY KEY (tag_id, publisher_id)
|
|
207
|
+
);
|
|
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
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
create_table :customers, force: :cascade do |t|
|
|
218
|
+
t.integer :account_id
|
|
219
|
+
t.string :name
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
create_table :orders, force: :cascade do |t|
|
|
223
|
+
t.integer :account_id
|
|
224
|
+
t.integer :customer_id
|
|
225
|
+
t.integer :amount
|
|
226
|
+
end
|
|
142
227
|
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
ActiveRecord::Schema.define do
|
|
4
|
+
create_table :books, force: :cascade do |t|
|
|
5
|
+
t.string :title, null: false
|
|
6
|
+
t.virtual :upper_title, type: :string, as: "upper(`title`)" if t.respond_to?(:virtual)
|
|
7
|
+
t.string :publisher, null: false, default: 'Default Publisher'
|
|
8
|
+
t.string :author_name, null: false
|
|
9
|
+
t.datetime :created_at
|
|
10
|
+
t.datetime :created_on
|
|
11
|
+
t.datetime :updated_at
|
|
12
|
+
t.datetime :updated_on
|
|
13
|
+
t.date :publish_date
|
|
14
|
+
t.integer :topic_id
|
|
15
|
+
t.integer :tag_id
|
|
16
|
+
t.integer :publisher_id
|
|
17
|
+
t.boolean :for_sale, default: true
|
|
18
|
+
t.integer :status, default: 0
|
|
19
|
+
t.string :type
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
ActiveRecord::Schema.define do
|
|
4
|
+
execute('CREATE extension IF NOT EXISTS "hstore";')
|
|
5
|
+
execute('CREATE extension IF NOT EXISTS "pgcrypto";')
|
|
6
|
+
execute('CREATE extension IF NOT EXISTS "uuid-ossp";')
|
|
7
|
+
|
|
8
|
+
# create ENUM if it does not exist yet
|
|
9
|
+
begin
|
|
10
|
+
execute('CREATE TYPE vendor_type AS ENUM (\'wholesaler\', \'retailer\');')
|
|
11
|
+
rescue ActiveRecord::StatementInvalid => e
|
|
12
|
+
# since PostgreSQL does not support IF NOT EXISTS when creating a TYPE,
|
|
13
|
+
# rescue the error and check the error class
|
|
14
|
+
raise unless e.cause.is_a? PG::DuplicateObject
|
|
15
|
+
execute('ALTER TYPE vendor_type ADD VALUE IF NOT EXISTS \'wholesaler\';')
|
|
16
|
+
execute('ALTER TYPE vendor_type ADD VALUE IF NOT EXISTS \'retailer\';')
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
create_table :vendors, id: :uuid, force: :cascade do |t|
|
|
20
|
+
t.string :name, null: true
|
|
21
|
+
t.text :hours
|
|
22
|
+
t.text :preferences
|
|
23
|
+
|
|
24
|
+
if t.respond_to?(:json)
|
|
25
|
+
t.json :pure_json_data
|
|
26
|
+
t.json :data
|
|
27
|
+
else
|
|
28
|
+
t.text :data
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
if t.respond_to?(:hstore)
|
|
32
|
+
t.hstore :config
|
|
33
|
+
else
|
|
34
|
+
t.text :config
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
if t.respond_to?(:jsonb)
|
|
38
|
+
t.jsonb :pure_jsonb_data
|
|
39
|
+
t.jsonb :settings
|
|
40
|
+
t.jsonb :json_data, null: false, default: {}
|
|
41
|
+
else
|
|
42
|
+
t.text :settings
|
|
43
|
+
t.text :json_data
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
t.column :vendor_type, :vendor_type
|
|
47
|
+
|
|
48
|
+
t.datetime :created_at
|
|
49
|
+
t.datetime :updated_at
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
create_table :alarms, force: true do |t|
|
|
53
|
+
t.column :device_id, :integer, null: false
|
|
54
|
+
t.column :alarm_type, :integer, null: false
|
|
55
|
+
t.column :status, :integer, null: false
|
|
56
|
+
t.column :metadata, :text
|
|
57
|
+
t.column :secret_key, :binary
|
|
58
|
+
t.datetime :created_at
|
|
59
|
+
t.datetime :updated_at
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
add_index :alarms, [:device_id, :alarm_type], unique: true, where: 'status <> 0'
|
|
63
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
ActiveRecord::Schema.define do
|
|
4
|
+
create_table :alarms, force: true do |t|
|
|
5
|
+
t.column :device_id, :integer, null: false
|
|
6
|
+
t.column :alarm_type, :integer, null: false
|
|
7
|
+
t.column :status, :integer, null: false
|
|
8
|
+
t.column :metadata, :text
|
|
9
|
+
t.column :secret_key, :binary
|
|
10
|
+
t.datetime :created_at
|
|
11
|
+
t.datetime :updated_at
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
add_index :alarms, [:device_id, :alarm_type], unique: true, where: 'status <> 0'
|
|
15
|
+
end
|
data/test/schema/version.rb
CHANGED
data/test/sqlite3/import_test.rb
CHANGED
|
@@ -1,52 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
should_support_recursive_import
|
|
4
|
-
|
|
5
|
-
describe "#supports_imports?" do
|
|
6
|
-
context "and SQLite is 3.7.11 or higher" do
|
|
7
|
-
it "supports import" do
|
|
8
|
-
version = ActiveRecord::ConnectionAdapters::SQLite3Adapter::Version.new("3.7.11")
|
|
9
|
-
assert ActiveRecord::Base.supports_import?(version)
|
|
10
|
-
|
|
11
|
-
version = ActiveRecord::ConnectionAdapters::SQLite3Adapter::Version.new("3.7.12")
|
|
12
|
-
assert ActiveRecord::Base.supports_import?(version)
|
|
13
|
-
end
|
|
14
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
15
2
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
version = ActiveRecord::ConnectionAdapters::SQLite3Adapter::Version.new("3.7.10")
|
|
19
|
-
assert !ActiveRecord::Base.supports_import?(version)
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
describe "#import" do
|
|
25
|
-
it "imports with a single insert on SQLite 3.7.11 or higher" do
|
|
26
|
-
assert_difference "Topic.count", +507 do
|
|
27
|
-
result = Topic.import Build(7, :topics)
|
|
28
|
-
assert_equal 1, result.num_inserts, "Failed to issue a single INSERT statement. Make sure you have a supported version of SQLite3 (3.7.11 or higher) installed"
|
|
29
|
-
assert_equal 7, Topic.count, "Failed to insert all records. Make sure you have a supported version of SQLite3 (3.7.11 or higher) installed"
|
|
30
|
-
|
|
31
|
-
result = Topic.import Build(500, :topics)
|
|
32
|
-
assert_equal 1, result.num_inserts, "Failed to issue a single INSERT statement. Make sure you have a supported version of SQLite3 (3.7.11 or higher) installed"
|
|
33
|
-
assert_equal 507, Topic.count, "Failed to insert all records. Make sure you have a supported version of SQLite3 (3.7.11 or higher) installed"
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
it "imports with a two inserts on SQLite 3.7.11 or higher" do
|
|
38
|
-
assert_difference "Topic.count", +501 do
|
|
39
|
-
result = Topic.import Build(501, :topics)
|
|
40
|
-
assert_equal 2, result.num_inserts, "Failed to issue a two INSERT statements. Make sure you have a supported version of SQLite3 (3.7.11 or higher) installed"
|
|
41
|
-
assert_equal 501, Topic.count, "Failed to insert all records. Make sure you have a supported version of SQLite3 (3.7.11 or higher) installed"
|
|
42
|
-
end
|
|
43
|
-
end
|
|
3
|
+
require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
|
4
|
+
require File.expand_path(File.dirname(__FILE__) + '/../support/sqlite3/import_examples')
|
|
44
5
|
|
|
45
|
-
|
|
46
|
-
assert_difference "Topic.count", +2500 do
|
|
47
|
-
result = Topic.import Build(2500, :topics)
|
|
48
|
-
assert_equal 5, result.num_inserts, "Failed to issue a two INSERT statements. Make sure you have a supported version of SQLite3 (3.7.11 or higher) installed"
|
|
49
|
-
assert_equal 2500, Topic.count, "Failed to insert all records. Make sure you have a supported version of SQLite3 (3.7.11 or higher) installed"
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
end
|
|
6
|
+
should_support_sqlite3_import_functionality
|
|
@@ -1,6 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
class ActiveSupport::TestCase
|
|
2
4
|
include ActiveRecord::TestFixtures
|
|
3
|
-
|
|
5
|
+
|
|
6
|
+
if ENV['AR_VERSION'].to_f >= 5.0
|
|
7
|
+
self.use_transactional_tests = true
|
|
8
|
+
else
|
|
9
|
+
self.use_transactional_fixtures = true
|
|
10
|
+
end
|
|
4
11
|
|
|
5
12
|
class << self
|
|
6
13
|
def requires_active_record_version(version_string, &blk)
|