resultset attribute from can now take a scalarref and use it verbatim
[dbsrgits/DBIx-Class.git] / t / 76select.t
CommitLineData
218aa968 1use strict;
2use warnings;
3
4use Test::More;
5use Test::Exception;
6use lib qw(t/lib);
7use DBICTest;
8
9my $schema = DBICTest->init_schema();
10
0eb27426 11plan tests => 11;
218aa968 12
13my $rs = $schema->resultset('CD')->search({},
14 {
15 '+select' => \ 'COUNT(*)',
16 '+as' => 'count'
17 }
18);
19lives_ok(sub { $rs->first->get_column('count') }, 'additional count rscolumn present');
20dies_ok(sub { $rs->first->get_column('nonexistent_column') }, 'nonexistant column requests still throw exceptions');
21
22$rs = $schema->resultset('CD')->search({},
23 {
24 '+select' => [ \ 'COUNT(*)', 'title' ],
25 '+as' => [ 'count', 'addedtitle' ]
26 }
27);
28lives_ok(sub { $rs->first->get_column('count') }, 'multiple +select/+as columns, 1st rscolumn present');
29lives_ok(sub { $rs->first->get_column('addedtitle') }, 'multiple +select/+as columns, 2nd rscolumn present');
30
31$rs = $schema->resultset('CD')->search({},
32 {
33 '+select' => [ \ 'COUNT(*)', 'title' ],
34 '+as' => [ 'count', 'addedtitle' ]
35 }
36)->search({},
37 {
38 '+select' => 'title',
39 '+as' => 'addedtitle2'
40 }
41);
42lives_ok(sub { $rs->first->get_column('count') }, '+select/+as chained search 1st rscolumn present');
43lives_ok(sub { $rs->first->get_column('addedtitle') }, '+select/+as chained search 1st rscolumn present');
44lives_ok(sub { $rs->first->get_column('addedtitle2') }, '+select/+as chained search 3rd rscolumn present');
0eb27426 45
46
47# test the from search attribute (gets between the FROM and WHERE keywords, allows arbitrary subselects)
48# also shows that outer select attributes are ok (i.e. order_by)
49#
50# from doesn't seem to be useful without using a scalarref - there were no initial tests >:(
51#
52$schema->storage->debug (1);
53my $cds = $schema->resultset ('CD')->search ({}, { order_by => 'me.cdid'}); # make sure order is consistent
54cmp_ok ($cds->count, '>', 2, 'Initially populated with more than 2 CDs');
55
56my $table = $cds->result_source->name;
57my $subsel = $cds->search ({}, {
58 columns => [qw/cdid title/],
59 from => \ "(SELECT cdid, title FROM $table LIMIT 2) me",
60});
61
62is ($subsel->count, 2, 'Subselect correctly limited the rs to 2 cds');
63is ($subsel->next->title, $cds->next->title, 'First CD title match');
64is ($subsel->next->title, $cds->next->title, 'Second CD title match');