composite_primary_keys 12.0.6 → 12.0.9
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/History.rdoc +12 -0
- data/lib/composite_primary_keys.rb +0 -1
- data/lib/composite_primary_keys/connection_adapters/abstract/database_statements.rb +20 -5
- data/lib/composite_primary_keys/version.rb +1 -1
- data/test/connections/databases.ci.yml +5 -2
- data/test/test_create.rb +27 -1
- metadata +9 -10
- data/lib/composite_primary_keys/connection_adapters/mysql/database_statements.rb +0 -24
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2465cca0fa83a628e24f3221e88095690295c99b2bf46818bd2ebd76df8300b5
|
|
4
|
+
data.tar.gz: a22c2b61575c26e23e51b314c05c158663c26ce7a9c64fb56019d596edc6a844
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 3147006b49f98c3d1e88dbec56590fad63c13506634427361e14e06d611e75666c89c48c3e9151d174dc075d850a238285be6bc62739d8971d7bf190bc6e9db9
|
|
7
|
+
data.tar.gz: 34d811c5ab6afb7d5b4b9dc871b2df660f42abaf146ffc7faa60c9d4d2edfb8c1a8fa6e49b40488a6090a7bb64218fafb6b0e965744b4daa0d11c0fc34605abf
|
data/History.rdoc
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
== 12.0.9 (2021-02-22)
|
|
2
|
+
* Third time is hopefully the charm on MySQL/MariaDB auto increment fix
|
|
3
|
+
|
|
4
|
+
== 12.0.8 (2021-02-16)
|
|
5
|
+
* Revert to previous MySQL/MariaDB auto increment fix
|
|
6
|
+
|
|
7
|
+
== 12.0.7 (2021-02-15)
|
|
8
|
+
* Switch to GitHub actions (ta1kt0me)
|
|
9
|
+
* Fix MySQL/MariaDB query cache issue bug introduced in version 12.0.3 - see #539 (Charlie Savage)
|
|
10
|
+
* Do a better job of supporting composite keys with an auto incrementing field for
|
|
11
|
+
MySQL and MariaDB (Charlie Savage)
|
|
12
|
+
|
|
1
13
|
== 12.0.6 (2021-01-04)
|
|
2
14
|
* Fix issue when calling in_batches without a block (Charlie Savage)
|
|
3
15
|
|
|
@@ -99,7 +99,6 @@ require_relative 'composite_primary_keys/nested_attributes'
|
|
|
99
99
|
|
|
100
100
|
require_relative 'composite_primary_keys/connection_adapters/abstract/database_statements'
|
|
101
101
|
require_relative 'composite_primary_keys/connection_adapters/abstract_adapter'
|
|
102
|
-
require_relative 'composite_primary_keys/connection_adapters/mysql/database_statements'
|
|
103
102
|
require_relative 'composite_primary_keys/connection_adapters/postgresql/database_statements'
|
|
104
103
|
require_relative 'composite_primary_keys/connection_adapters/sqlserver/database_statements'
|
|
105
104
|
|
|
@@ -5,16 +5,31 @@ module ActiveRecord
|
|
|
5
5
|
sql, binds = to_sql_and_binds(arel, binds)
|
|
6
6
|
value = exec_insert(sql, name, binds, pk, sequence_name)
|
|
7
7
|
|
|
8
|
+
return id_value if id_value
|
|
9
|
+
|
|
8
10
|
if pk.is_a?(Array) && !value.empty?
|
|
9
11
|
# This is a CPK model and the query result is not empty. Thus we can figure out the new ids for each
|
|
10
12
|
# auto incremented field
|
|
11
|
-
|
|
13
|
+
pk.map {|key| value.first[key]}
|
|
12
14
|
elsif pk.is_a?(Array)
|
|
13
|
-
# This is CPK, but we don't know what autoincremented fields were updated.
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
# This is CPK, but we don't know what autoincremented fields were updated.
|
|
16
|
+
result = Array.new(pk.size)
|
|
17
|
+
|
|
18
|
+
# Is there an autoincrementing field?
|
|
19
|
+
auto_key = pk.find do |key|
|
|
20
|
+
attribute = arel.ast.relation[key]
|
|
21
|
+
column = column_for_attribute(attribute)
|
|
22
|
+
if column.respond_to?(:auto_increment?)
|
|
23
|
+
column.auto_increment?
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
if auto_key
|
|
28
|
+
result[pk.index(auto_key)] = last_inserted_id(value)
|
|
29
|
+
end
|
|
30
|
+
result
|
|
16
31
|
else
|
|
17
|
-
|
|
32
|
+
last_inserted_id(value)
|
|
18
33
|
end
|
|
19
34
|
end
|
|
20
35
|
end
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
mysql:
|
|
2
2
|
adapter: mysql2
|
|
3
|
-
username:
|
|
4
|
-
password:
|
|
3
|
+
username: github
|
|
4
|
+
password: github
|
|
5
|
+
host: 127.0.0.1
|
|
6
|
+
port: 3306
|
|
5
7
|
encoding: utf8mb4
|
|
6
8
|
charset: utf8mb4
|
|
7
9
|
collation: utf8mb4_bin
|
|
@@ -11,6 +13,7 @@ postgresql:
|
|
|
11
13
|
adapter: postgresql
|
|
12
14
|
database: composite_primary_keys_unittest
|
|
13
15
|
username: postgres
|
|
16
|
+
password: postgres
|
|
14
17
|
host: localhost
|
|
15
18
|
|
|
16
19
|
sqlite:
|
data/test/test_create.rb
CHANGED
|
@@ -48,12 +48,21 @@ class TestCreate < ActiveSupport::TestCase
|
|
|
48
48
|
end
|
|
49
49
|
end
|
|
50
50
|
|
|
51
|
+
def test_create_with_array
|
|
52
|
+
date = Date.new(2027, 01, 27)
|
|
53
|
+
tariff = Tariff.create!(id: [10, date], amount: 27)
|
|
54
|
+
refute_nil(tariff)
|
|
55
|
+
assert_equal([10, date], tariff.id)
|
|
56
|
+
assert_equal(date, tariff.start_date)
|
|
57
|
+
assert_equal(27, tariff.amount)
|
|
58
|
+
end
|
|
59
|
+
|
|
51
60
|
def test_create_with_partial_serial
|
|
52
61
|
attributes = {:location_id => 100}
|
|
53
62
|
|
|
54
63
|
# SQLite does not support an autoincrementing field in a composite key
|
|
55
64
|
if Department.connection.class.name == "ActiveRecord::ConnectionAdapters::SQLite3Adapter"
|
|
56
|
-
attributes[:id] =
|
|
65
|
+
attributes[:id] = 200
|
|
57
66
|
end
|
|
58
67
|
|
|
59
68
|
department = Department.new(attributes)
|
|
@@ -177,4 +186,21 @@ class TestCreate < ActiveSupport::TestCase
|
|
|
177
186
|
suburb = Suburb.find_or_create_by!(:name => 'New Suburb', :city_id => 3, :suburb_id => 1)
|
|
178
187
|
refute_nil(suburb)
|
|
179
188
|
end
|
|
189
|
+
|
|
190
|
+
def test_cache
|
|
191
|
+
Suburb.cache do
|
|
192
|
+
# Suburb does not exist
|
|
193
|
+
suburb = Suburb.find_by(:city_id => 10, :suburb_id => 10)
|
|
194
|
+
assert_nil(suburb)
|
|
195
|
+
|
|
196
|
+
# Create it
|
|
197
|
+
suburb = Suburb.create!(:name => 'New Suburb', :city_id => 10, :suburb_id => 10)
|
|
198
|
+
|
|
199
|
+
# Should be able to find it
|
|
200
|
+
suburb = Suburb.find_by(:city_id => 10)
|
|
201
|
+
refute_nil(suburb)
|
|
202
|
+
refute_nil(suburb.city_id)
|
|
203
|
+
refute_nil(suburb.suburb_id)
|
|
204
|
+
end
|
|
205
|
+
end
|
|
180
206
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: composite_primary_keys
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 12.0.
|
|
4
|
+
version: 12.0.9
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Charlie Savage
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2021-
|
|
11
|
+
date: 2021-02-22 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activerecord
|
|
@@ -39,7 +39,7 @@ dependencies:
|
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
40
|
version: '0'
|
|
41
41
|
description: Composite key support for ActiveRecord
|
|
42
|
-
email:
|
|
42
|
+
email:
|
|
43
43
|
executables: []
|
|
44
44
|
extensions: []
|
|
45
45
|
extra_rdoc_files: []
|
|
@@ -71,7 +71,6 @@ files:
|
|
|
71
71
|
- lib/composite_primary_keys/composite_relation.rb
|
|
72
72
|
- lib/composite_primary_keys/connection_adapters/abstract/database_statements.rb
|
|
73
73
|
- lib/composite_primary_keys/connection_adapters/abstract_adapter.rb
|
|
74
|
-
- lib/composite_primary_keys/connection_adapters/mysql/database_statements.rb
|
|
75
74
|
- lib/composite_primary_keys/connection_adapters/postgresql/database_statements.rb
|
|
76
75
|
- lib/composite_primary_keys/connection_adapters/sqlserver/database_statements.rb
|
|
77
76
|
- lib/composite_primary_keys/core.rb
|
|
@@ -201,7 +200,7 @@ homepage: https://github.com/composite-primary-keys/composite_primary_keys
|
|
|
201
200
|
licenses:
|
|
202
201
|
- MIT
|
|
203
202
|
metadata: {}
|
|
204
|
-
post_install_message:
|
|
203
|
+
post_install_message:
|
|
205
204
|
rdoc_options: []
|
|
206
205
|
require_paths:
|
|
207
206
|
- lib
|
|
@@ -216,16 +215,16 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
216
215
|
- !ruby/object:Gem::Version
|
|
217
216
|
version: '0'
|
|
218
217
|
requirements: []
|
|
219
|
-
rubygems_version: 3.
|
|
220
|
-
signing_key:
|
|
218
|
+
rubygems_version: 3.2.8
|
|
219
|
+
signing_key:
|
|
221
220
|
specification_version: 4
|
|
222
221
|
summary: Composite key support for ActiveRecord
|
|
223
222
|
test_files:
|
|
224
|
-
- test/abstract_unit.rb
|
|
225
223
|
- test/README_tests.rdoc
|
|
224
|
+
- test/abstract_unit.rb
|
|
226
225
|
- test/test_associations.rb
|
|
227
|
-
- test/test_attributes.rb
|
|
228
226
|
- test/test_attribute_methods.rb
|
|
227
|
+
- test/test_attributes.rb
|
|
229
228
|
- test/test_calculations.rb
|
|
230
229
|
- test/test_callbacks.rb
|
|
231
230
|
- test/test_composite_arrays.rb
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module ActiveRecord
|
|
4
|
-
module ConnectionAdapters
|
|
5
|
-
module MySQL
|
|
6
|
-
module DatabaseStatements
|
|
7
|
-
def insert(arel, name = nil, pk = nil, id_value = nil, sequence_name = nil, binds = [])
|
|
8
|
-
sql, binds = to_sql_and_binds(arel, binds)
|
|
9
|
-
value = exec_insert(sql, name, binds, pk, sequence_name)
|
|
10
|
-
|
|
11
|
-
# CPK
|
|
12
|
-
if pk.is_a?(Array)
|
|
13
|
-
pk.map do |key|
|
|
14
|
-
column = column_for(arel.ast.relation.name, key)
|
|
15
|
-
column.auto_increment? ? last_inserted_id(value) : nil
|
|
16
|
-
end
|
|
17
|
-
else
|
|
18
|
-
id_value || last_inserted_id(value)
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
end
|