Skip to content

Commit 4a69aff

Browse files
authored
Restore rails < 5 mysql support (#78)
* Restore rails < 5 mysql support * Fix rails 3 tests
1 parent c255d4a commit 4a69aff

5 files changed

Lines changed: 119 additions & 5 deletions

File tree

.travis.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ env:
2222
matrix:
2323
allow_failures:
2424
- rvm: ruby-head
25-
- env: DB_ADAPTER=mysql
2625
include:
2726
- rvm: 2.2
2827
gemfile: gemfiles/rails_3.gemfile

FIXME.md

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
bin/rails test /home/travis/build/jamis/bulk_insert/test/bulk_insert/worker_test.rb:336
2+
..F
3+
Failure:
4+
BulkInsertWorkerTest#test_adapter_dependent_Mysql2Spatial_methods [/home/travis/build/jamis/bulk_insert/test/bulk_insert/worker_test.rb:332]:
5+
--- expected
6+
+++ actual
7+
@@ -1 +1 @@
8+
-"INSERT IGNORE INTO `testings` (`greeting`,`age`,`happy`,`created_at`,`updated_at`,`color`) VALUES ('Yo',15,FALSE,NULL,NULL,'chartreuse')"
9+
+"INSERT IGNORE INTO \"testings\" (\"greeting\",\"age\",\"happy\",\"created_at\",\"updated_at\",\"color\") VALUES ('Yo',15,0,NULL,NULL,'chartreuse')"
10+
bin/rails test /home/travis/build/jamis/bulk_insert/test/bulk_insert/worker_test.rb:317
11+
F
12+
Failure:
13+
BulkInsertWorkerTest#test_adapter_dependent_mysql_methods [/home/travis/build/jamis/bulk_insert/test/bulk_insert/worker_test.rb:292]:
14+
--- expected
15+
+++ actual
16+
@@ -1 +1 @@
17+
-"INSERT IGNORE INTO `testings` (`greeting`,`age`,`happy`,`created_at`,`updated_at`,`color`) VALUES ('Yo',15,FALSE,NULL,NULL,'chartreuse')"
18+
+"INSERT IGNORE INTO \"testings\" (\"greeting\",\"age\",\"happy\",\"created_at\",\"updated_at\",\"color\") VALUES ('Yo',15,0,NULL,NULL,'chartreuse')"
19+
bin/rails test /home/travis/build/jamis/bulk_insert/test/bulk_insert/worker_test.rb:273
20+
F
21+
Failure:
22+
BulkInsertWorkerTest#test_adapter_dependent_mysql_methods_work_for_mysql2 [/home/travis/build/jamis/bulk_insert/test/bulk_insert/worker_test.rb:313]:
23+
--- expected
24+
+++ actual
25+
@@ -1 +1 @@
26+
-"INSERT IGNORE INTO `testings` (`greeting`,`age`,`happy`,`created_at`,`updated_at`,`color`) VALUES ('Yo',15,FALSE,NULL,NULL,'chartreuse') ON DUPLICATE KEY UPDATE `greeting`=VALUES(`greeting`), `age`=VALUES(`age`), `happy`=VALUES(`happy`), `created_at`=VALUES(`created_at`), `updated_at`=VALUES(`updated_at`), `color`=VALUES(`color`)"
27+
+"INSERT IGNORE INTO \"testings\" (\"greeting\",\"age\",\"happy\",\"created_at\",\"updated_at\",\"color\") VALUES ('Yo',15,0,NULL,NULL,'chartreuse') ON DUPLICATE KEY UPDATE `greeting`=VALUES(`greeting`), `age`=VALUES(`age`), `happy`=VALUES(`happy`), `created_at`=VALUES(`created_at`), `updated_at`=VALUES(`updated_at`), `color`=VALUES(`color`)"
28+
bin/rails test /home/travis/build/jamis/bulk_insert/test/bulk_insert/worker_test.rb:296
29+
..F
30+
Failure:
31+
BulkInsertWorkerTest#test_adapter_dependent_sqlite3_methods_(with_lowercase_adapter_name) [/home/travis/build/jamis/bulk_insert/test/bulk_insert/worker_test.rb:427]:
32+
--- expected
33+
+++ actual
34+
@@ -1 +1 @@
35+
-"INSERT OR IGNORE INTO `testings` (`greeting`,`age`,`happy`,`created_at`,`updated_at`,`color`) VALUES ('Yo',15,FALSE,NULL,NULL,'chartreuse')"
36+
+"INSERT OR IGNORE INTO \"testings\" (\"greeting\",\"age\",\"happy\",\"created_at\",\"updated_at\",\"color\") VALUES ('Yo',15,0,NULL,NULL,'chartreuse')"
37+
bin/rails test /home/travis/build/jamis/bulk_insert/test/bulk_insert/worker_test.rb:414
38+
......F
39+
Failure:
40+
BulkInsertWorkerTest#test_adapter_dependent_default_methods [/home/travis/build/jamis/bulk_insert/test/bulk_insert/worker_test.rb:266]:
41+
Expected: "Mysql2"
42+
Actual: "SQLite"
43+
bin/rails test /home/travis/build/jamis/bulk_insert/test/bulk_insert/worker_test.rb:265
44+
F
45+
Failure:
46+
BulkInsertWorkerTest#test_adapter_dependent_postgresql_methods_(with_update_duplicates) [/home/travis/build/jamis/bulk_insert/test/bulk_insert/worker_test.rb:391]:
47+
--- expected
48+
+++ actual
49+
@@ -1 +1 @@
50+
-"INSERT INTO `testings` (`greeting`,`age`,`happy`,`created_at`,`updated_at`,`color`) VALUES ('Yo',15,FALSE,NULL,NULL,'chartreuse') ON CONFLICT(greeting, age, happy) DO UPDATE SET greeting=EXCLUDED.greeting, age=EXCLUDED.age, happy=EXCLUDED.happy, created_at=EXCLUDED.created_at, updated_at=EXCLUDED.updated_at, color=EXCLUDED.color RETURNING id"
51+
+"INSERT INTO \"testings\" (\"greeting\",\"age\",\"happy\",\"created_at\",\"updated_at\",\"color\") VALUES ('Yo',15,0,NULL,NULL,'chartreuse') ON CONFLICT(greeting, age, happy) DO UPDATE SET greeting=EXCLUDED.greeting, age=EXCLUDED.age, happy=EXCLUDED.happy, created_at=EXCLUDED.created_at, updated_at=EXCLUDED.updated_at, color=EXCLUDED.color RETURNING id"
52+
bin/rails test /home/travis/build/jamis/bulk_insert/test/bulk_insert/worker_test.rb:376
53+
F
54+
Failure:
55+
BulkInsertWorkerTest#test_adapter_dependent_PostGIS_methods [/home/travis/build/jamis/bulk_insert/test/bulk_insert/worker_test.rb:410]:
56+
--- expected
57+
+++ actual
58+
@@ -1 +1 @@
59+
-"INSERT INTO `testings` (`greeting`,`age`,`happy`,`created_at`,`updated_at`,`color`) VALUES ('Yo',15,FALSE,NULL,NULL,'chartreuse') ON CONFLICT DO NOTHING RETURNING id"
60+
+"INSERT INTO \"testings\" (\"greeting\",\"age\",\"happy\",\"created_at\",\"updated_at\",\"color\") VALUES ('Yo',15,0,NULL,NULL,'chartreuse') ON CONFLICT DO NOTHING RETURNING id"
61+
bin/rails test /home/travis/build/jamis/bulk_insert/test/bulk_insert/worker_test.rb:395
62+
.F
63+
Failure:
64+
BulkInsertWorkerTest#test_adapter_dependent_postgresql_methods_(no_ignore,_no_update_duplicates) [/home/travis/build/jamis/bulk_insert/test/bulk_insert/worker_test.rb:372]:
65+
--- expected
66+
+++ actual
67+
@@ -1 +1 @@
68+
-"INSERT INTO `testings` (`greeting`,`age`,`happy`,`created_at`,`updated_at`,`color`) VALUES ('Yo',15,FALSE,NULL,NULL,'chartreuse') RETURNING id"
69+
+"INSERT INTO \"testings\" (\"greeting\",\"age\",\"happy\",\"created_at\",\"updated_at\",\"color\") VALUES ('Yo',15,0,NULL,NULL,'chartreuse') RETURNING id"
70+
bin/rails test /home/travis/build/jamis/bulk_insert/test/bulk_insert/worker_test.rb:356
71+
.F
72+
Failure:
73+
BulkInsertWorkerTest#test_add_should_default_timestamp_columns_to_current_time [/home/travis/build/jamis/bulk_insert/test/bulk_insert/worker_test.rb:40]:
74+
Expected Sun, 07 Feb 2021 22:06:47 UTC +00:00 to be >= 2021-02-07 22:06:47 +0000.
75+
bin/rails test /home/travis/build/jamis/bulk_insert/test/bulk_insert/worker_test.rb:33
76+
....F
77+
Failure:
78+
BulkInsertWorkerTest#test_adapter_dependent_sqlite3_methods_(with_stylecase_adapter_name) [/home/travis/build/jamis/bulk_insert/test/bulk_insert/worker_test.rb:444]:
79+
--- expected
80+
+++ actual
81+
@@ -1 +1 @@
82+
-"INSERT OR IGNORE INTO `testings` (`greeting`,`age`,`happy`,`created_at`,`updated_at`,`color`) VALUES ('Yo',15,FALSE,NULL,NULL,'chartreuse')"
83+
+"INSERT OR IGNORE INTO \"testings\" (\"greeting\",\"age\",\"happy\",\"created_at\",\"updated_at\",\"color\") VALUES ('Yo',15,0,NULL,NULL,'chartreuse')"
84+
bin/rails test /home/travis/build/jamis/bulk_insert/test/bulk_insert/worker_test.rb:431
85+
....F
86+
Failure:
87+
BulkInsertWorkerTest#test_mysql_adapter_can_update_duplicates [/home/travis/build/jamis/bulk_insert/test/bulk_insert/worker_test.rb:462]:
88+
--- expected
89+
+++ actual
90+
@@ -1 +1 @@
91+
-"INSERT INTO `testings` (`greeting`,`age`,`happy`,`created_at`,`updated_at`,`color`) VALUES ('Yo',15,FALSE,NULL,NULL,'chartreuse') ON DUPLICATE KEY UPDATE `greeting`=VALUES(`greeting`), `age`=VALUES(`age`), `happy`=VALUES(`happy`), `created_at`=VALUES(`created_at`), `updated_at`=VALUES(`updated_at`), `color`=VALUES(`color`)"
92+
+"INSERT INTO \"testings\" (\"greeting\",\"age\",\"happy\",\"created_at\",\"updated_at\",\"color\") VALUES ('Yo',15,0,NULL,NULL,'chartreuse') ON DUPLICATE KEY UPDATE `greeting`=VALUES(`greeting`), `age`=VALUES(`age`), `happy`=VALUES(`happy`), `created_at`=VALUES(`created_at`), `updated_at`=VALUES(`updated_at`), `color`=VALUES(`color`)"

lib/bulk_insert/worker.rb

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,19 @@ def save!
9393

9494
def execute_query
9595
if query = compose_insert_query
96-
result_set = @connection.exec_query(query)
97-
@result_sets.push(result_set) if @return_primary_keys
96+
97+
# Return primary key support broke mysql compatibility
98+
# with rails < 5 mysql adapter. (see issue #41)
99+
if ActiveRecord::VERSION::STRING < "5.0.0" && @statement_adapter.is_a?(StatementAdapters::MySQLAdapter)
100+
# raise an exception for unsupported return_primary_keys
101+
raise ArgumentError.new("BulkInsert does not support @return_primary_keys for mysql and rails < 5") if @return_primary_keys
102+
103+
# restore v1.6 query execution
104+
@connection.execute(query)
105+
else
106+
result_set = @connection.exec_query(query)
107+
@result_sets.push(result_set) if @return_primary_keys
108+
end
98109
end
99110
end
100111

test/bulk_insert/worker_test.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,10 @@ class BulkInsertWorkerTest < ActiveSupport::TestCase
147147
true
148148
)
149149

150+
# return_primary_keys is not supported for mysql and rails < 5
151+
# skip is not supported in the minitest version used for testing rails 3
152+
return if ActiveRecord::VERSION::STRING < "5.0.0" && worker.adapter_name =~ /^mysql/i
153+
150154
assert_no_difference -> { worker.result_sets.count } do
151155
worker.save!
152156
end

test/bulk_insert_test.rb

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,16 @@ class BulkInsertTest < ActiveSupport::TestCase
3030
test "with option to return primary keys, worker should have result sets" do
3131
worker = Testing.bulk_insert(return_primary_keys: true)
3232
worker.add greeting: "yo"
33-
worker.save!
34-
assert_equal 1, worker.result_sets.count
33+
34+
# return_primary_keys is not supported for mysql and rails < 5
35+
# this test ensures that the case is covered in the CI and handled as expected
36+
if ActiveRecord::VERSION::STRING < "5.0.0" && worker.adapter_name =~ /^mysql/i
37+
error = assert_raise(ArgumentError) { worker.save! }
38+
assert_equal error.message, "BulkInsert does not support @return_primary_keys for mysql and rails < 5"
39+
else
40+
worker.save!
41+
assert_equal 1, worker.result_sets.count
42+
end
3543
end
3644

3745
test "bulk_insert with array should save the array immediately" do

0 commit comments

Comments
 (0)