composite_primary_keys 9.0.1 → 9.0.2
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 +3 -0
- data/lib/composite_primary_keys.rb +3 -0
- data/lib/composite_primary_keys/arel/in.rb +6 -0
- data/lib/composite_primary_keys/arel/to_sql.rb +26 -0
- data/lib/composite_primary_keys/composite_arrays.rb +8 -0
- data/lib/composite_primary_keys/relation.rb +43 -0
- data/lib/composite_primary_keys/version.rb +1 -1
- data/test/test_delete.rb +43 -30
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f7253caf1292f03bdcac265e1bdad518994aa19a
|
4
|
+
data.tar.gz: 16b2e5c1fd9f528c04b69f91e5fb613ab22ce9aa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fcc63c86117a04c279a555237ab7dc1753f78debb5ef6ad26ce797d6f90d100a6283073e1c7204ab9d1c657275dd40482003644573979d9913397f95d9b803a4
|
7
|
+
data.tar.gz: 4df6e19d983774d48afd8ba36d9b6774929569e9a34f0c91dbca9ffa5d0013fbbbfaf0a392e12d362d9b473605a3797f589c39fb46f6e0d61f1d0463837b3768
|
data/History.rdoc
CHANGED
@@ -113,3 +113,6 @@ require 'composite_primary_keys/relation/query_methods'
|
|
113
113
|
require 'composite_primary_keys/validations/uniqueness'
|
114
114
|
|
115
115
|
require 'composite_primary_keys/composite_relation'
|
116
|
+
|
117
|
+
require 'composite_primary_keys/arel/in'
|
118
|
+
require 'composite_primary_keys/arel/to_sql'
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Arel
|
2
|
+
module Visitors
|
3
|
+
class ToSql
|
4
|
+
def visit_CompositePrimaryKeys_Nodes_In o, collector
|
5
|
+
collector << "("
|
6
|
+
visit(o.left, collector)
|
7
|
+
collector << ")"
|
8
|
+
collector << " IN ("
|
9
|
+
visit(o.right, collector) << ")"
|
10
|
+
end
|
11
|
+
|
12
|
+
def visit_CompositePrimaryKeys_CompositeKeys o, collector
|
13
|
+
values = o.map do |key|
|
14
|
+
case key
|
15
|
+
when Arel::Attributes::Attribute
|
16
|
+
"#{key.relation.name}.#{key.name}"
|
17
|
+
else
|
18
|
+
key
|
19
|
+
end
|
20
|
+
end
|
21
|
+
collector << "#{values.join(', ')}"
|
22
|
+
collector
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -33,6 +33,14 @@ module CompositePrimaryKeys
|
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
|
+
def in(other)
|
37
|
+
case other
|
38
|
+
when Arel::SelectManager
|
39
|
+
CompositePrimaryKeys::Nodes::In.new(self, other.ast)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
|
36
44
|
def to_s
|
37
45
|
# Doing this makes it easier to parse Base#[](attr_name)
|
38
46
|
join(ID_SEP)
|
@@ -46,5 +46,48 @@ module ActiveRecord
|
|
46
46
|
)
|
47
47
|
end
|
48
48
|
end
|
49
|
+
|
50
|
+
def delete_all(conditions = nil)
|
51
|
+
invalid_methods = INVALID_METHODS_FOR_DELETE_ALL.select { |method|
|
52
|
+
if MULTI_VALUE_METHODS.include?(method)
|
53
|
+
send("#{method}_values").any?
|
54
|
+
elsif SINGLE_VALUE_METHODS.include?(method)
|
55
|
+
send("#{method}_value")
|
56
|
+
elsif CLAUSE_METHODS.include?(method)
|
57
|
+
send("#{method}_clause").any?
|
58
|
+
end
|
59
|
+
}
|
60
|
+
if invalid_methods.any?
|
61
|
+
raise ActiveRecordError.new("delete_all doesn't support #{invalid_methods.join(', ')}")
|
62
|
+
end
|
63
|
+
|
64
|
+
if conditions
|
65
|
+
ActiveSupport::Deprecation.warn(<<-MESSAGE.squish)
|
66
|
+
Passing conditions to delete_all is deprecated and will be removed in Rails 5.1.
|
67
|
+
To achieve the same use where(conditions).delete_all.
|
68
|
+
MESSAGE
|
69
|
+
where(conditions).delete_all
|
70
|
+
else
|
71
|
+
stmt = Arel::DeleteManager.new
|
72
|
+
stmt.from(table)
|
73
|
+
|
74
|
+
# CPK
|
75
|
+
if joins_values.any? && @klass.composite?
|
76
|
+
arel_attributes = Array(primary_key).map do |key|
|
77
|
+
arel_attribute(key)
|
78
|
+
end.to_composite_keys
|
79
|
+
@klass.connection.join_to_delete(stmt, arel, arel_attributes)
|
80
|
+
elsif joins_values.any?
|
81
|
+
@klass.connection.join_to_delete(stmt, arel, arel_attribute(primary_key))
|
82
|
+
else
|
83
|
+
stmt.wheres = arel.constraints
|
84
|
+
end
|
85
|
+
|
86
|
+
affected = @klass.connection.delete(stmt, 'SQL', bound_attributes)
|
87
|
+
|
88
|
+
reset
|
89
|
+
affected
|
90
|
+
end
|
91
|
+
end
|
49
92
|
end
|
50
93
|
end
|
data/test/test_delete.rb
CHANGED
@@ -19,36 +19,49 @@ class TestDelete < ActiveSupport::TestCase
|
|
19
19
|
self.class.classes = CLASSES
|
20
20
|
end
|
21
21
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
22
|
+
def test_destroy_one
|
23
|
+
testing_with do
|
24
|
+
assert @first.destroy
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_destroy_one_alone_via_class
|
29
|
+
testing_with do
|
30
|
+
assert @klass.destroy(@first.id)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_delete_one_alone
|
35
|
+
testing_with do
|
36
|
+
assert @klass.delete(@first.id)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_delete_many
|
41
|
+
testing_with do
|
42
|
+
to_delete = @klass.limit(2)
|
43
|
+
assert_equal 2, to_delete.length
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_delete_all
|
48
|
+
testing_with do
|
49
|
+
@klass.delete_all
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_delete_all_with_join
|
54
|
+
department = departments(:accounting)
|
55
|
+
|
56
|
+
assert_equal(4, Department.count)
|
57
|
+
|
58
|
+
Department.joins(:employees).
|
59
|
+
where('departments.department_id = ?', department.department_id).
|
60
|
+
where('departments.location_id = ?', department.location_id).
|
61
|
+
delete_all
|
62
|
+
|
63
|
+
assert_equal(3, Department.count)
|
64
|
+
end
|
52
65
|
|
53
66
|
def test_clear_association
|
54
67
|
department = Department.find([1,1])
|
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.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Charlie Savage
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-08-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -91,6 +91,8 @@ files:
|
|
91
91
|
- README_DB2.rdoc
|
92
92
|
- Rakefile
|
93
93
|
- lib/composite_primary_keys.rb
|
94
|
+
- lib/composite_primary_keys/arel/in.rb
|
95
|
+
- lib/composite_primary_keys/arel/to_sql.rb
|
94
96
|
- lib/composite_primary_keys/associations/association.rb
|
95
97
|
- lib/composite_primary_keys/associations/association_scope.rb
|
96
98
|
- lib/composite_primary_keys/associations/collection_association.rb
|