1#!perl 2 3use strict; 4use warnings; 5 6use lib 't/lib'; 7use Test::More; 8use Test::Deep; 9use Test::Fatal 'dies_ok', 'lives_ok'; 10 11use TestSchema; 12my $schema = TestSchema->deploy_or_connect(); 13$schema->prepopulate; 14 15my $rs = $schema->resultset('Foo')->search({ id => 1 }); 16my $rs2 = $schema->resultset('Foo')->search({ id => { '>=' => 3 } }); 17my $rs3 = $schema->resultset('Foo')->search({ id => [ 1, 3 ] }); 18 19cmp_deeply [ sort map $_->id, $rs2->union($rs2)->all ], [3, 4, 5], 20 'union returns correct values'; 21 22cmp_deeply [ sort map $_->id, $rs2->union_all($rs2)->all ], [3, 3, 4, 4, 5, 5], 23 'union returns correct values'; 24 25cmp_deeply [ sort map $_->id, $rs2->union($rs)->all ], [1, 3, 4, 5], 26 'union returns correct values'; 27 28cmp_deeply [ sort map $_->id, $rs3->union($rs)->all ], [1, 3], 29 'union returns correct values'; 30 31cmp_deeply [ sort map $_->id, $rs3->union_all($rs)->all ], [1, 1, 3], 32 'union returns correct values'; 33 34cmp_deeply [ sort map $_->id, $rs2->intersect($rs)->all ], [], 35 'intersect returns correct values'; 36 37cmp_deeply [ sort map $_->id, $rs3->intersect($rs)->all ], [1], 38 'intersect returns correct values'; 39 40cmp_deeply [ sort map $_->id, $rs->intersect($rs3)->all ], [1], 41 'intersect returns correct values'; 42 43cmp_deeply [ sort map $_->id, $rs2->intersect($rs3)->all ], [3], 44 'intersect returns correct values'; 45 46cmp_deeply [ sort map $_->id, $rs3->intersect($rs2)->all ], [3], 47 'intersect returns correct values'; 48 49cmp_deeply [ sort map $_->id, $rs2->except($rs)->all ], [3, 4, 5], 50 'except returns correct values'; 51 52cmp_deeply [ sort map $_->id, $rs->except($rs2)->all ], [1], 53 'except returns correct values'; 54 55cmp_deeply [ sort map $_->id, $rs3->except($rs)->all ], [3], 56 'except returns correct values'; 57 58cmp_deeply [ sort map $_->id, $rs->except($rs3)->all ], [], 59 'except returns correct values'; 60 61cmp_deeply [ sort map $_->id, $rs2->except($rs3)->all ], [4, 5], 62 'except returns correct values'; 63 64cmp_deeply [ sort map $_->id, $rs3->except($rs2)->all ], [1], 65 'except returns correct values'; 66 67dies_ok { 68 my $rs3 = $rs->search(undef, { columns => ['id'] }); 69 $rs->union($rs3) ; 70} 'unioning differing ColSpecs dies'; 71 72dies_ok { 73 $rs->union($rs->search_rs(undef, { result_class => 'DBIx::Class::ResultClass::HashRefInflator'})) ; 74} 'unioning with differing ResultClasses dies'; 75 76dies_ok { $rs->union($schema->resultset('Bar')) } 'unioning differing ResultSets dies'; 77 78{ 79 my $rs3 = $rs->search(undef, { 80 columns => ['id'], 81 '+select' => [\'"foo" as station'], 82 '+as' => ['station'], 83 }); 84 my $rs4 = $schema->resultset('Bar')->search(undef, { 85 columns => ['id'], 86 '+select' => [\'"bar" as station'], 87 '+as' => ['station'], 88 }); 89 $rs3->result_class('DBIx::Class::ResultClass::HashRefInflator'); 90 $rs4->result_class('DBIx::Class::ResultClass::HashRefInflator'); 91 my $rs5 = $rs3->union($rs4); 92 lives_ok { [ $rs5->all ] } 93 q{unioning differing ResultSets does not die when you know what you're doing}; 94} 95 96done_testing; 97