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.
- checksums.yaml +4 -4
- data/History.rdoc +883 -862
- data/README.rdoc +181 -180
- data/lib/composite_primary_keys.rb +119 -118
- data/lib/composite_primary_keys/active_model/attribute_assignment.rb +19 -19
- data/lib/composite_primary_keys/associations/association_scope.rb +66 -68
- data/lib/composite_primary_keys/associations/join_dependency.rb +118 -103
- data/lib/composite_primary_keys/attribute_methods.rb +21 -9
- data/lib/composite_primary_keys/attribute_methods/primary_key.rb +0 -2
- data/lib/composite_primary_keys/attribute_methods/read.rb +30 -30
- data/lib/composite_primary_keys/attribute_methods/write.rb +35 -35
- data/lib/composite_primary_keys/base.rb +141 -141
- data/lib/composite_primary_keys/connection_adapters/abstract/database_statements.rb +37 -22
- data/lib/composite_primary_keys/connection_adapters/sqlserver/database_statements.rb +44 -44
- data/lib/composite_primary_keys/core.rb +48 -48
- data/lib/composite_primary_keys/nested_attributes.rb +1 -1
- data/lib/composite_primary_keys/persistence.rb +82 -81
- data/lib/composite_primary_keys/reflection.rb +91 -29
- data/lib/composite_primary_keys/relation.rb +197 -193
- data/lib/composite_primary_keys/relation/batches.rb +16 -8
- data/lib/composite_primary_keys/relation/calculations.rb +104 -81
- data/lib/composite_primary_keys/relation/finder_methods.rb +235 -235
- data/lib/composite_primary_keys/relation/predicate_builder/association_query_value.rb +39 -20
- data/lib/composite_primary_keys/relation/query_methods.rb +42 -42
- data/lib/composite_primary_keys/relation/where_clause.rb +18 -23
- data/lib/composite_primary_keys/table_metadata.rb +11 -0
- data/lib/composite_primary_keys/version.rb +8 -8
- data/test/abstract_unit.rb +114 -114
- data/test/connections/databases.ci.yml +22 -19
- data/test/fixtures/db_definitions/db2-create-tables.sql +112 -112
- data/test/fixtures/db_definitions/db2-drop-tables.sql +16 -16
- data/test/fixtures/db_definitions/mysql.sql +180 -180
- data/test/fixtures/db_definitions/oracle.drop.sql +41 -41
- data/test/fixtures/db_definitions/oracle.sql +199 -199
- data/test/fixtures/db_definitions/postgresql.sql +182 -182
- data/test/fixtures/db_definitions/sqlite.sql +169 -169
- data/test/fixtures/db_definitions/sqlserver.sql +176 -176
- data/test/fixtures/department.rb +16 -16
- data/test/fixtures/departments.yml +19 -15
- data/test/fixtures/employees.yml +33 -28
- data/test/fixtures/restaurants_suburbs.yml +10 -10
- data/test/fixtures/streets.yml +16 -16
- data/test/fixtures/suburbs.yml +14 -14
- data/test/fixtures/user.rb +11 -11
- data/test/test_associations.rb +364 -358
- data/test/test_attributes.rb +75 -60
- data/test/test_calculations.rb +49 -42
- data/test/test_create.rb +218 -180
- data/test/test_delete.rb +182 -179
- data/test/test_exists.rb +39 -39
- data/test/test_find.rb +170 -157
- data/test/test_ids.rb +112 -112
- data/test/test_nested_attributes.rb +67 -67
- data/test/test_update.rb +96 -96
- metadata +5 -5
- 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
|
);
|
data/test/fixtures/department.rb
CHANGED
@@ -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
|
data/test/fixtures/employees.yml
CHANGED
@@ -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
|