composite_primary_keys 9.0.4 → 9.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/History.rdoc +20 -0
  3. data/Rakefile +37 -34
  4. data/lib/composite_primary_keys.rb +5 -10
  5. data/lib/composite_primary_keys/arel/in.rb +6 -6
  6. data/lib/composite_primary_keys/arel/sqlserver.rb +36 -0
  7. data/lib/composite_primary_keys/associations/association_scope.rb +51 -29
  8. data/lib/composite_primary_keys/attribute_methods/read.rb +3 -1
  9. data/lib/composite_primary_keys/connection_adapters/abstract_mysql_adapter.rb +22 -0
  10. data/lib/composite_primary_keys/relation.rb +30 -0
  11. data/lib/composite_primary_keys/relation/query_methods.rb +25 -36
  12. data/lib/composite_primary_keys/sanitization.rb +31 -47
  13. data/lib/composite_primary_keys/version.rb +1 -1
  14. data/tasks/databases/mysql.rake +40 -42
  15. data/tasks/databases/oracle.rake +29 -15
  16. data/tasks/databases/postgresql.rake +38 -47
  17. data/tasks/databases/sqlite.rake +25 -0
  18. data/tasks/databases/sqlserver.rake +32 -16
  19. data/test/abstract_unit.rb +12 -11
  20. data/test/connections/connection_spec.rb +27 -18
  21. data/test/connections/databases.ci.yml +5 -4
  22. data/test/connections/databases.example.yml +19 -4
  23. data/test/connections/databases.yml +25 -4
  24. data/test/fixtures/article.rb +6 -5
  25. data/test/fixtures/db_definitions/mysql.sql +16 -7
  26. data/test/fixtures/db_definitions/oracle.drop.sql +2 -0
  27. data/test/fixtures/db_definitions/oracle.sql +25 -15
  28. data/test/fixtures/db_definitions/postgresql.sql +11 -2
  29. data/test/fixtures/db_definitions/sqlite.sql +8 -0
  30. data/test/fixtures/db_definitions/sqlserver.sql +19 -33
  31. data/test/fixtures/pk_called_id.rb +5 -0
  32. data/test/fixtures/pk_called_ids.yml +11 -0
  33. data/test/test_associations.rb +334 -332
  34. data/test/test_create.rb +9 -1
  35. data/test/test_delete.rb +17 -39
  36. data/test/test_ids.rb +113 -109
  37. data/test/test_preload.rb +94 -0
  38. data/test/test_suite.rb +1 -1
  39. data/test/test_update.rb +12 -7
  40. metadata +14 -24
  41. data/lib/composite_primary_keys/associations/singular_association.rb +0 -14
  42. data/lib/composite_primary_keys/connection_adapters/abstract/connection_specification_changes.rb +0 -71
  43. data/lib/composite_primary_keys/connection_adapters/postgresql_adapter.rb +0 -50
  44. data/lib/composite_primary_keys/dirty.rb +0 -19
  45. data/lib/composite_primary_keys/validations/uniqueness.rb +0 -41
  46. data/tasks/databases/oracle_enhanced.rake +0 -27
  47. data/tasks/databases/sqlite3.rake +0 -27
  48. data/test/connections/native_ibm_db/connection.rb +0 -19
  49. data/test/connections/native_mysql/connection.rb +0 -17
  50. data/test/connections/native_oracle/connection.rb +0 -11
  51. data/test/connections/native_oracle_enhanced/connection.rb +0 -16
  52. data/test/connections/native_postgresql/connection.rb +0 -13
  53. data/test/connections/native_sqlite3/connection.rb +0 -9
  54. data/test/connections/native_sqlserver/connection.rb +0 -11
  55. data/test/fixtures/db_definitions/sqlserver.drop.sql +0 -92
  56. data/test/test_delete_all.rb +0 -29
@@ -1,18 +1,27 @@
1
- require 'yaml'
2
-
3
- module CompositePrimaryKeys
4
- class ConnectionSpec
5
- def self.[](adapter)
6
- config[adapter.to_s]
7
- end
8
-
9
- private
10
-
11
- def self.config
12
- @config ||= begin
13
- path = File.join(PROJECT_ROOT, 'test', 'connections', 'databases.yml')
14
- YAML.load_file(path)
15
- end
16
- end
17
- end
18
- end
1
+ require 'yaml'
2
+ require 'erb'
3
+
4
+ module CompositePrimaryKeys
5
+ class ConnectionSpec
6
+ def self.[](adapter)
7
+ config[adapter.to_s].dup
8
+ end
9
+
10
+ private
11
+
12
+ def self.config
13
+ @config ||= begin
14
+ # Find the file location
15
+ path = File.join(PROJECT_ROOT, 'test', 'connections', 'databases.yml')
16
+
17
+ # Run any erb code
18
+ template = ERB.new(File.read(path))
19
+ project_root = File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
20
+ data = template.result(binding)
21
+
22
+ # And now to YAML
23
+ YAML.load(data)
24
+ end
25
+ end
26
+ end
27
+ end
@@ -4,12 +4,13 @@ mysql:
4
4
  password: ""
5
5
  database: composite_primary_keys_unittest
6
6
 
7
- sqlite3:
8
- adapter: sqlite3
9
- database: db/composite_primary_keys_unittest.sqlite
10
-
11
7
  postgresql:
12
8
  adapter: postgresql
13
9
  database: composite_primary_keys_unittest
14
10
  username: postgres
15
11
  host: localhost
12
+
13
+ sqlite:
14
+ adapter: sqlite3
15
+ database: <%= File.join(project_root, 'db', 'composite_primary_keys_unittest.sqlite') %>
16
+
@@ -2,14 +2,24 @@
2
2
  # 1. Copy this file to test/connections/databases.yml.
3
3
  # 2. Update to match the databases you want to test against.
4
4
 
5
+ ibm_db:
6
+ database: ocdpdev
7
+ username: db2inst1
8
+ password: password
9
+ host: localhost
10
+
5
11
  mysql:
6
12
  adapter: mysql2
7
13
  username: root
14
+ password: mysql
8
15
  database: composite_primary_keys_unittest
9
16
 
10
- sqlite3:
11
- adapter: sqlite3
12
- database: db/composite_primary_keys_unittest.sqlite
17
+ oracle:
18
+ adapter: oracle_enhanced
19
+ database: xe
20
+ username: SYSTEM
21
+ password: oracle
22
+ host: localhost
13
23
 
14
24
  postgresql:
15
25
  adapter: postgresql
@@ -17,9 +27,14 @@ postgresql:
17
27
  username: postgres
18
28
  host: localhost
19
29
 
30
+ sqlite:
31
+ adapter: sqlite3
32
+ database: <%= File.join(project_root, 'db', 'composite_primary_keys_unittest.sqlite') %>
33
+
20
34
  sqlserver:
21
35
  adapter: sqlserver
36
+ username: cpk
37
+ password: cpk
22
38
  database: composite_primary_keys_unittest
23
- username: rails
24
39
  host: localhost
25
40
  port: 1433
@@ -1,9 +1,30 @@
1
- # To run tests:
2
- # 1. Copy this file to test/connections/databases.yml.
3
- # 2. Update to match the databases you want to test against.
4
- # 3. Build the database using rake <databasename>:build_database
1
+ mysql:
2
+ adapter: mysql2
3
+ username: root
4
+ password: mysql
5
+ database: composite_primary_keys_unittest
6
+
7
+ oracle:
8
+ adapter: oracle_enhanced
9
+ database: xe
10
+ username: SYSTEM
11
+ password: oracle
12
+ host: localhost
13
+
5
14
  postgresql:
6
15
  adapter: postgresql
7
16
  database: composite_primary_keys_unittest
8
17
  username: postgres
9
18
  host: localhost
19
+
20
+ sqlite:
21
+ adapter: sqlite3
22
+ database: <%= File.join(project_root, 'db', 'composite_primary_keys_unittest.sqlite') %>
23
+
24
+ sqlserver:
25
+ adapter: sqlserver
26
+ username: cpk
27
+ password: cpk
28
+ database: composite_primary_keys_unittest
29
+ host: localhost
30
+ port: 1433
@@ -1,5 +1,6 @@
1
- class Article < ActiveRecord::Base
2
- has_many :readings, :dependent => :delete_all
3
- has_many :users, :through => :readings
4
- end
5
-
1
+ class Article < ActiveRecord::Base
2
+ validates :id, uniqueness: true, numericality: true, allow_nil: true, allow_blank: true, on: :create
3
+ has_many :readings, :dependent => :delete_all
4
+ has_many :users, :through => :readings
5
+ end
6
+
@@ -1,5 +1,5 @@
1
1
  create table topics (
2
- id int not null auto_increment,
2
+ id int not null auto_increment,
3
3
  name varchar(50) default null,
4
4
  feed_size int default null,
5
5
  primary key (id)
@@ -155,8 +155,8 @@ create table restaurants (
155
155
  create table restaurants_suburbs (
156
156
  franchise_id int not null,
157
157
  store_id int not null,
158
- city_id int not null,
159
- suburb_id int not null
158
+ city_id int default null,
159
+ suburb_id int default null
160
160
  );
161
161
 
162
162
  create table dorms (
@@ -201,18 +201,27 @@ create table seats (
201
201
  );
202
202
 
203
203
  create table capitols (
204
- country varchar(100) default null,
205
- city varchar(100) default null,
204
+ country varchar(100) not null,
205
+ city varchar(100) not null,
206
206
  primary key (country, city)
207
207
  );
208
208
 
209
209
  create table products_restaurants (
210
210
  product_id int not null,
211
- franchise_id int not null,
212
- store_id int not null
211
+ franchise_id int default null,
212
+ store_id int default null
213
213
  );
214
214
 
215
215
  create table employees_groups (
216
216
  employee_id int not null,
217
217
  group_id int not null
218
218
  );
219
+
220
+ create table pk_called_ids (
221
+ id integer not null,
222
+ reference_code int not null,
223
+ code_label varchar(50) default null,
224
+ abbreviation varchar(50) default null,
225
+ description varchar(50) default null,
226
+ primary key (id, reference_code)
227
+ );
@@ -46,3 +46,5 @@ drop table seats;
46
46
  drop table capitols;
47
47
  drop table products_restaurants;
48
48
  drop table employees_groups;
49
+ drop table pk_called_ids;
50
+ drop sequence pk_called_ids_seq;
@@ -16,24 +16,24 @@ create sequence reference_types_seq start with 1000;
16
16
 
17
17
  create table reference_types (
18
18
  reference_type_id number(11) primary key,
19
- type_label varchar2(50) default null,
20
- abbreviation varchar2(50) default null,
21
- description varchar2(50) default null
19
+ type_label varchar(50) default null,
20
+ abbreviation varchar(50) default null,
21
+ description varchar(50) default null
22
22
  );
23
23
 
24
24
  create table reference_codes (
25
25
  reference_type_id number(11),
26
26
  reference_code number(11),
27
- code_label varchar2(50) default null,
28
- abbreviation varchar2(50) default null,
29
- description varchar2(50) default null
27
+ code_label varchar(50) default null,
28
+ abbreviation varchar(50) default null,
29
+ description varchar(50) default null
30
30
  );
31
31
 
32
32
  create sequence products_seq start with 1000;
33
33
 
34
34
  create table products (
35
35
  id number(11) primary key,
36
- name varchar2(50) default null
36
+ name varchar(50) default null
37
37
  );
38
38
 
39
39
  create table tariffs (
@@ -55,7 +55,7 @@ create table product_tariffs (
55
55
  create table suburbs (
56
56
  city_id number(11),
57
57
  suburb_id number(11),
58
- name varchar2(50) not null,
58
+ name varchar(50) not null,
59
59
  constraint suburbs_pk primary key (city_id, suburb_id)
60
60
  );
61
61
 
@@ -65,21 +65,21 @@ create table streets (
65
65
  id number(11) primary key,
66
66
  city_id number(11) not null,
67
67
  suburb_id number(11) not null,
68
- name varchar2(50) not null
68
+ name varchar(50) not null
69
69
  );
70
70
 
71
71
  create sequence users_seq start with 1000;
72
72
 
73
73
  create table users (
74
74
  id number(11) primary key,
75
- name varchar2(50) not null
75
+ name varchar(50) not null
76
76
  );
77
77
 
78
78
  create sequence articles_seq start with 1000;
79
79
 
80
80
  create table articles (
81
81
  id number(11) primary key,
82
- name varchar2(50) not null
82
+ name varchar(50) not null
83
83
  );
84
84
 
85
85
  create sequence readings_seq start with 1000;
@@ -95,7 +95,7 @@ create sequence groups_seq start with 1000;
95
95
 
96
96
  create table groups (
97
97
  id number(11) primary key,
98
- name varchar2(50) not null
98
+ name varchar(50) not null
99
99
  );
100
100
 
101
101
  create table memberships (
@@ -110,7 +110,7 @@ create table membership_statuses (
110
110
  id number(11) primary key,
111
111
  user_id number(11) not null,
112
112
  group_id number(11) not null,
113
- status varchar2(50) not null
113
+ status varchar(50) not null
114
114
  );
115
115
 
116
116
  create table departments (
@@ -218,8 +218,8 @@ create table seats (
218
218
  );
219
219
 
220
220
  create table capitols (
221
- country varchar2(100) not null,
222
- city varchar2(100) not null,
221
+ country varchar(100) not null,
222
+ city varchar(100) not null,
223
223
  primary key (country, city)
224
224
  );
225
225
 
@@ -234,3 +234,13 @@ create table employees_groups (
234
234
  group_id int not null
235
235
  );
236
236
 
237
+ create sequence pk_called_ids_seq start with 1000;
238
+
239
+ create table pk_called_ids (
240
+ id int not null,
241
+ reference_code int not null,
242
+ code_label varchar(50) default null,
243
+ abbreviation varchar(50) default null,
244
+ description varchar(50) default null,
245
+ constraint pk_called_ids_pk primary key (id, reference_code)
246
+ );
@@ -41,9 +41,9 @@ create table tariffs (
41
41
  tariff_id int not null,
42
42
  start_date date not null,
43
43
  amount int default null,
44
- primary key (tariff_id, start_date),
45
44
  created_at timestamp without time zone NOT NULL,
46
- updated_at timestamp without time zone NOT NULL
45
+ updated_at timestamp without time zone NOT NULL,
46
+ primary key (tariff_id, start_date)
47
47
  );
48
48
 
49
49
  create table product_tariffs (
@@ -218,3 +218,12 @@ create table employees_groups (
218
218
  employee_id int not null,
219
219
  group_id int not null
220
220
  );
221
+
222
+ create table pk_called_ids (
223
+ id serial not null,
224
+ reference_code int not null,
225
+ code_label varchar(50) default null,
226
+ abbreviation varchar(50) default null,
227
+ description varchar(50) default null,
228
+ primary key (id, reference_code)
229
+ );
@@ -204,3 +204,11 @@ create table employees_groups (
204
204
  group_id integer not null
205
205
  );
206
206
 
207
+ create table pk_called_ids (
208
+ id integer not null,
209
+ reference_code int not null,
210
+ code_label varchar(50) default null,
211
+ abbreviation varchar(50) default null,
212
+ description varchar(50) default null,
213
+ primary key (id, reference_code)
214
+ );
@@ -1,19 +1,16 @@
1
1
  USE [composite_primary_keys_unittest];
2
- go
3
2
 
4
3
  CREATE TABLE topics (
5
4
  id [int] IDENTITY(1000,1) NOT NULL,
6
5
  name [varchar](50) default NULL,
7
6
  feed_size [int] default NULL
8
7
  );
9
- go
10
8
 
11
9
  CREATE TABLE topic_sources (
12
10
  topic_id [int] NOT NULL,
13
11
  platform [varchar](50) NOT NULL,
14
12
  keywords [varchar](50) default NULL,
15
13
  );
16
- go
17
14
 
18
15
  CREATE TABLE reference_types (
19
16
  reference_type_id [int] IDENTITY(1000,1) NOT NULL,
@@ -21,7 +18,6 @@ CREATE TABLE reference_types (
21
18
  abbreviation [varchar](50) NULL,
22
19
  description [varchar](50) NULL
23
20
  );
24
- go
25
21
 
26
22
  CREATE TABLE reference_codes (
27
23
  reference_type_id [int],
@@ -30,22 +26,21 @@ CREATE TABLE reference_codes (
30
26
  abbreviation [varchar](50) NULL,
31
27
  description [varchar](50) NULL
32
28
  );
33
- go
34
29
 
35
30
  CREATE TABLE products (
36
31
  id [int] IDENTITY(1000,1) NOT NULL,
37
32
  name [varchar](50) NULL
38
33
  );
39
- go
40
34
 
41
35
  CREATE TABLE tariffs (
42
36
  [tariff_id] [int],
43
37
  [start_date] [date],
44
- [amount] [int] NULL
45
- CONSTRAINT [tariffs_pk] PRIMARY KEY
38
+ [amount] [int] NULL,
39
+ [created_at] [datetimeoffset](7) NOT NULL,
40
+ [updated_at] [datetimeoffset](7) NOT NULL
41
+ CONSTRAINT [tariffs_pk] PRIMARY KEY
46
42
  ( [tariff_id], [start_date] )
47
43
  );
48
- go
49
44
 
50
45
  CREATE TABLE product_tariffs (
51
46
  [product_id] [int],
@@ -54,7 +49,6 @@ CREATE TABLE product_tariffs (
54
49
  CONSTRAINT [product_tariffs_pk] PRIMARY KEY
55
50
  ( [product_id], [tariff_id], [tariff_start_date] )
56
51
  );
57
- go
58
52
 
59
53
  CREATE TABLE suburbs (
60
54
  city_id [int],
@@ -63,7 +57,6 @@ CREATE TABLE suburbs (
63
57
  CONSTRAINT [suburbs_pk] PRIMARY KEY
64
58
  ( [city_id], [suburb_id] )
65
59
  );
66
- go
67
60
 
68
61
  CREATE TABLE streets (
69
62
  id [int] IDENTITY(1000,1) NOT NULL,
@@ -71,19 +64,16 @@ CREATE TABLE streets (
71
64
  suburb_id [int] NOT NULL,
72
65
  name [varchar](50) NOT NULL
73
66
  );
74
- go
75
67
 
76
68
  CREATE TABLE users (
77
69
  id [int] IDENTITY(1000,1) NOT NULL,
78
70
  name varchar(50) NOT NULL
79
71
  );
80
- go
81
72
 
82
73
  CREATE TABLE articles (
83
74
  id [int] IDENTITY(1000,1) NOT NULL,
84
75
  name varchar(50) NOT NULL
85
76
  );
86
- go
87
77
 
88
78
  CREATE TABLE readings (
89
79
  id [int] PRIMARY KEY,
@@ -91,13 +81,11 @@ CREATE TABLE readings (
91
81
  article_id [int] NOT NULL,
92
82
  rating [int] NOT NULL
93
83
  );
94
- go
95
84
 
96
85
  CREATE TABLE groups (
97
86
  id [int] IDENTITY(1000,1) NOT NULL,
98
87
  name [varchar](50) NOT NULL
99
88
  );
100
- go
101
89
 
102
90
  CREATE TABLE memberships (
103
91
  user_id [int] NOT NULL,
@@ -105,7 +93,6 @@ CREATE TABLE memberships (
105
93
  CONSTRAINT [memberships_pk] PRIMARY KEY
106
94
  ( [user_id], [group_id] )
107
95
  );
108
- go
109
96
 
110
97
  CREATE TABLE membership_statuses (
111
98
  id [int] IDENTITY(1,1) NOT NULL,
@@ -113,7 +100,6 @@ CREATE TABLE membership_statuses (
113
100
  group_id [int] not null,
114
101
  status varchar(50) not null
115
102
  );
116
- go
117
103
 
118
104
  CREATE TABLE departments (
119
105
  department_id [int] NOT NULL,
@@ -121,14 +107,12 @@ CREATE TABLE departments (
121
107
  CONSTRAINT [departments_pk] PRIMARY KEY
122
108
  ( [department_id], [location_id] )
123
109
  );
124
- go
125
110
 
126
111
  CREATE TABLE employees (
127
112
  id [int] IDENTITY(1000,1) NOT NULL,
128
113
  department_id [int] NULL,
129
114
  location_id [int] NULL
130
115
  );
131
- go
132
116
 
133
117
  CREATE TABLE comments (
134
118
  id [int] IDENTITY(1000,1) PRIMARY KEY NOT NULL,
@@ -137,13 +121,11 @@ CREATE TABLE comments (
137
121
  person_type varchar(100) NULL,
138
122
  hack_id [int] NULL
139
123
  );
140
- go
141
124
 
142
125
  CREATE TABLE hacks (
143
126
  id [int] IDENTITY(1000,1) PRIMARY KEY NOT NULL,
144
127
  name [varchar](50) NOT NULL
145
128
  );
146
- go
147
129
 
148
130
  CREATE TABLE restaurants (
149
131
  franchise_id [int] NOT NULL,
@@ -153,7 +135,6 @@ CREATE TABLE restaurants (
153
135
  CONSTRAINT [restaurants_pk] PRIMARY KEY CLUSTERED
154
136
  ( [franchise_id], [store_id] )
155
137
  );
156
- go
157
138
 
158
139
  CREATE TABLE restaurants_suburbs (
159
140
  franchise_id [int] NOT NULL,
@@ -161,12 +142,10 @@ CREATE TABLE restaurants_suburbs (
161
142
  city_id [int] NOT NULL,
162
143
  suburb_id [int] NOT NULL
163
144
  );
164
- go
165
145
 
166
146
  CREATE TABLE dorms (
167
147
  id [int] IDENTITY(1000,1) PRIMARY KEY NOT NULL
168
148
  );
169
- go
170
149
 
171
150
  CREATE TABLE rooms (
172
151
  dorm_id [int] NOT NULL,
@@ -174,32 +153,27 @@ CREATE TABLE rooms (
174
153
  CONSTRAINT [rooms_pk] PRIMARY KEY CLUSTERED
175
154
  ( [dorm_id], [room_id] )
176
155
  );
177
- go
178
156
 
179
157
  CREATE TABLE room_attributes (
180
158
  id [int] IDENTITY(1000,1) PRIMARY KEY NOT NULL,
181
159
  name [varchar](50)
182
160
  );
183
- go
184
161
 
185
162
  CREATE TABLE room_attribute_assignments (
186
163
  dorm_id [int] NOT NULL,
187
164
  room_id [int] NOT NULL,
188
165
  room_attribute_id [int] NOT NULL
189
166
  );
190
- go
191
167
 
192
168
  CREATE TABLE students (
193
169
  id [int] IDENTITY(1000,1) PRIMARY KEY NOT NULL
194
170
  );
195
- go
196
171
 
197
172
  CREATE TABLE room_assignments (
198
173
  student_id [int] NOT NULL,
199
174
  dorm_id [int] NOT NULL,
200
175
  room_id [int] NOT NULL
201
176
  );
202
- go
203
177
 
204
178
  CREATE TABLE seats (
205
179
  flight_number [int] NOT NULL,
@@ -208,7 +182,6 @@ CREATE TABLE seats (
208
182
  CONSTRAINT [seats_pk] PRIMARY KEY
209
183
  ( [flight_number], [seat] )
210
184
  );
211
- go
212
185
 
213
186
  CREATE TABLE capitols (
214
187
  country varchar(450) NOT NULL,
@@ -216,11 +189,24 @@ CREATE TABLE capitols (
216
189
  CONSTRAINT [capitols_pk] PRIMARY KEY
217
190
  ( [country], [city] )
218
191
  );
219
- go
220
192
 
221
193
  CREATE TABLE products_restaurants (
222
194
  product_id [int] NOT NULL,
223
195
  franchise_id [int] NOT NULL,
224
196
  store_id [int] NOT NULL
225
197
  );
226
- go
198
+
199
+ CREATE TABLE employees_groups (
200
+ employee_id [int] not null,
201
+ group_id [int] not null
202
+ );
203
+
204
+ CREATE TABLE pk_called_ids (
205
+ id [int] IDENTITY(1000,1) NOT NULL,
206
+ reference_code [int] not null,
207
+ code_label [varchar](50) default null,
208
+ abbreviation [varchar](50) default null,
209
+ description [varchar](50) default null
210
+ CONSTRAINT [pk_called_ids_pk] PRIMARY KEY
211
+ ( [id], [reference_code] )
212
+ );