composite_primary_keys 12.0.0 → 12.0.5

Sign up to get free protection for your applications and to get access to all the features.
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