Commit | Line | Data |
c0329273 |
1 | BEGIN { do "./t/lib/ANFANG.pm" or die ( $@ || $! ) } |
2 | |
908aa1bb |
3 | use strict; |
4 | use warnings; |
79adc44f |
5 | no warnings 'exiting'; |
908aa1bb |
6 | |
7 | use Test::More; |
52864fbd |
8 | use Test::Deep; |
b4976ee3 |
9 | use Test::Exception; |
c0329273 |
10 | |
908aa1bb |
11 | use DBICTest; |
12 | |
13 | my $schema = DBICTest->init_schema(no_populate => 1); |
14 | |
742280c7 |
15 | $schema->resultset('Artist')->create({ name => 'JMJ', cds => [{ |
16 | title => 'Magnetic Fields', |
17 | year => 1981, |
18 | genre => { name => 'electro' }, |
19 | tracks => [ |
20 | { title => 'm1' }, |
21 | { title => 'm2' }, |
22 | { title => 'm3' }, |
23 | { title => 'm4' }, |
24 | ], |
25 | } ] }); |
26 | |
908aa1bb |
27 | $schema->resultset('CD')->create({ |
28 | title => 'Equinoxe', |
29 | year => 1978, |
30 | artist => { name => 'JMJ' }, |
31 | genre => { name => 'electro' }, |
32 | tracks => [ |
33 | { title => 'e1' }, |
34 | { title => 'e2' }, |
35 | { title => 'e3' }, |
36 | ], |
37 | single_track => { |
38 | title => 'o1', |
39 | cd => { |
40 | title => 'Oxygene', |
41 | year => 1976, |
742280c7 |
42 | artist => { name => 'JMJ' }, |
9ceb04c6 |
43 | artwork => {}, |
908aa1bb |
44 | tracks => [ |
45 | { title => 'o2', position => 2}, # the position should not be needed here, bug in MC |
46 | ], |
47 | }, |
48 | }, |
49 | }); |
50 | |
ce556881 |
51 | $schema->resultset('CD')->create({ artist => 1, year => 1977, title => "fuzzy_1" }); |
52 | |
79adc44f |
53 | $schema->resultset('Artist')->create({ name => "${_}_cdless" }) |
54 | for (qw( Z A )); |
908aa1bb |
55 | |
79adc44f |
56 | # subs at the end of the test refer to this |
57 | my $native_inflator; |
58 | |
59 | ### TESTS START |
60 | # run entire test twice - with and without "native inflator" |
61 | INFTYPE: for ('', '(native inflator)') { |
62 | |
63 | $native_inflator = $_; |
64 | |
65 | cmp_structures( |
66 | rs_contents( $schema->resultset ('CD')->search_rs ({}, { |
67 | prefetch => { single_track => { cd => 'artist' } }, |
68 | order_by => 'me.cdid', |
69 | }) ), |
908aa1bb |
70 | [ |
79adc44f |
71 | [ |
72 | { cdid => 1, single_track => undef, artist => 1, genreid => 1, year => 1981, title => "Magnetic Fields" }, |
73 | { single_track => code(sub { null_branch ( \@_, [ |
74 | { trackid => undef, title => undef, position => undef, cd => undef, last_updated_at => undef, last_updated_on => undef }, |
75 | { cd => code(sub { null_branch ( \@_, [ |
76 | { cdid => undef, single_track => undef, artist => undef, genreid => undef, year => undef, title => undef }, |
77 | { |
78 | artist => code(sub { null_branch ( \@_, [ |
79 | { artistid => undef, name => undef, charfield => undef, rank => undef } |
80 | ] ) } ) |
81 | } |
82 | ] ) } ) } |
83 | ] ) } ) } |
84 | ], |
85 | [ |
86 | { cdid => 2, single_track => undef, artist => 1, genreid => undef, year => 1976, title => "Oxygene" }, |
87 | { single_track => code(sub { null_branch ( \@_, [ |
88 | { trackid => undef, title => undef, position => undef, cd => undef, last_updated_at => undef, last_updated_on => undef }, |
89 | { cd => code(sub { null_branch ( \@_, [ |
90 | { cdid => undef, single_track => undef, artist => undef, genreid => undef, year => undef, title => undef }, |
91 | { |
92 | artist => code(sub { null_branch ( \@_, [ |
93 | { artistid => undef, name => undef, charfield => undef, rank => undef } |
94 | ] ) } ) |
95 | } |
96 | ] ) } ) } |
97 | ] ) } ) } |
98 | ], |
99 | [ |
100 | { cdid => 3, single_track => 6, artist => 1, genreid => 1, year => 1978, title => "Equinoxe" }, |
101 | { single_track => [ |
102 | { trackid => 6, title => 'o1', position => 1, cd => 2, last_updated_at => undef, last_updated_on => undef }, |
103 | { cd => [ |
104 | { cdid => 2, single_track => undef, artist => 1, genreid => undef, year => 1976, title => "Oxygene" }, |
105 | { |
106 | artist => [ |
107 | { artistid => 1, name => 'JMJ', charfield => undef, rank => 13 } |
108 | ] |
109 | } |
110 | ] } |
908aa1bb |
111 | ] } |
79adc44f |
112 | ], |
113 | [ |
114 | { cdid => 4, single_track => undef, artist => 1, genreid => undef, year => 1977, title => "fuzzy_1" }, |
115 | { single_track => code(sub { null_branch ( \@_, [ |
116 | { trackid => undef, title => undef, position => undef, cd => undef, last_updated_at => undef, last_updated_on => undef }, |
117 | { cd => code(sub { null_branch ( \@_, [ |
118 | { cdid => undef, single_track => undef, artist => undef, genreid => undef, year => undef, title => undef }, |
119 | { |
120 | artist => code(sub { null_branch ( \@_, [ |
121 | { artistid => undef, name => undef, charfield => undef, rank => undef } |
122 | ] ) } ) |
123 | } |
124 | ] ) } ) } |
125 | ] ) } ) } |
126 | ], |
ce556881 |
127 | ], |
79adc44f |
128 | "Simple 1:1 descend with classic prefetch $native_inflator" |
129 | ); |
ce556881 |
130 | |
79adc44f |
131 | cmp_structures( |
132 | rs_contents( $schema->resultset ('CD')->search_rs ({}, { |
133 | join => { single_track => { cd => 'artist' } }, |
134 | columns => [ |
135 | { 'year' => 'me.year' }, |
136 | { 'genreid' => 'me.genreid' }, |
137 | { 'single_track.cd.artist.artistid' => 'artist.artistid' }, |
138 | { 'title' => 'me.title' }, |
139 | { 'artist' => 'me.artist' }, |
140 | ], |
141 | order_by => 'me.cdid', |
142 | }) ), |
908aa1bb |
143 | [ |
79adc44f |
144 | [ |
145 | { artist => 1, genreid => 1, year => 1981, title => "Magnetic Fields" }, |
146 | { single_track => code(sub { null_branch ( \@_, [ |
908aa1bb |
147 | undef, |
79adc44f |
148 | { cd => [ |
149 | undef, |
150 | { |
151 | artist => [ |
152 | { artistid => undef } |
153 | ] |
154 | } |
155 | ] } |
156 | ] ) } ) } |
157 | ], |
158 | [ |
159 | { artist => 1, genreid => undef, year => 1976, title => "Oxygene" }, |
160 | { single_track => code(sub { null_branch ( \@_, [ |
908aa1bb |
161 | undef, |
79adc44f |
162 | { cd => [ |
163 | undef, |
164 | { |
165 | artist => [ |
166 | { artistid => undef } |
167 | ] |
168 | } |
169 | ] } |
170 | ] ) } ) } |
171 | ], |
172 | [ |
173 | { artist => 1, genreid => 1, year => 1978, title => "Equinoxe" }, |
174 | { single_track => [ |
908aa1bb |
175 | undef, |
79adc44f |
176 | { cd => [ |
177 | undef, |
178 | { |
179 | artist => [ |
180 | { artistid => 1 } |
181 | ] |
182 | } |
183 | ] } |
908aa1bb |
184 | ] } |
79adc44f |
185 | ], |
186 | [ |
187 | { artist => 1, genreid => undef, year => 1977, title => "fuzzy_1" }, |
188 | { single_track => code(sub { null_branch ( \@_, [ |
ce556881 |
189 | undef, |
79adc44f |
190 | { cd => [ |
191 | undef, |
192 | { |
193 | artist => [ |
194 | { artistid => undef } |
195 | ] |
196 | } |
197 | ] } |
198 | ] ) } ) } |
199 | ], |
ce556881 |
200 | ], |
79adc44f |
201 | "Simple 1:1 descend with missing selectors $native_inflator", |
202 | ); |
ce556881 |
203 | |
79adc44f |
204 | cmp_structures( |
205 | rs_contents( $schema->resultset ('CD')->search_rs ({}, { |
206 | prefetch => [ { single_track => { cd => { artist => { cds => 'tracks' } } } } ], |
207 | order_by => [qw/me.cdid tracks.trackid/], |
208 | }) ), |
908aa1bb |
209 | [ |
79adc44f |
210 | [ |
211 | { cdid => 1, single_track => undef, artist => 1, genreid => 1, year => 1981, title => "Magnetic Fields" }, |
212 | { single_track => code(sub { null_collapsed_branch ( \@_, [ |
213 | { trackid => undef, title => undef, position => undef, cd => undef, last_updated_at => undef, last_updated_on => undef }, |
214 | { cd => [ |
215 | { cdid => undef, single_track => undef, artist => undef, genreid => undef, year => undef, title => undef }, |
216 | { |
217 | artist => [ |
218 | { artistid => undef, name => undef, charfield => undef, rank => undef }, |
219 | { cds => code(sub { null_collapsed_branch ( \@_, [ [ |
220 | { cdid => undef, single_track => undef, artist => undef, genreid => undef, year => undef, title => undef }, |
221 | { tracks => code(sub { null_collapsed_branch ( \@_, [ [ |
222 | { trackid => undef, title => undef, position => undef, cd => undef, last_updated_at => undef, last_updated_on => undef }, |
223 | ] ] ) } ) }, |
224 | ] ] ) } ) }, |
225 | ], |
226 | }, |
227 | ] }, |
228 | ] ) } ) }, |
229 | ], |
230 | [ |
231 | { cdid => 2, single_track => undef, artist => 1, genreid => undef, year => 1976, title => "Oxygene" }, |
232 | { single_track => code(sub { null_collapsed_branch ( \@_, [ |
233 | { trackid => undef, title => undef, position => undef, cd => undef, last_updated_at => undef, last_updated_on => undef }, |
234 | { cd => [ |
235 | { cdid => undef, single_track => undef, artist => undef, genreid => undef, year => undef, title => undef }, |
236 | { |
237 | artist => [ |
238 | { artistid => undef, name => undef, charfield => undef, rank => undef }, |
239 | { cds => code(sub { null_collapsed_branch ( \@_, [ [ |
240 | { cdid => undef, single_track => undef, artist => undef, genreid => undef, year => undef, title => undef }, |
241 | { tracks => code(sub { null_collapsed_branch ( \@_, [ [ |
242 | { trackid => undef, title => undef, position => undef, cd => undef, last_updated_at => undef, last_updated_on => undef }, |
243 | ] ] ) } ) }, |
244 | ] ] ) } ) }, |
245 | ], |
246 | }, |
247 | ] }, |
248 | ] ) } ) }, |
249 | ], |
250 | [ |
251 | { cdid => 3, single_track => 6, artist => 1, genreid => 1, year => 1978, title => "Equinoxe" }, |
252 | { single_track => [ |
253 | { trackid => 6, title => 'o1', position => 1, cd => 2, last_updated_at => undef, last_updated_on => undef }, |
254 | { cd => [ |
255 | { cdid => 2, single_track => undef, artist => 1, genreid => undef, year => 1976, title => "Oxygene" }, |
256 | { |
257 | artist => [ |
258 | { artistid => 1, name => 'JMJ', charfield => undef, rank => 13 }, |
259 | { cds => [ |
260 | [ |
261 | { cdid => 4, single_track => undef, artist => 1, genreid => undef, year => 1977, title => "fuzzy_1" }, |
262 | { tracks => code(sub { null_collapsed_branch ( \@_, [ |
263 | [ { trackid => undef, title => undef, position => undef, cd => undef, last_updated_at => undef, last_updated_on => undef } ], |
264 | ] ) } ) }, |
265 | ], |
266 | [ |
267 | { cdid => 1, single_track => undef, artist => 1, genreid => 1, year => 1981, title => "Magnetic Fields" }, |
268 | { tracks => [ |
269 | [ { trackid => 1, title => 'm1', position => 1, cd => 1, last_updated_at => undef, last_updated_on => undef } ], |
270 | [ { trackid => 2, title => 'm2', position => 2, cd => 1, last_updated_at => undef, last_updated_on => undef } ], |
271 | [ { trackid => 3, title => 'm3', position => 3, cd => 1, last_updated_at => undef, last_updated_on => undef } ], |
272 | [ { trackid => 4, title => 'm4', position => 4, cd => 1, last_updated_at => undef, last_updated_on => undef } ], |
273 | ]}, |
274 | ], |
275 | [ |
276 | { cdid => 2, single_track => undef, artist => 1, genreid => undef, year => 1976, title => "Oxygene" }, |
277 | { tracks => [ |
278 | [ { trackid => 5, title => 'o2', position => 2, cd => 2, last_updated_at => undef, last_updated_on => undef } ], |
279 | [ { trackid => 6, title => 'o1', position => 1, cd => 2, last_updated_at => undef, last_updated_on => undef } ], |
280 | ]}, |
281 | ], |
282 | [ |
283 | { cdid => 3, single_track => 6, artist => 1, genreid => 1, year => 1978, title => "Equinoxe" }, |
284 | { tracks => [ |
285 | [ { trackid => 7, title => 'e1', position => 1, cd => 3, last_updated_at => undef, last_updated_on => undef } ], |
286 | [ { trackid => 8, title => 'e2', position => 2, cd => 3, last_updated_at => undef, last_updated_on => undef } ], |
287 | [ { trackid => 9, title => 'e3', position => 3, cd => 3, last_updated_at => undef, last_updated_on => undef } ], |
288 | ]}, |
289 | ], |
290 | ]}, |
291 | ] |
292 | } |
293 | ] } |
ce556881 |
294 | ] } |
79adc44f |
295 | ], |
296 | [ |
297 | { cdid => 4, single_track => undef, artist => 1, genreid => undef, year => 1977, title => "fuzzy_1" }, |
298 | { single_track => code(sub { null_collapsed_branch ( \@_, [ |
299 | { trackid => undef, title => undef, position => undef, cd => undef, last_updated_at => undef, last_updated_on => undef }, |
300 | { cd => [ |
301 | { cdid => undef, single_track => undef, artist => undef, genreid => undef, year => undef, title => undef }, |
302 | { |
303 | artist => [ |
304 | { artistid => undef, name => undef, charfield => undef, rank => undef }, |
305 | { cds => code(sub { null_collapsed_branch ( \@_, [ [ |
306 | { cdid => undef, single_track => undef, artist => undef, genreid => undef, year => undef, title => undef }, |
307 | { tracks => code(sub { null_collapsed_branch ( \@_, [ [ |
308 | { trackid => undef, title => undef, position => undef, cd => undef, last_updated_at => undef, last_updated_on => undef }, |
309 | ] ] ) } ) }, |
310 | ] ] ) } ) }, |
311 | ], |
312 | }, |
313 | ] }, |
314 | ] ) } ) }, |
315 | ], |
ce556881 |
316 | ], |
79adc44f |
317 | "Collapsing 1:1 ending in chained has_many with classic prefetch $native_inflator", |
318 | ); |
908aa1bb |
319 | |
79adc44f |
320 | cmp_structures ( |
321 | rs_contents( $schema->resultset ('Artist')->search_rs ({}, { |
322 | join => { cds => 'tracks' }, |
323 | '+columns' => [ |
324 | (map { "cds.$_" } $schema->source('CD')->columns), |
325 | (map { +{ "cds.tracks.$_" => "tracks.$_" } } $schema->source('Track')->columns), |
326 | ], |
327 | order_by => [qw/cds.cdid tracks.trackid me.name/], |
328 | }) ), |
908aa1bb |
329 | [ |
79adc44f |
330 | [ |
331 | { artistid => 3, name => 'A_cdless', charfield => undef, rank => 13 }, |
332 | { cds => code(sub { null_branch ( \@_, [ |
333 | { cdid => undef, single_track => undef, artist => undef, genreid => undef, year => undef, title => undef }, |
334 | { tracks => code(sub { null_branch ( \@_, [ |
335 | { trackid => undef, title => undef, position => undef, cd => undef, last_updated_at => undef, last_updated_on => undef }, |
336 | ] ) } ) }, |
337 | ] ) } ) }, |
338 | ], |
339 | [ |
340 | { artistid => 2, name => 'Z_cdless', charfield => undef, rank => 13 }, |
341 | { cds => code(sub { null_branch ( \@_, [ |
342 | { cdid => undef, single_track => undef, artist => undef, genreid => undef, year => undef, title => undef }, |
343 | { tracks => code(sub { null_branch ( \@_, [ |
344 | { trackid => undef, title => undef, position => undef, cd => undef, last_updated_at => undef, last_updated_on => undef }, |
345 | ] ) } ) }, |
346 | ] ) } ) }, |
347 | ], |
348 | [ |
349 | { artistid => 1, name => 'JMJ', charfield => undef, rank => 13 }, |
350 | { cds => [ |
351 | { cdid => 1, single_track => undef, artist => 1, genreid => 1, year => 1981, title => "Magnetic Fields" }, |
352 | { tracks => [ |
353 | { trackid => 1, title => 'm1', position => 1, cd => 1, last_updated_at => undef, last_updated_on => undef }, |
354 | ]}, |
908aa1bb |
355 | ]}, |
79adc44f |
356 | ], |
357 | [ |
358 | { artistid => 1, name => 'JMJ', charfield => undef, rank => 13 }, |
359 | { cds => [ |
360 | { cdid => 1, single_track => undef, artist => 1, genreid => 1, year => 1981, title => "Magnetic Fields" }, |
361 | { tracks => [ |
362 | { trackid => 2, title => 'm2', position => 2, cd => 1, last_updated_at => undef, last_updated_on => undef }, |
363 | ]}, |
908aa1bb |
364 | ]}, |
79adc44f |
365 | ], |
366 | [ |
367 | { artistid => 1, name => 'JMJ', charfield => undef, rank => 13 }, |
368 | { cds => [ |
369 | { cdid => 1, single_track => undef, artist => 1, genreid => 1, year => 1981, title => "Magnetic Fields" }, |
370 | { tracks => [ |
371 | { trackid => 3, title => 'm3', position => 3, cd => 1, last_updated_at => undef, last_updated_on => undef }, |
372 | ]}, |
908aa1bb |
373 | ]}, |
79adc44f |
374 | ], |
375 | [ |
376 | { artistid => 1, name => 'JMJ', charfield => undef, rank => 13 }, |
377 | { cds => [ |
378 | { cdid => 1, single_track => undef, artist => 1, genreid => 1, year => 1981, title => "Magnetic Fields" }, |
379 | { tracks => [ |
380 | { trackid => 4, title => 'm4', position => 4, cd => 1, last_updated_at => undef, last_updated_on => undef }, |
381 | ]}, |
908aa1bb |
382 | ]}, |
79adc44f |
383 | ], |
384 | [ |
385 | { artistid => 1, name => 'JMJ', charfield => undef, rank => 13 }, |
386 | { cds => [ |
387 | { cdid => 2, single_track => undef, artist => 1, genreid => undef, year => 1976, title => "Oxygene" }, |
388 | { tracks => [ |
389 | { trackid => 5, title => 'o2', position => 2, cd => 2, last_updated_at => undef, last_updated_on => undef }, |
390 | ]}, |
908aa1bb |
391 | ]}, |
79adc44f |
392 | ], |
393 | [ |
394 | { artistid => 1, name => 'JMJ', charfield => undef, rank => 13 }, |
395 | { cds => [ |
396 | { cdid => 2, single_track => undef, artist => 1, genreid => undef, year => 1976, title => "Oxygene" }, |
397 | { tracks => [ |
398 | { trackid => 6, title => 'o1', position => 1, cd => 2, last_updated_at => undef, last_updated_on => undef }, |
399 | ]}, |
908aa1bb |
400 | ]}, |
79adc44f |
401 | ], |
402 | [ |
403 | { artistid => 1, name => 'JMJ', charfield => undef, rank => 13 }, |
404 | { cds => [ |
405 | { cdid => 3, single_track => 6, artist => 1, genreid => 1, year => 1978, title => "Equinoxe" }, |
406 | { tracks => [ |
407 | { trackid => 7, title => 'e1', position => 1, cd => 3, last_updated_at => undef, last_updated_on => undef }, |
408 | ]}, |
908aa1bb |
409 | ]}, |
79adc44f |
410 | ], |
411 | [ |
412 | { artistid => 1, name => 'JMJ', charfield => undef, rank => 13 }, |
413 | { cds => [ |
414 | { cdid => 3, single_track => 6, artist => 1, genreid => 1, year => 1978, title => "Equinoxe" }, |
415 | { tracks => [ |
416 | { trackid => 8, title => 'e2', position => 2, cd => 3, last_updated_at => undef, last_updated_on => undef }, |
417 | ]}, |
908aa1bb |
418 | ]}, |
79adc44f |
419 | ], |
420 | [ |
421 | { artistid => 1, name => 'JMJ', charfield => undef, rank => 13 }, |
422 | { cds => [ |
423 | { cdid => 3, single_track => 6, artist => 1, genreid => 1, year => 1978, title => "Equinoxe" }, |
424 | { tracks => [ |
425 | { trackid => 9, title => 'e3', position => 3, cd => 3, last_updated_at => undef, last_updated_on => undef }, |
426 | ]}, |
908aa1bb |
427 | ]}, |
79adc44f |
428 | ], |
429 | [ |
430 | { artistid => 1, name => 'JMJ', charfield => undef, rank => 13 }, |
431 | { cds => [ |
432 | { cdid => 4, single_track => undef, artist => 1, genreid => undef, year => 1977, title => "fuzzy_1" }, |
433 | { tracks => code(sub { null_branch ( \@_, [ |
434 | { trackid => undef, title => undef, position => undef, cd => undef, last_updated_at => undef, last_updated_on => undef }, |
435 | ] ) } ) }, |
436 | ]}, |
437 | ], |
908aa1bb |
438 | ], |
79adc44f |
439 | "Non-Collapsing chained has_many $native_inflator", |
440 | ); |
441 | |
442 | cmp_structures ( |
443 | rs_contents( $schema->resultset ('Artist')->search_rs ({}, { |
444 | collapse => 1, |
445 | join => 'cds', |
446 | columns => [qw( cds.title cds.artist )], |
447 | order_by => [qw( me.name cds.title )], |
448 | }) ), |
ce556881 |
449 | [ |
79adc44f |
450 | [ |
451 | undef, |
452 | { cds => code(sub { null_collapsed_branch ( \@_, [ |
453 | [ { artist => undef, title => undef } ] |
454 | ] ) } ) }, |
455 | ], |
456 | [ |
457 | undef, |
458 | { cds => [ |
459 | [ { artist => 1, title => "Equinoxe" } ], |
460 | [ { artist => 1, title => "Magnetic Fields" } ], |
461 | [ { artist => 1, title => "Oxygene" } ], |
462 | [ { artist => 1, title => "fuzzy_1" } ], |
463 | ] } |
464 | ], |
465 | [ |
466 | undef, |
467 | { cds => code(sub { null_collapsed_branch ( \@_, [ |
468 | [ { artist => undef, title => undef } ] |
469 | ] ) } ) }, |
470 | ], |
ce556881 |
471 | ], |
79adc44f |
472 | "Expected output of collapsing 1:M with empty root selection $native_inflator", |
473 | ); |
9ceb04c6 |
474 | |
475 | cmp_structures ( |
476 | rs_contents( $schema->resultset ('CD')->search_rs ( |
477 | { |
478 | 'tracks.title' => 'e2', |
479 | 'cds.title' => 'Oxygene', |
480 | }, |
481 | { |
482 | collapse => 1, |
483 | join => [ |
484 | 'tracks', |
485 | { single_track => { cd => 'mandatory_artwork' } }, |
486 | { artist => { cds => 'mandatory_artwork'} }, |
487 | ], |
488 | columns => { |
489 | cdid => 'cdid', |
490 | 'single_track.cd.mandatory_artwork.cd_id' => 'mandatory_artwork.cd_id', |
491 | 'artist.cds.mandatory_artwork.cd_id' => 'mandatory_artwork_2.cd_id', |
492 | }, |
493 | }, |
494 | )), |
495 | [[ |
496 | { cdid => 3 }, |
497 | { |
498 | single_track => [ |
499 | undef, |
500 | { cd => [ |
501 | undef, |
502 | { mandatory_artwork => [ { cd_id => 2 } ] } |
503 | ] } |
504 | ], |
505 | artist => [ |
506 | undef, |
507 | { cds => [ |
508 | [ |
509 | undef, |
510 | { mandatory_artwork => [ { cd_id => 2 } ] } |
511 | ] |
512 | ] }, |
513 | ], |
514 | } |
515 | ]], |
516 | ); |
79adc44f |
517 | } |
ce556881 |
518 | |
79adc44f |
519 | sub null_branch { |
520 | cmp_deeply( |
521 | $_[0][0], |
522 | $native_inflator ? undef : bless( $_[1], $DBIx::Class::ResultSource::RowParser::Util::null_branch_class ), |
523 | ); |
524 | } |
525 | sub null_collapsed_branch { |
526 | cmp_deeply( |
527 | $_[0][0], |
528 | $native_inflator ? [] : bless( $_[1], $DBIx::Class::ResultSource::RowParser::Util::null_branch_class ), |
529 | ); |
530 | } |
aa1d8a87 |
531 | |
79adc44f |
532 | { |
533 | package DBICTest::_IRCapture; |
534 | sub inflate_result { [@_[2,3]] }; |
535 | } |
536 | |
537 | sub rs_contents { |
538 | my $rs = shift; |
539 | $rs->result_class('DBICTest::_IRCapture'); |
540 | die 'eeeeek - preprocessed $rs' if defined $rs->{_result_inflator}{is_core_row}; |
541 | $rs->{_result_inflator}{is_core_row} = 1 if $native_inflator; |
542 | [$rs->all], |
543 | } |
aa1d8a87 |
544 | |
ce556881 |
545 | sub cmp_structures { |
546 | my ($left, $right, $msg) = @_; |
547 | |
ce556881 |
548 | local $Test::Builder::Level = $Test::Builder::Level + 1; |
79adc44f |
549 | cmp_deeply($left, $right, $msg||()) or next INFTYPE; |
ce556881 |
550 | } |
551 | |
b4976ee3 |
552 | |
30681c23 |
553 | { |
554 | package DBICTest::_DoubleResult; |
555 | |
556 | sub inflate_result { |
557 | my $class = shift; |
558 | return map { DBIx::Class::ResultClass::HashRefInflator->inflate_result(@_) } (1,2); |
559 | } |
560 | } |
561 | |
562 | my $oxygene_rs = $schema->resultset('CD')->search({ 'me.title' => 'Oxygene' }); |
563 | |
564 | is_deeply( |
565 | [ $oxygene_rs->search({}, { result_class => 'DBICTest::_DoubleResult' })->all ], |
566 | [ ({ $oxygene_rs->single->get_columns }) x 2 ], |
567 | ); |
568 | |
569 | is_deeply( |
570 | [ $oxygene_rs->search({}, { |
571 | result_class => 'DBICTest::_DoubleResult', prefetch => [qw(artist tracks)], |
572 | order_by => [qw(me.cdid tracks.title)], |
573 | })->all ], |
574 | [ (@{$oxygene_rs->search({}, { |
575 | prefetch=> [qw(artist tracks)], |
576 | order_by => [qw(me.cdid tracks.title)], |
577 | })->all_hri}) x 2 ], |
578 | ); |
579 | |
b4976ee3 |
580 | |
581 | { |
582 | package DBICTest::_DieTrying; |
583 | |
584 | sub inflate_result { |
585 | die "nyah nyah nyah"; |
586 | } |
587 | } |
588 | |
589 | throws_ok { |
590 | $schema->resultset('CD')->search({}, { result_class => 'DBICTest::_DieTrying' })->all |
591 | } qr/nyah nyah nyah/, 'Exception in custom inflate_result propagated correctly'; |
592 | |
593 | |
908aa1bb |
594 | done_testing; |