composite_primary_keys 4.1.1 → 4.1.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.
- data/History.txt +5 -0
- data/lib/composite_primary_keys/associations/association_scope.rb +14 -6
- data/lib/composite_primary_keys/version.rb +1 -1
- data/test/abstract_unit.rb +11 -0
- data/test/fixtures/db_definitions/oracle.drop.sql +2 -0
- data/test/fixtures/db_definitions/oracle.sql +13 -0
- data/test/test_associations.rb +6 -0
- data/test/test_find.rb +1 -1
- data/test/test_predicates.rb +2 -2
- metadata +4 -4
data/History.txt
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
== 4.1.2 2012-01-12
|
2
|
+
* Helper to allow the same tests to be used for both Oracle and other DBs
|
3
|
+
by replacing quoted identifiers with all-caps equivalents on Oracle (Rhett Sutphin)
|
4
|
+
* Update Oracle tests (Rhett Sutphin)
|
5
|
+
|
1
6
|
== 4.1.1 2011-08-31
|
2
7
|
* Support for AR 3.1.1
|
3
8
|
* Make polymorphic belongs_to work in rails 3.1.1 (Tom Hughes)
|
@@ -36,13 +36,19 @@ module ActiveRecord
|
|
36
36
|
foreign_key = reflection.active_record_primary_key
|
37
37
|
end
|
38
38
|
|
39
|
+
conditions = self.conditions[i]
|
40
|
+
|
39
41
|
if reflection == chain.last
|
40
42
|
# CPK
|
41
43
|
# scope = scope.where(table[key].eq(owner[foreign_key]))
|
42
44
|
predicate = cpk_join_predicate(table, key, owner, foreign_key)
|
43
45
|
scope = scope.where(predicate)
|
44
46
|
|
45
|
-
|
47
|
+
if reflection.type
|
48
|
+
scope = scope.where(table[reflection.type].eq(owner.class.base_class.name))
|
49
|
+
end
|
50
|
+
|
51
|
+
conditions.each do |condition|
|
46
52
|
if options[:through] && condition.is_a?(Hash)
|
47
53
|
condition = { table.name => condition }
|
48
54
|
end
|
@@ -53,14 +59,16 @@ module ActiveRecord
|
|
53
59
|
# CPK
|
54
60
|
# constraint = table[key].eq(foreign_table[foreign_key])
|
55
61
|
constraint = cpk_join_predicate(table, key, foreign_table, foreign_key)
|
56
|
-
scope = scope.where(predicate)
|
57
62
|
|
58
|
-
|
63
|
+
if reflection.type
|
64
|
+
type = chain[i + 1].klass.base_class.name
|
65
|
+
constraint = constraint.and(table[reflection.type].eq(type))
|
66
|
+
end
|
59
67
|
|
60
|
-
scope = scope.joins(join)
|
68
|
+
scope = scope.joins(join(foreign_table, constraint))
|
61
69
|
|
62
|
-
unless conditions
|
63
|
-
scope = scope.where(sanitize(conditions
|
70
|
+
unless conditions.empty?
|
71
|
+
scope = scope.where(sanitize(conditions, table))
|
64
72
|
end
|
65
73
|
end
|
66
74
|
end
|
data/test/abstract_unit.rb
CHANGED
@@ -81,6 +81,17 @@ class ActiveSupport::TestCase
|
|
81
81
|
def composite?
|
82
82
|
@key_test != :single
|
83
83
|
end
|
84
|
+
|
85
|
+
# Oracle metadata is in all caps.
|
86
|
+
def with_quoted_identifiers(s)
|
87
|
+
s.gsub(/"(\w+)"/) { |m|
|
88
|
+
if ActiveRecord::Base.configurations[:test]['adapter'] =~ /oracle/i
|
89
|
+
m.upcase
|
90
|
+
else
|
91
|
+
m
|
92
|
+
end
|
93
|
+
}
|
94
|
+
end
|
84
95
|
end
|
85
96
|
|
86
97
|
def current_adapter?(type)
|
@@ -181,6 +181,19 @@ create table room_assignments (
|
|
181
181
|
room_id number(11) not null
|
182
182
|
);
|
183
183
|
|
184
|
+
create table seats (
|
185
|
+
flight_number int not null,
|
186
|
+
seat int not null,
|
187
|
+
customer int,
|
188
|
+
primary key (flight_number, seat)
|
189
|
+
);
|
190
|
+
|
191
|
+
create table capitols (
|
192
|
+
country varchar2(2000) not null,
|
193
|
+
city varchar2(2000) not null,
|
194
|
+
primary key (country, city)
|
195
|
+
);
|
196
|
+
|
184
197
|
create table products_restaurants (
|
185
198
|
product_id number(11) not null,
|
186
199
|
franchise_id number(11) not null,
|
data/test/test_associations.rb
CHANGED
@@ -19,6 +19,12 @@ class TestAssociations < ActiveSupport::TestCase
|
|
19
19
|
product = products(:first_product)
|
20
20
|
assert_equal(2, product.product_tariffs.count(:distinct => true))
|
21
21
|
end
|
22
|
+
|
23
|
+
def test_count_includes
|
24
|
+
count = Dorm.count(:include => :rooms,
|
25
|
+
:conditions => ["rooms.room_id = ?", 2])
|
26
|
+
assert_equal(1, count)
|
27
|
+
end
|
22
28
|
|
23
29
|
def test_products
|
24
30
|
assert_not_nil products(:first_product).product_tariffs
|
data/test/test_find.rb
CHANGED
@@ -50,7 +50,7 @@ class TestFind < ActiveSupport::TestCase
|
|
50
50
|
error = assert_raise(::ActiveRecord::RecordNotFound) do
|
51
51
|
ReferenceCode.find(['999', '999'])
|
52
52
|
end
|
53
|
-
assert_equal("Couldn't find ReferenceCode with ID=999,999 WHERE \"reference_codes\".\"reference_type_id\" = 999 AND \"reference_codes\".\"reference_code\" = 999",
|
53
|
+
assert_equal(with_quoted_identifiers("Couldn't find ReferenceCode with ID=999,999 WHERE \"reference_codes\".\"reference_type_id\" = 999 AND \"reference_codes\".\"reference_code\" = 999"),
|
54
54
|
error.message)
|
55
55
|
end
|
56
56
|
|
data/test/test_predicates.rb
CHANGED
@@ -15,7 +15,7 @@ class TestEqual < ActiveSupport::TestCase
|
|
15
15
|
end
|
16
16
|
|
17
17
|
pred = cpk_or_predicate(predicates)
|
18
|
-
assert_equal('(("departments"."id" = 0) OR ("departments"."id" = 1) OR ("departments"."id" = 2))',
|
18
|
+
assert_equal(with_quoted_identifiers('(("departments"."id" = 0) OR ("departments"."id" = 1) OR ("departments"."id" = 2))'),
|
19
19
|
pred)
|
20
20
|
end
|
21
21
|
|
@@ -29,7 +29,7 @@ class TestEqual < ActiveSupport::TestCase
|
|
29
29
|
end
|
30
30
|
|
31
31
|
pred = cpk_and_predicate(predicates)
|
32
|
-
assert_equal('"departments"."id" = 0 AND "departments"."id" = 1 AND "departments"."id" = 2',
|
32
|
+
assert_equal(with_quoted_identifiers('"departments"."id" = 0 AND "departments"."id" = 1 AND "departments"."id" = 2'),
|
33
33
|
pred.to_sql)
|
34
34
|
end
|
35
35
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: composite_primary_keys
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.1.
|
4
|
+
version: 4.1.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,11 +10,11 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2012-01-12 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activerecord
|
17
|
-
requirement: &
|
17
|
+
requirement: &22966128 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ~>
|
@@ -22,7 +22,7 @@ dependencies:
|
|
22
22
|
version: '3.1'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *22966128
|
26
26
|
description: Composite key support for ActiveRecord 3
|
27
27
|
email:
|
28
28
|
- drnicwilliams@gmail.com
|