composite_primary_keys 12.0.0 → 12.0.5

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.
Files changed (70) hide show
  1. checksums.yaml +4 -4
  2. data/History.rdoc +44 -3
  3. data/README.rdoc +3 -2
  4. data/lib/composite_primary_keys.rb +57 -57
  5. data/lib/composite_primary_keys/active_model/attribute_assignment.rb +19 -0
  6. data/lib/composite_primary_keys/arel/sqlserver.rb +1 -3
  7. data/lib/composite_primary_keys/associations/through_association.rb +2 -1
  8. data/lib/composite_primary_keys/attribute_methods.rb +2 -2
  9. data/lib/composite_primary_keys/attribute_methods/primary_key.rb +13 -0
  10. data/lib/composite_primary_keys/base.rb +12 -1
  11. data/lib/composite_primary_keys/composite_arrays.rb +49 -14
  12. data/lib/composite_primary_keys/connection_adapters/abstract/database_statements.rb +8 -3
  13. data/lib/composite_primary_keys/connection_adapters/abstract_adapter.rb +1 -1
  14. data/lib/composite_primary_keys/connection_adapters/mysql/database_statements.rb +24 -0
  15. data/lib/composite_primary_keys/connection_adapters/sqlserver/database_statements.rb +33 -12
  16. data/lib/composite_primary_keys/core.rb +1 -1
  17. data/lib/composite_primary_keys/persistence.rb +2 -2
  18. data/lib/composite_primary_keys/relation.rb +100 -25
  19. data/lib/composite_primary_keys/relation/finder_methods.rb +6 -6
  20. data/lib/composite_primary_keys/relation/predicate_builder/association_query_value.rb +1 -1
  21. data/lib/composite_primary_keys/validations/uniqueness.rb +1 -1
  22. data/lib/composite_primary_keys/version.rb +1 -1
  23. data/test/abstract_unit.rb +3 -5
  24. data/test/fixtures/article.rb +4 -0
  25. data/test/fixtures/articles.yml +4 -3
  26. data/test/fixtures/comment.rb +1 -3
  27. data/test/fixtures/comments.yml +10 -9
  28. data/test/fixtures/db_definitions/db2-create-tables.sql +0 -14
  29. data/test/fixtures/db_definitions/db2-drop-tables.sql +1 -3
  30. data/test/fixtures/db_definitions/mysql.sql +7 -44
  31. data/test/fixtures/db_definitions/oracle.drop.sql +3 -9
  32. data/test/fixtures/db_definitions/oracle.sql +12 -48
  33. data/test/fixtures/db_definitions/postgresql.sql +7 -44
  34. data/test/fixtures/db_definitions/sqlite.sql +6 -42
  35. data/test/fixtures/db_definitions/sqlserver.sql +5 -41
  36. data/test/fixtures/department.rb +8 -3
  37. data/test/fixtures/departments.yml +4 -4
  38. data/test/fixtures/readings.yml +2 -2
  39. data/test/fixtures/restaurants_suburbs.yml +1 -1
  40. data/test/fixtures/streets.yml +2 -2
  41. data/test/fixtures/suburbs.yml +2 -2
  42. data/test/fixtures/user.rb +3 -2
  43. data/test/test_associations.rb +30 -23
  44. data/test/test_composite_arrays.rb +14 -0
  45. data/test/test_create.rb +15 -18
  46. data/test/test_delete.rb +3 -3
  47. data/test/test_exists.rb +5 -5
  48. data/test/test_find.rb +22 -2
  49. data/test/test_habtm.rb +2 -2
  50. data/test/test_ids.rb +5 -6
  51. data/test/test_nested_attributes.rb +0 -57
  52. data/test/test_polymorphic.rb +29 -13
  53. data/test/test_preload.rb +4 -3
  54. data/test/test_serialize.rb +2 -2
  55. data/test/test_update.rb +19 -1
  56. metadata +6 -64
  57. data/test/fixtures/hack.rb +0 -5
  58. data/test/fixtures/hacks.yml +0 -3
  59. data/test/fixtures/pk_called_id.rb +0 -5
  60. data/test/fixtures/pk_called_ids.yml +0 -11
  61. data/test/fixtures/reference_code_using_composite_key_alias.rb +0 -8
  62. data/test/fixtures/reference_code_using_simple_key_alias.rb +0 -8
  63. data/test/fixtures/seat.rb +0 -5
  64. data/test/fixtures/seats.yml +0 -9
  65. data/test/fixtures/topic.rb +0 -6
  66. data/test/fixtures/topic_source.rb +0 -7
  67. data/test/mkmf.log +0 -592
  68. data/test/test_aliases.rb +0 -18
  69. data/test/test_enum.rb +0 -21
  70. data/test/test_suite.rb +0 -35
@@ -1,6 +1,3 @@
1
- drop table topics;
2
- drop sequence topics_seq;
3
- drop table topic_sources;
4
1
  drop table reference_types;
5
2
  drop sequence reference_types_seq;
6
3
  drop table reference_codes;
@@ -9,6 +6,7 @@ drop sequence products_seq;
9
6
  drop table tariffs;
10
7
  drop table product_tariffs;
11
8
  drop table suburbs;
9
+ drop sequence suburbs_city_id_seq;
12
10
  drop table streets;
13
11
  drop sequence streets_seq;
14
12
  drop table users;
@@ -23,12 +21,11 @@ drop table memberships;
23
21
  drop table membership_statuses;
24
22
  drop sequence membership_statuses_seq;
25
23
  drop table departments;
24
+ drop sequence departments_seq;
26
25
  drop table employees;
27
26
  drop sequence employees_seq;
28
27
  drop table comments;
29
28
  drop sequence comments_seq;
30
- drop table hacks;
31
- drop sequence hacks_seq;
32
29
  drop table restaurants;
33
30
  drop table restaurants_suburbs;
34
31
  drop table dorms;
@@ -40,9 +37,6 @@ drop table room_attribute_assignments;
40
37
  drop table room_assignments;
41
38
  drop table students;
42
39
  drop sequence students_seq;
43
- drop table seats;
44
40
  drop table capitols;
45
41
  drop table products_restaurants;
46
- drop table employees_groups;
47
- drop table pk_called_ids;
48
- drop sequence pk_called_ids_seq;
42
+ drop table employees_groups;
@@ -1,17 +1,3 @@
1
- create sequence topics_seq start with 1000;
2
-
3
- create table topics (
4
- id number(11) primary key,
5
- name varchar(50) default null,
6
- feed_size number(11) default null
7
- );
8
-
9
- create table topic_sources (
10
- topic_id number(11),
11
- platform varchar(50),
12
- keywords varchar(50) default null
13
- );
14
-
15
1
  create sequence reference_types_seq start with 1000;
16
2
 
17
3
  create table reference_types (
@@ -52,9 +38,11 @@ create table product_tariffs (
52
38
  constraint product_tariffs_pk primary key (product_id, tariff_id, tariff_start_date)
53
39
  );
54
40
 
41
+ create sequence suburbs_city_id_seq start with 1000;
42
+
55
43
  create table suburbs (
56
- city_id number(11),
57
- suburb_id number(11),
44
+ city_id number(11) default suburbs_city_id_seq.nextval not null,
45
+ suburb_id number(11) not null,
58
46
  name varchar(50) not null,
59
47
  constraint suburbs_pk primary key (city_id, suburb_id)
60
48
  );
@@ -113,10 +101,12 @@ create table membership_statuses (
113
101
  status varchar(50) not null
114
102
  );
115
103
 
104
+ create sequence departments_seq start with 1000;
105
+
116
106
  create table departments (
117
- department_id number(11) not null,
107
+ id number(11) not null,
118
108
  location_id number(11) not null,
119
- constraint departments_pk primary key (department_id, location_id)
109
+ constraint departments_pk primary key (id, location_id)
120
110
  );
121
111
 
122
112
  create sequence employees_seq start with 1000;
@@ -132,17 +122,9 @@ create sequence comments_seq start with 1000;
132
122
 
133
123
  create table comments (
134
124
  id number(11) not null primary key,
135
- person_id number(11) default null,
136
- shown number(11) default null,
137
- person_type varchar(100) default null,
138
- hack_id number(11) default null
139
- );
140
-
141
- create sequence hacks_seq start with 1000;
142
-
143
- create table hacks (
144
- id number(11) not null primary key,
145
- name varchar(50) not null
125
+ article_id number(11) not null,
126
+ person_id number(11) not null,
127
+ person_type varchar(100) not null
146
128
  );
147
129
 
148
130
  create table restaurants (
@@ -200,13 +182,6 @@ create table room_assignments (
200
182
  room_id number(11) not null
201
183
  );
202
184
 
203
- create table seats (
204
- flight_number int not null,
205
- seat int not null,
206
- customer int,
207
- primary key (flight_number, seat)
208
- );
209
-
210
185
  create table capitols (
211
186
  country varchar(100) not null,
212
187
  city varchar(100) not null,
@@ -222,15 +197,4 @@ create table products_restaurants (
222
197
  create table employees_groups (
223
198
  employee_id int not null,
224
199
  group_id int not null
225
- );
226
-
227
- create sequence pk_called_ids_seq start with 1000;
228
-
229
- create table pk_called_ids (
230
- id int not null,
231
- reference_code int not null,
232
- code_label varchar(50) default null,
233
- abbreviation varchar(50) default null,
234
- description varchar(50) default null,
235
- constraint pk_called_ids_pk primary key (id, reference_code)
236
- );
200
+ );
@@ -1,17 +1,3 @@
1
- create table topics (
2
- id serial not null,
3
- name varchar(50) default null,
4
- feed_size int default null,
5
- primary key (id)
6
- );
7
-
8
- create table topic_sources (
9
- topic_id int not null,
10
- platform varchar(50) not null,
11
- keywords varchar(50) default null,
12
- primary key (topic_id,platform)
13
- );
14
-
15
1
  create table reference_types (
16
2
  reference_type_id serial not null,
17
3
  type_label varchar(50) default null,
@@ -109,9 +95,9 @@ create table membership_statuses (
109
95
  );
110
96
 
111
97
  create table departments (
112
- department_id int not null,
113
- location_id int not null,
114
- primary key (department_id, location_id)
98
+ id serial not null,
99
+ location_id int not null,
100
+ primary key (id, location_id)
115
101
  );
116
102
 
117
103
  create table employees (
@@ -124,16 +110,9 @@ create table employees (
124
110
 
125
111
  create table comments (
126
112
  id serial not null,
127
- person_id int default null,
128
- shown int default null,
129
- person_type varchar(100) default null,
130
- hack_id int default null,
131
- primary key (id)
132
- );
133
-
134
- create table hacks (
135
- id serial not null,
136
- name varchar(50) not null,
113
+ article_id int not null references articles (id),
114
+ person_id int not null,
115
+ person_type varchar(100) not null,
137
116
  primary key (id)
138
117
  );
139
118
 
@@ -186,13 +165,6 @@ create table room_assignments (
186
165
  room_id int not null
187
166
  );
188
167
 
189
- create table seats (
190
- flight_number int not null,
191
- seat int not null,
192
- customer int,
193
- primary key (flight_number, seat)
194
- );
195
-
196
168
  create table capitols (
197
169
  country text not null,
198
170
  city text not null,
@@ -208,13 +180,4 @@ create table products_restaurants (
208
180
  create table employees_groups (
209
181
  employee_id int not null,
210
182
  group_id int not null
211
- );
212
-
213
- create table pk_called_ids (
214
- id serial not null,
215
- reference_code int not null,
216
- code_label varchar(50) default null,
217
- abbreviation varchar(50) default null,
218
- description varchar(50) default null,
219
- primary key (id, reference_code)
220
- );
183
+ );
@@ -1,17 +1,3 @@
1
- create table topics (
2
- id int not null,
3
- name varchar(50) default null,
4
- feed_size int default null,
5
- primary key (id)
6
- );
7
-
8
- create table topic_sources (
9
- topic_id int not null,
10
- platform varchar(50) not null,
11
- keywords varchar(50) default null,
12
- primary key (topic_id,platform)
13
- );
14
-
15
1
  create table reference_types (
16
2
  reference_type_id integer primary key,
17
3
  type_label varchar(50) default null,
@@ -101,9 +87,9 @@ create table membership_statuses (
101
87
  );
102
88
 
103
89
  create table departments (
104
- department_id integer not null,
90
+ id integer not null,
105
91
  location_id integer not null,
106
- primary key (department_id, location_id)
92
+ primary key (id, location_id)
107
93
  );
108
94
 
109
95
  create table employees (
@@ -115,15 +101,9 @@ create table employees (
115
101
 
116
102
  create table comments (
117
103
  id integer not null primary key autoincrement,
118
- person_id int null,
119
- shown int null,
120
- person_type varchar(100) null,
121
- hack_id int null
122
- );
123
-
124
- create table hacks (
125
- id integer not null primary key autoincrement,
126
- name varchar(50) not null
104
+ article_id int not null,
105
+ person_id int not null,
106
+ person_type varchar(100) not null
127
107
  );
128
108
 
129
109
  create table restaurants (
@@ -172,13 +152,6 @@ create table room_assignments (
172
152
  room_id integer not null
173
153
  );
174
154
 
175
- create table seats (
176
- flight_number integer not_null,
177
- seat integer not_null,
178
- customer integer,
179
- primary key (flight_number, seat)
180
- );
181
-
182
155
  create table capitols (
183
156
  country text not null,
184
157
  city text not null,
@@ -194,13 +167,4 @@ create table products_restaurants (
194
167
  create table employees_groups (
195
168
  employee_id integer not null,
196
169
  group_id integer not null
197
- );
198
-
199
- create table pk_called_ids (
200
- id integer not null,
201
- reference_code int not null,
202
- code_label varchar(50) default null,
203
- abbreviation varchar(50) default null,
204
- description varchar(50) default null,
205
- primary key (id, reference_code)
206
- );
170
+ );
@@ -1,17 +1,5 @@
1
1
  USE [composite_primary_keys_unittest];
2
2
 
3
- CREATE TABLE topics (
4
- id [int] IDENTITY(1000,1) NOT NULL,
5
- name [varchar](50) default NULL,
6
- feed_size [int] default NULL
7
- );
8
-
9
- CREATE TABLE topic_sources (
10
- topic_id [int] NOT NULL,
11
- platform [varchar](50) NOT NULL,
12
- keywords [varchar](50) default NULL,
13
- );
14
-
15
3
  CREATE TABLE reference_types (
16
4
  reference_type_id [int] IDENTITY(1000,1) NOT NULL,
17
5
  type_label [varchar](50) NULL,
@@ -102,10 +90,10 @@ CREATE TABLE membership_statuses (
102
90
  );
103
91
 
104
92
  CREATE TABLE departments (
105
- department_id [int] NOT NULL,
93
+ id [int] IDENTITY(100,1) NOT NULL,
106
94
  location_id [int] NOT NULL
107
95
  CONSTRAINT [departments_pk] PRIMARY KEY
108
- ( [department_id], [location_id] )
96
+ ( [id], [location_id] )
109
97
  );
110
98
 
111
99
  CREATE TABLE employees (
@@ -117,15 +105,9 @@ CREATE TABLE employees (
117
105
 
118
106
  CREATE TABLE comments (
119
107
  id [int] IDENTITY(1000,1) PRIMARY KEY NOT NULL,
120
- person_id [int] NULL,
121
- shown [int] NULL,
122
- person_type varchar(100) NULL,
123
- hack_id [int] NULL
124
- );
125
-
126
- CREATE TABLE hacks (
127
- id [int] IDENTITY(1000,1) PRIMARY KEY NOT NULL,
128
- name [varchar](50) NOT NULL
108
+ article_id [int] NOT NULL,
109
+ person_id [int] NOT NULL,
110
+ person_type varchar(100) NULL
129
111
  );
130
112
 
131
113
  CREATE TABLE restaurants (
@@ -176,14 +158,6 @@ CREATE TABLE room_assignments (
176
158
  room_id [int] NOT NULL
177
159
  );
178
160
 
179
- CREATE TABLE seats (
180
- flight_number [int] NOT NULL,
181
- seat [int] NOT NULL,
182
- customer [int]
183
- CONSTRAINT [seats_pk] PRIMARY KEY
184
- ( [flight_number], [seat] )
185
- );
186
-
187
161
  CREATE TABLE capitols (
188
162
  country varchar(450) NOT NULL,
189
163
  city varchar(450) NOT NULL
@@ -200,14 +174,4 @@ CREATE TABLE products_restaurants (
200
174
  CREATE TABLE employees_groups (
201
175
  employee_id [int] not null,
202
176
  group_id [int] not null
203
- );
204
-
205
- CREATE TABLE pk_called_ids (
206
- id [int] IDENTITY(1000,1) NOT NULL,
207
- reference_code [int] not null,
208
- code_label [varchar](50) default null,
209
- abbreviation [varchar](50) default null,
210
- description [varchar](50) default null
211
- CONSTRAINT [pk_called_ids_pk] PRIMARY KEY
212
- ( [id], [reference_code] )
213
177
  );
@@ -1,11 +1,16 @@
1
1
  class Department < ActiveRecord::Base
2
- self.primary_keys = :department_id, :location_id
2
+ self.primary_keys = :id, :location_id
3
+
3
4
  has_many :employees,
4
5
  # We intentionally redefine primary key for test purposes. #455
5
- :primary_key => [:department_id, :location_id],
6
+ :primary_key => [:id, :location_id],
6
7
  :foreign_key => [:department_id, :location_id]
8
+
9
+ has_many :comments, :through => :employees
10
+
7
11
  has_one :head, :class_name => 'Employee', :autosave => true, :dependent => :delete,
8
12
  # We intentionally redefine primary key for test purposes. #455
9
- :primary_key => [:department_id, :location_id],
13
+ :primary_key => [:id, :location_id],
10
14
  :foreign_key => [:department_id, :location_id]
15
+
11
16
  end
@@ -1,15 +1,15 @@
1
1
  accounting:
2
- department_id: 1
2
+ id: 1
3
3
  location_id: 1
4
4
 
5
5
  engineering:
6
- department_id: 2
6
+ id: 2
7
7
  location_id: 1
8
8
 
9
9
  human_resources:
10
- department_id: 3
10
+ id: 3
11
11
  location_id: 2
12
12
 
13
13
  offsite_accounting:
14
- department_id: 1
14
+ id: 1
15
15
  location_id: 2
@@ -1,11 +1,11 @@
1
1
  santiago_first:
2
2
  id: 1
3
3
  user_id: 1
4
- article_id: 1
4
+ article: first
5
5
  rating: 4
6
6
 
7
7
  santiago_second:
8
8
  id: 2
9
9
  user_id: 1
10
- article_id: 2
10
+ article: second
11
11
  rating: 5
@@ -8,4 +8,4 @@ b:
8
8
  franchise_id: 1
9
9
  store_id: 1
10
10
  city_id: 2
11
- suburb_id: 1
11
+ suburb_id: 2
@@ -7,11 +7,11 @@ first:
7
7
  second1:
8
8
  id: 2
9
9
  city_id: 2
10
- suburb_id: 1
10
+ suburb_id: 2
11
11
  name: First Street
12
12
 
13
13
  second2:
14
14
  id: 3
15
15
  city_id: 2
16
- suburb_id: 1
16
+ suburb_id: 2
17
17
  name: Second Street
@@ -5,10 +5,10 @@ first:
5
5
 
6
6
  second:
7
7
  city_id: 2
8
- suburb_id: 1
8
+ suburb_id: 2
9
9
  name: Second Suburb
10
10
 
11
11
  no_mcdonalds:
12
12
  city_id: 1
13
- suburb_id: 2
13
+ suburb_id: 3
14
14
  name: Third Suburb