composite_primary_keys 12.0.5 → 13.0.0

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 (56) hide show
  1. checksums.yaml +4 -4
  2. data/History.rdoc +883 -862
  3. data/README.rdoc +181 -180
  4. data/lib/composite_primary_keys.rb +119 -118
  5. data/lib/composite_primary_keys/active_model/attribute_assignment.rb +19 -19
  6. data/lib/composite_primary_keys/associations/association_scope.rb +66 -68
  7. data/lib/composite_primary_keys/associations/join_dependency.rb +118 -103
  8. data/lib/composite_primary_keys/attribute_methods.rb +21 -9
  9. data/lib/composite_primary_keys/attribute_methods/primary_key.rb +0 -2
  10. data/lib/composite_primary_keys/attribute_methods/read.rb +30 -30
  11. data/lib/composite_primary_keys/attribute_methods/write.rb +35 -35
  12. data/lib/composite_primary_keys/base.rb +141 -141
  13. data/lib/composite_primary_keys/connection_adapters/abstract/database_statements.rb +37 -22
  14. data/lib/composite_primary_keys/connection_adapters/sqlserver/database_statements.rb +44 -44
  15. data/lib/composite_primary_keys/core.rb +48 -48
  16. data/lib/composite_primary_keys/nested_attributes.rb +1 -1
  17. data/lib/composite_primary_keys/persistence.rb +82 -81
  18. data/lib/composite_primary_keys/reflection.rb +91 -29
  19. data/lib/composite_primary_keys/relation.rb +197 -193
  20. data/lib/composite_primary_keys/relation/batches.rb +16 -8
  21. data/lib/composite_primary_keys/relation/calculations.rb +104 -81
  22. data/lib/composite_primary_keys/relation/finder_methods.rb +235 -235
  23. data/lib/composite_primary_keys/relation/predicate_builder/association_query_value.rb +39 -20
  24. data/lib/composite_primary_keys/relation/query_methods.rb +42 -42
  25. data/lib/composite_primary_keys/relation/where_clause.rb +18 -23
  26. data/lib/composite_primary_keys/table_metadata.rb +11 -0
  27. data/lib/composite_primary_keys/version.rb +8 -8
  28. data/test/abstract_unit.rb +114 -114
  29. data/test/connections/databases.ci.yml +22 -19
  30. data/test/fixtures/db_definitions/db2-create-tables.sql +112 -112
  31. data/test/fixtures/db_definitions/db2-drop-tables.sql +16 -16
  32. data/test/fixtures/db_definitions/mysql.sql +180 -180
  33. data/test/fixtures/db_definitions/oracle.drop.sql +41 -41
  34. data/test/fixtures/db_definitions/oracle.sql +199 -199
  35. data/test/fixtures/db_definitions/postgresql.sql +182 -182
  36. data/test/fixtures/db_definitions/sqlite.sql +169 -169
  37. data/test/fixtures/db_definitions/sqlserver.sql +176 -176
  38. data/test/fixtures/department.rb +16 -16
  39. data/test/fixtures/departments.yml +19 -15
  40. data/test/fixtures/employees.yml +33 -28
  41. data/test/fixtures/restaurants_suburbs.yml +10 -10
  42. data/test/fixtures/streets.yml +16 -16
  43. data/test/fixtures/suburbs.yml +14 -14
  44. data/test/fixtures/user.rb +11 -11
  45. data/test/test_associations.rb +364 -358
  46. data/test/test_attributes.rb +75 -60
  47. data/test/test_calculations.rb +49 -42
  48. data/test/test_create.rb +218 -180
  49. data/test/test_delete.rb +182 -179
  50. data/test/test_exists.rb +39 -39
  51. data/test/test_find.rb +170 -157
  52. data/test/test_ids.rb +112 -112
  53. data/test/test_nested_attributes.rb +67 -67
  54. data/test/test_update.rb +96 -96
  55. metadata +5 -5
  56. data/lib/composite_primary_keys/connection_adapters/mysql/database_statements.rb +0 -24
@@ -1,177 +1,177 @@
1
- USE [composite_primary_keys_unittest];
2
-
3
- CREATE TABLE reference_types (
4
- reference_type_id [int] IDENTITY(1000,1) NOT NULL,
5
- type_label [varchar](50) NULL,
6
- abbreviation [varchar](50) NULL,
7
- description [varchar](50) NULL
8
- );
9
-
10
- CREATE TABLE reference_codes (
11
- reference_type_id [int],
12
- reference_code [int],
13
- code_label [varchar](50) NULL,
14
- abbreviation [varchar](50) NULL,
15
- description [varchar](50) NULL
16
- );
17
-
18
- CREATE TABLE products (
19
- id [int] IDENTITY(1000,1) NOT NULL,
20
- name [varchar](50) NULL
21
- );
22
-
23
- CREATE TABLE tariffs (
24
- [tariff_id] [int],
25
- [start_date] [date],
26
- [amount] [int] NULL,
27
- [created_at] [datetimeoffset](7) NOT NULL,
28
- [updated_at] [datetimeoffset](7) NOT NULL
29
- CONSTRAINT [tariffs_pk] PRIMARY KEY
30
- ( [tariff_id], [start_date] )
31
- );
32
-
33
- CREATE TABLE product_tariffs (
34
- [product_id] [int],
35
- [tariff_id] [int],
36
- [tariff_start_date] [date]
37
- CONSTRAINT [product_tariffs_pk] PRIMARY KEY
38
- ( [product_id], [tariff_id], [tariff_start_date] )
39
- );
40
-
41
- CREATE TABLE suburbs (
42
- city_id [int],
43
- suburb_id [int],
44
- name varchar(50) not null,
45
- CONSTRAINT [suburbs_pk] PRIMARY KEY
46
- ( [city_id], [suburb_id] )
47
- );
48
-
49
- CREATE TABLE streets (
50
- id [int] IDENTITY(1000,1) NOT NULL,
51
- city_id [int] NOT NULL,
52
- suburb_id [int] NOT NULL,
53
- name [varchar](50) NOT NULL
54
- );
55
-
56
- CREATE TABLE users (
57
- id [int] IDENTITY(1000,1) NOT NULL,
58
- name varchar(50) NOT NULL
59
- );
60
-
61
- CREATE TABLE articles (
62
- id [int] IDENTITY(1000,1) NOT NULL,
63
- name varchar(50) NOT NULL
64
- );
65
-
66
- CREATE TABLE readings (
67
- id [int] PRIMARY KEY,
68
- user_id [int] NOT NULL,
69
- article_id [int] NOT NULL,
70
- rating [int] NOT NULL
71
- );
72
-
73
- CREATE TABLE groups (
74
- id [int] IDENTITY(1000,1) NOT NULL,
75
- name [varchar](50) NOT NULL
76
- );
77
-
78
- CREATE TABLE memberships (
79
- user_id [int] NOT NULL,
80
- group_id [int] NOT NULL
81
- CONSTRAINT [memberships_pk] PRIMARY KEY
82
- ( [user_id], [group_id] )
83
- );
84
-
85
- CREATE TABLE membership_statuses (
86
- id [int] IDENTITY(1,1) NOT NULL,
87
- user_id [int] not null,
88
- group_id [int] not null,
89
- status varchar(50) not null
90
- );
91
-
92
- CREATE TABLE departments (
93
- id [int] IDENTITY(100,1) NOT NULL,
94
- location_id [int] NOT NULL
95
- CONSTRAINT [departments_pk] PRIMARY KEY
96
- ( [id], [location_id] )
97
- );
98
-
99
- CREATE TABLE employees (
100
- id [int] IDENTITY(1000,1) NOT NULL,
101
- department_id [int] NULL,
102
- location_id [int] NULL,
103
- name [varchar](50) NOT NULL
104
- );
105
-
106
- CREATE TABLE comments (
107
- id [int] IDENTITY(1000,1) PRIMARY KEY NOT NULL,
108
- article_id [int] NOT NULL,
109
- person_id [int] NOT NULL,
110
- person_type varchar(100) NULL
111
- );
112
-
113
- CREATE TABLE restaurants (
114
- franchise_id [int] NOT NULL,
115
- store_id [int] NOT NULL,
116
- name [varchar](100),
117
- lock_version [int] DEFAULT 0
118
- CONSTRAINT [restaurants_pk] PRIMARY KEY CLUSTERED
119
- ( [franchise_id], [store_id] )
120
- );
121
-
122
- CREATE TABLE restaurants_suburbs (
123
- franchise_id [int] NOT NULL,
124
- store_id [int] NOT NULL,
125
- city_id [int] NOT NULL,
126
- suburb_id [int] NOT NULL
127
- );
128
-
129
- CREATE TABLE dorms (
130
- id [int] IDENTITY(1000,1) PRIMARY KEY NOT NULL
131
- );
132
-
133
- CREATE TABLE rooms (
134
- dorm_id [int] NOT NULL,
135
- room_id [int] NOT NULL,
136
- CONSTRAINT [rooms_pk] PRIMARY KEY CLUSTERED
137
- ( [dorm_id], [room_id] )
138
- );
139
-
140
- CREATE TABLE room_attributes (
141
- id [int] IDENTITY(1000,1) PRIMARY KEY NOT NULL,
142
- name [varchar](50)
143
- );
144
-
145
- CREATE TABLE room_attribute_assignments (
146
- dorm_id [int] NOT NULL,
147
- room_id [int] NOT NULL,
148
- room_attribute_id [int] NOT NULL
149
- );
150
-
151
- CREATE TABLE students (
152
- id [int] IDENTITY(1000,1) PRIMARY KEY NOT NULL
153
- );
154
-
155
- CREATE TABLE room_assignments (
156
- student_id [int] NOT NULL,
157
- dorm_id [int] NOT NULL,
158
- room_id [int] NOT NULL
159
- );
160
-
161
- CREATE TABLE capitols (
162
- country varchar(450) NOT NULL,
163
- city varchar(450) NOT NULL
164
- CONSTRAINT [capitols_pk] PRIMARY KEY
165
- ( [country], [city] )
166
- );
167
-
168
- CREATE TABLE products_restaurants (
169
- product_id [int] NOT NULL,
170
- franchise_id [int] NOT NULL,
171
- store_id [int] NOT NULL
172
- );
173
-
174
- CREATE TABLE employees_groups (
175
- employee_id [int] not null,
176
- group_id [int] not null
1
+ USE [composite_primary_keys_unittest];
2
+
3
+ CREATE TABLE reference_types (
4
+ reference_type_id [int] IDENTITY(1000,1) NOT NULL,
5
+ type_label [varchar](50) NULL,
6
+ abbreviation [varchar](50) NULL,
7
+ description [varchar](50) NULL
8
+ );
9
+
10
+ CREATE TABLE reference_codes (
11
+ reference_type_id [int],
12
+ reference_code [int],
13
+ code_label [varchar](50) NULL,
14
+ abbreviation [varchar](50) NULL,
15
+ description [varchar](50) NULL
16
+ );
17
+
18
+ CREATE TABLE products (
19
+ id [int] IDENTITY(1000,1) NOT NULL,
20
+ name [varchar](50) NULL
21
+ );
22
+
23
+ CREATE TABLE tariffs (
24
+ [tariff_id] [int],
25
+ [start_date] [date],
26
+ [amount] [int] NULL,
27
+ [created_at] [datetimeoffset](7) NOT NULL,
28
+ [updated_at] [datetimeoffset](7) NOT NULL
29
+ CONSTRAINT [tariffs_pk] PRIMARY KEY
30
+ ( [tariff_id], [start_date] )
31
+ );
32
+
33
+ CREATE TABLE product_tariffs (
34
+ [product_id] [int],
35
+ [tariff_id] [int],
36
+ [tariff_start_date] [date]
37
+ CONSTRAINT [product_tariffs_pk] PRIMARY KEY
38
+ ( [product_id], [tariff_id], [tariff_start_date] )
39
+ );
40
+
41
+ CREATE TABLE suburbs (
42
+ city_id [int],
43
+ suburb_id [int],
44
+ name varchar(50) not null,
45
+ CONSTRAINT [suburbs_pk] PRIMARY KEY
46
+ ( [city_id], [suburb_id] )
47
+ );
48
+
49
+ CREATE TABLE streets (
50
+ id [int] IDENTITY(1000,1) NOT NULL,
51
+ city_id [int] NOT NULL,
52
+ suburb_id [int] NOT NULL,
53
+ name [varchar](50) NOT NULL
54
+ );
55
+
56
+ CREATE TABLE users (
57
+ id [int] IDENTITY(1000,1) NOT NULL,
58
+ name varchar(50) NOT NULL
59
+ );
60
+
61
+ CREATE TABLE articles (
62
+ id [int] IDENTITY(1000,1) NOT NULL,
63
+ name varchar(50) NOT NULL
64
+ );
65
+
66
+ CREATE TABLE readings (
67
+ id [int] PRIMARY KEY,
68
+ user_id [int] NOT NULL,
69
+ article_id [int] NOT NULL,
70
+ rating [int] NOT NULL
71
+ );
72
+
73
+ CREATE TABLE groups (
74
+ id [int] IDENTITY(1000,1) NOT NULL,
75
+ name [varchar](50) NOT NULL
76
+ );
77
+
78
+ CREATE TABLE memberships (
79
+ user_id [int] NOT NULL,
80
+ group_id [int] NOT NULL
81
+ CONSTRAINT [memberships_pk] PRIMARY KEY
82
+ ( [user_id], [group_id] )
83
+ );
84
+
85
+ CREATE TABLE membership_statuses (
86
+ id [int] IDENTITY(1,1) NOT NULL,
87
+ user_id [int] not null,
88
+ group_id [int] not null,
89
+ status varchar(50) not null
90
+ );
91
+
92
+ CREATE TABLE departments (
93
+ id [int] IDENTITY(100,1) NOT NULL,
94
+ location_id [int] NOT NULL
95
+ CONSTRAINT [departments_pk] PRIMARY KEY
96
+ ( [id], [location_id] )
97
+ );
98
+
99
+ CREATE TABLE employees (
100
+ id [int] IDENTITY(1000,1) NOT NULL,
101
+ department_id [int] NULL,
102
+ location_id [int] NULL,
103
+ name [varchar](50) NOT NULL
104
+ );
105
+
106
+ CREATE TABLE comments (
107
+ id [int] IDENTITY(1000,1) PRIMARY KEY NOT NULL,
108
+ article_id [int] NOT NULL,
109
+ person_id [int] NOT NULL,
110
+ person_type varchar(100) NULL
111
+ );
112
+
113
+ CREATE TABLE restaurants (
114
+ franchise_id [int] NOT NULL,
115
+ store_id [int] NOT NULL,
116
+ name [varchar](100),
117
+ lock_version [int] DEFAULT 0
118
+ CONSTRAINT [restaurants_pk] PRIMARY KEY CLUSTERED
119
+ ( [franchise_id], [store_id] )
120
+ );
121
+
122
+ CREATE TABLE restaurants_suburbs (
123
+ franchise_id [int] NOT NULL,
124
+ store_id [int] NOT NULL,
125
+ city_id [int] NOT NULL,
126
+ suburb_id [int] NOT NULL
127
+ );
128
+
129
+ CREATE TABLE dorms (
130
+ id [int] IDENTITY(1000,1) PRIMARY KEY NOT NULL
131
+ );
132
+
133
+ CREATE TABLE rooms (
134
+ dorm_id [int] NOT NULL,
135
+ room_id [int] NOT NULL,
136
+ CONSTRAINT [rooms_pk] PRIMARY KEY CLUSTERED
137
+ ( [dorm_id], [room_id] )
138
+ );
139
+
140
+ CREATE TABLE room_attributes (
141
+ id [int] IDENTITY(1000,1) PRIMARY KEY NOT NULL,
142
+ name [varchar](50)
143
+ );
144
+
145
+ CREATE TABLE room_attribute_assignments (
146
+ dorm_id [int] NOT NULL,
147
+ room_id [int] NOT NULL,
148
+ room_attribute_id [int] NOT NULL
149
+ );
150
+
151
+ CREATE TABLE students (
152
+ id [int] IDENTITY(1000,1) PRIMARY KEY NOT NULL
153
+ );
154
+
155
+ CREATE TABLE room_assignments (
156
+ student_id [int] NOT NULL,
157
+ dorm_id [int] NOT NULL,
158
+ room_id [int] NOT NULL
159
+ );
160
+
161
+ CREATE TABLE capitols (
162
+ country varchar(450) NOT NULL,
163
+ city varchar(450) NOT NULL
164
+ CONSTRAINT [capitols_pk] PRIMARY KEY
165
+ ( [country], [city] )
166
+ );
167
+
168
+ CREATE TABLE products_restaurants (
169
+ product_id [int] NOT NULL,
170
+ franchise_id [int] NOT NULL,
171
+ store_id [int] NOT NULL
172
+ );
173
+
174
+ CREATE TABLE employees_groups (
175
+ employee_id [int] not null,
176
+ group_id [int] not null
177
177
  );
@@ -1,16 +1,16 @@
1
- class Department < ActiveRecord::Base
2
- self.primary_keys = :id, :location_id
3
-
4
- has_many :employees,
5
- # We intentionally redefine primary key for test purposes. #455
6
- :primary_key => [:id, :location_id],
7
- :foreign_key => [:department_id, :location_id]
8
-
9
- has_many :comments, :through => :employees
10
-
11
- has_one :head, :class_name => 'Employee', :autosave => true, :dependent => :delete,
12
- # We intentionally redefine primary key for test purposes. #455
13
- :primary_key => [:id, :location_id],
14
- :foreign_key => [:department_id, :location_id]
15
-
16
- end
1
+ class Department < ActiveRecord::Base
2
+ self.primary_keys = :id, :location_id
3
+
4
+ has_many :employees,
5
+ # We intentionally redefine primary key for test purposes. #455
6
+ :primary_key => [:id, :location_id],
7
+ :foreign_key => [:department_id, :location_id]
8
+
9
+ has_many :comments, :through => :employees
10
+
11
+ has_one :head, :class_name => 'Employee', :autosave => true, :dependent => :delete,
12
+ # We intentionally redefine primary key for test purposes. #455
13
+ :primary_key => [:id, :location_id],
14
+ :foreign_key => [:department_id, :location_id]
15
+
16
+ end
@@ -1,15 +1,19 @@
1
- accounting:
2
- id: 1
3
- location_id: 1
4
-
5
- engineering:
6
- id: 2
7
- location_id: 1
8
-
9
- human_resources:
10
- id: 3
11
- location_id: 2
12
-
13
- offsite_accounting:
14
- id: 1
15
- location_id: 2
1
+ accounting:
2
+ id: 1
3
+ location_id: 1
4
+
5
+ engineering:
6
+ id: 2
7
+ location_id: 1
8
+
9
+ human_resources:
10
+ id: 3
11
+ location_id: 2
12
+
13
+ offsite_accounting:
14
+ id: 1
15
+ location_id: 2
16
+
17
+ offsite_engineering:
18
+ id: 2
19
+ location_id: 2
@@ -1,28 +1,33 @@
1
- steve:
2
- id: 1
3
- department_id: 1
4
- location_id: 1
5
- name: Steve
6
-
7
- jill:
8
- id: 2
9
- department_id: 1
10
- location_id: 1
11
- name: Jill
12
-
13
- sarah:
14
- id: 3
15
- department_id: 2
16
- location_id: 1
17
- name: Sarah
18
-
19
- robert:
20
- id: 4
21
- department_id: 2
22
- location_id: 1
23
- name: Robert
24
-
25
- mindy:
26
- department_id: 3
27
- location_id: 2
28
- name: Mindy
1
+ steve:
2
+ id: 1
3
+ department_id: 1
4
+ location_id: 1
5
+ name: Steve
6
+
7
+ jill:
8
+ id: 2
9
+ department_id: 1
10
+ location_id: 1
11
+ name: Jill
12
+
13
+ sarah:
14
+ id: 3
15
+ department_id: 2
16
+ location_id: 1
17
+ name: Sarah
18
+
19
+ robert:
20
+ id: 4
21
+ department_id: 2
22
+ location_id: 1
23
+ name: Robert
24
+
25
+ mindy:
26
+ department_id: 3
27
+ location_id: 2
28
+ name: Mindy
29
+
30
+ casey:
31
+ department_id: 2
32
+ location_id: 2
33
+ name: Casey