composite_primary_keys 9.0.6 → 9.0.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/History.rdoc +12 -0
- data/lib/composite_primary_keys/arel/sqlserver.rb +2 -2
- data/lib/composite_primary_keys/associations/collection_association.rb +17 -0
- data/lib/composite_primary_keys/associations/has_many_association.rb +19 -19
- data/lib/composite_primary_keys/base.rb +14 -14
- data/lib/composite_primary_keys/connection_adapters/sqlite3_adapter.rb +23 -0
- data/lib/composite_primary_keys/version.rb +1 -1
- data/tasks/databases/oracle.rake +1 -1
- data/test/abstract_unit.rb +4 -0
- data/test/fixtures/db_definitions/mysql.sql +2 -2
- data/test/fixtures/employees.yml +18 -18
- data/test/test_preload.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 935a14ecfff54210eda1de87a8c012555dd8800b
|
4
|
+
data.tar.gz: aeeecd538f8856ca32f969cfade0dd6124164a34
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a00381d95c99145e0a03e0e51051dfe69e09ac699316cfd9e9d2767103db7fa38ba40e00045d257bae284e1875a3dbcdb70e555c4d964b4f3f84ab6583c8e6ab
|
7
|
+
data.tar.gz: 7eb7dd0107eaa96f8c8adabcd04fe806bf9f40b2aef56469effbd7de01f338f32bed54be8dde25b02cea65364b3c3e3ac38d6f4f4060bdaa12d64c1297d5372b
|
data/History.rdoc
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
== 9.0.7 (2017-05-22)
|
2
|
+
|
3
|
+
* Update sqlite3 to support deletes and updates (Charlie Savage)
|
4
|
+
* Specify version for sql server gem so it works with Rails 5.0 (Charlie Savage)
|
5
|
+
* Use `datetime` datatype to address Invalid default value for updated_at (Yasuo Honda)
|
6
|
+
* Fix ORA-00900 error when it attempts to execute blank statement (pustomytnyk)
|
7
|
+
* Override ActiveRecord::Associations::CollectionAssociation#ids_reader (pustomytnyk)
|
8
|
+
* Only define #primary_keys if #primary_keys=(value) is called (Charlie Savage)
|
9
|
+
* Change `timestamp` to `datetime` for MySQL as ActiveRecord timestamps type does (Oriol Collel)
|
10
|
+
* Fix incorrect case statement to get PK for SQLServer (Oriol Collel)
|
11
|
+
* Fixes random failures in test_preload_of_polymorphic_association (Boris Peterbarg)
|
12
|
+
|
1
13
|
== 9.0.6 (2017-01-08)
|
2
14
|
|
3
15
|
* Uncomment tests (Sammy Larbi)
|
@@ -6,6 +6,23 @@ module CompositePrimaryKeys
|
|
6
6
|
super
|
7
7
|
end
|
8
8
|
|
9
|
+
def ids_reader
|
10
|
+
if loaded?
|
11
|
+
load_target.map do |record|
|
12
|
+
if reflection.association_primary_key.is_a?(Array)
|
13
|
+
reflection.association_primary_key.map { |key| record.send(key) }
|
14
|
+
else
|
15
|
+
record.send(reflection.association_primary_key)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
else
|
19
|
+
@association_ids ||= (
|
20
|
+
column = "#{reflection.quoted_table_name}.#{reflection.association_primary_key}"
|
21
|
+
scope.pluck(column)
|
22
|
+
)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
9
26
|
def ids_writer(ids)
|
10
27
|
pk_type = reflection.primary_key_type
|
11
28
|
ids = Array(ids).reject(&:blank?)
|
@@ -18,29 +18,29 @@ module ActiveRecord
|
|
18
18
|
update_counter(-delete_count(method, scope))
|
19
19
|
end
|
20
20
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
end
|
31
|
-
scope.update_all(conds)
|
21
|
+
def delete_count(method, scope)
|
22
|
+
if method == :delete_all
|
23
|
+
scope.delete_all
|
24
|
+
else
|
25
|
+
# CPK
|
26
|
+
# scope.update_all(reflection.foreign_key => nil)
|
27
|
+
conds = Array(reflection.foreign_key).inject(Hash.new) do |mem, key|
|
28
|
+
mem[key] = nil
|
29
|
+
mem
|
32
30
|
end
|
31
|
+
scope.update_all(conds)
|
33
32
|
end
|
33
|
+
end
|
34
34
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
end
|
35
|
+
def foreign_key_present?
|
36
|
+
if reflection.klass.primary_key
|
37
|
+
# CPK
|
38
|
+
# owner.attribute_present?(reflection.association_primary_key)
|
39
|
+
Array(reflection.klass.primary_key).all? {|key| owner.attribute_present?(key)}
|
40
|
+
else
|
41
|
+
false
|
43
42
|
end
|
44
43
|
end
|
45
44
|
end
|
45
|
+
end
|
46
46
|
end
|
@@ -7,20 +7,6 @@ module ActiveRecord
|
|
7
7
|
NOT_IMPLEMENTED_YET = 'Not implemented for composite primary keys yet'
|
8
8
|
|
9
9
|
class << self
|
10
|
-
def primary_keys
|
11
|
-
unless defined?(@primary_keys)
|
12
|
-
reset_primary_keys
|
13
|
-
end
|
14
|
-
@primary_keys
|
15
|
-
end
|
16
|
-
|
17
|
-
# Don't like this method name, but its modeled after how AR does it
|
18
|
-
def reset_primary_keys
|
19
|
-
if self != base_class
|
20
|
-
self.primary_keys = base_class.primary_keys
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
10
|
alias_method :primary_key_without_composite_key_support=, :primary_key=
|
25
11
|
def primary_key=(keys)
|
26
12
|
unless keys.kind_of?(Array)
|
@@ -60,6 +46,20 @@ module ActiveRecord
|
|
60
46
|
end
|
61
47
|
|
62
48
|
module CompositeClassMethods
|
49
|
+
def primary_keys
|
50
|
+
unless defined?(@primary_keys)
|
51
|
+
reset_primary_keys
|
52
|
+
end
|
53
|
+
@primary_keys
|
54
|
+
end
|
55
|
+
|
56
|
+
# Don't like this method name, but its modeled after how AR does it
|
57
|
+
def reset_primary_keys
|
58
|
+
if self != base_class
|
59
|
+
self.primary_keys = base_class.primary_keys
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
63
|
def primary_key
|
64
64
|
primary_keys
|
65
65
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module ActiveRecord
|
2
|
+
module ConnectionAdapters
|
3
|
+
class SQLite3Adapter
|
4
|
+
def join_to_update(update, select, key)
|
5
|
+
if key.is_a?(::CompositePrimaryKeys::CompositeKeys)
|
6
|
+
subselect = subquery_for(key, select)
|
7
|
+
subselect_aliased = Arel::Nodes::TableAlias.new(subselect, 'cpk_inner')
|
8
|
+
cpk_subselect = Arel::SelectManager.new(subselect_aliased)
|
9
|
+
cpk_subselect.project('*')
|
10
|
+
key.each do |a_key|
|
11
|
+
where_expr = subselect_aliased[a_key.name].eq(update.ast.relation[a_key.name])
|
12
|
+
cpk_subselect.where(where_expr)
|
13
|
+
end
|
14
|
+
where_clause = Arel::Nodes::SqlLiteral.new("EXISTS (#{cpk_subselect.to_sql})")
|
15
|
+
update.where(where_clause)
|
16
|
+
else
|
17
|
+
super
|
18
|
+
end
|
19
|
+
end
|
20
|
+
alias join_to_delete join_to_update
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/tasks/databases/oracle.rake
CHANGED
@@ -14,7 +14,7 @@ namespace :oracle do
|
|
14
14
|
sql = File.read(schema)
|
15
15
|
|
16
16
|
sql.split(';').each do |command|
|
17
|
-
ActiveRecord::Base.connection.execute(command)
|
17
|
+
ActiveRecord::Base.connection.execute(command) unless command.blank?
|
18
18
|
end
|
19
19
|
|
20
20
|
ActiveRecord::Base.clear_all_connections!
|
data/test/abstract_unit.rb
CHANGED
@@ -18,6 +18,10 @@ puts "Loaded #{spec_name}"
|
|
18
18
|
# And now connect to the database
|
19
19
|
ActiveRecord::Base.establish_connection(spec)
|
20
20
|
|
21
|
+
if defined?(ActiveRecord::ConnectionAdapters::SQLite3Adapter)
|
22
|
+
require 'composite_primary_keys/connection_adapters/sqlite3_adapter'
|
23
|
+
end
|
24
|
+
|
21
25
|
# Tell active record about the configuration
|
22
26
|
ActiveRecord::Base.configurations[:test] = spec
|
23
27
|
|
@@ -39,8 +39,8 @@ create table tariffs (
|
|
39
39
|
tariff_id int not null,
|
40
40
|
start_date date not null,
|
41
41
|
amount integer(11) default null,
|
42
|
-
created_at
|
43
|
-
updated_at
|
42
|
+
created_at datetime,
|
43
|
+
updated_at datetime,
|
44
44
|
primary key (tariff_id, start_date)
|
45
45
|
);
|
46
46
|
|
data/test/fixtures/employees.yml
CHANGED
@@ -1,19 +1,19 @@
|
|
1
|
-
steve:
|
2
|
-
id: 1
|
3
|
-
department_id: 1
|
4
|
-
location_id: 1
|
5
|
-
|
6
|
-
jill:
|
7
|
-
id: 2
|
8
|
-
department_id: 1
|
9
|
-
location_id: 1
|
10
|
-
|
11
|
-
sarah:
|
12
|
-
id: 3
|
13
|
-
department_id: 2
|
14
|
-
location_id: 1
|
15
|
-
|
16
|
-
robert:
|
17
|
-
id: 4
|
18
|
-
department_id: 2
|
1
|
+
steve:
|
2
|
+
id: 1
|
3
|
+
department_id: 1
|
4
|
+
location_id: 1
|
5
|
+
|
6
|
+
jill:
|
7
|
+
id: 2
|
8
|
+
department_id: 1
|
9
|
+
location_id: 1
|
10
|
+
|
11
|
+
sarah:
|
12
|
+
id: 3
|
13
|
+
department_id: 2
|
14
|
+
location_id: 1
|
15
|
+
|
16
|
+
robert:
|
17
|
+
id: 4
|
18
|
+
department_id: 2
|
19
19
|
location_id: 1
|
data/test/test_preload.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require File.expand_path('../abstract_unit', __FILE__)
|
2
2
|
|
3
3
|
class TestPreload < ActiveSupport::TestCase
|
4
|
-
fixtures :comments, :users, :employees, :groups
|
4
|
+
fixtures :comments, :users, :employees, :groups, :hacks
|
5
5
|
|
6
6
|
class UserForPreload < User
|
7
7
|
has_many :comments_with_include_condition, -> { where('person_type = ?', 'User')},
|
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: 9.0.
|
4
|
+
version: 9.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Charlie Savage
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-05-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -113,6 +113,7 @@ files:
|
|
113
113
|
- lib/composite_primary_keys/composite_relation.rb
|
114
114
|
- lib/composite_primary_keys/connection_adapters/abstract_adapter.rb
|
115
115
|
- lib/composite_primary_keys/connection_adapters/abstract_mysql_adapter.rb
|
116
|
+
- lib/composite_primary_keys/connection_adapters/sqlite3_adapter.rb
|
116
117
|
- lib/composite_primary_keys/connection_adapters/sqlserver_adapter.rb
|
117
118
|
- lib/composite_primary_keys/core.rb
|
118
119
|
- lib/composite_primary_keys/fixtures.rb
|
@@ -270,7 +271,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
270
271
|
version: '0'
|
271
272
|
requirements: []
|
272
273
|
rubyforge_project:
|
273
|
-
rubygems_version: 2.6.
|
274
|
+
rubygems_version: 2.6.11
|
274
275
|
signing_key:
|
275
276
|
specification_version: 4
|
276
277
|
summary: Composite key support for ActiveRecord
|