The tests are truly failing tests
[dbsrgits/DBIx-Class.git] / t / search / subquery.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings FATAL => 'all';
5
6 use Data::Dumper;
7
8 use Test::More;
9 use lib qw(t/lib);
10 use DBICTest;
11 use DBIC::SqlMakerTest;
12
13 plan tests => 4;
14
15 my $schema = DBICTest->init_schema();
16 my $art_rs = $schema->resultset('Artist');
17 my $cdrs = $schema->resultset('CD');
18
19 {
20   my $cdrs2 = $cdrs->search({
21     artist_id => { 'in' => $art_rs->search({}, { rows => 1 })->get_column( 'id' )->as_query },
22   });
23
24   my $arr = $cdrs2->as_query;
25   my ($query, @bind) = @{$$arr};
26   is_same_sql_bind(
27     $query, \@bind,
28     "SELECT me.cdid,me.artist,me.title,me.year,me.genreid,me.single_track FROM cd me WHERE artist_id IN ( SELECT id FROM artist me LIMIT 1 )",
29     [],
30   );
31 }
32
33 TODO: {
34 #  local $TODO = "'+select' doesn't work with as_query yet.";
35   my $rs = $art_rs->search(
36     {},
37     {
38       '+select' => [
39         $cdrs->search({}, { rows => 1 })->get_column('id')->as_query,
40       ],
41       '+as' => [
42         'cdid',
43       ],
44     },
45   );
46
47   my $arr = $rs->as_query;
48   my ($query, @bind) = @{$$arr};
49 warn "$query\n";
50   is_same_sql_bind(
51     $query, \@bind,
52     "SELECT me.artistid, me.name, me.rank, me.charfield, (SELECT id FROM cds LIMIT 1) AS cdid FROM artist me",
53     [],
54   );
55 }
56
57 TODO: {
58 #  local $TODO = "'from' doesn't work with as_query yet.";
59   my $rs = $cdrs->search(
60     {},
61     {
62       alias => 'cd2',
63       from => [
64         { cd2 => $cdrs->search({ id => { '>' => 20 } })->as_query },
65       ],
66     },
67   );
68
69   my $arr = $rs->as_query;
70   my ($query, @bind) = @{$$arr};
71   is_same_sql_bind(
72     $query, \@bind,
73     "SELECT me.artistid, me.name, me.rank, me.charfield FROM (SELECT me.artistid, me.name, me.rank, me.charfield FROM cds me WHERE id > 20) cd2",
74     [],
75   );
76 }
77
78 TODO: {
79 #  local $TODO = "The subquery isn't being wrapped in parens for some reason.";
80   my $rs = $cdrs->search({
81     year => {
82       '=' => $cdrs->search(
83         { artistid => { '=' => \'me.artistid' } },
84         { alias => 'inner' }
85       )->get_column('year')->max_rs->as_query,
86     },
87   });
88   my $arr = $rs->as_query;
89   my ($query, @bind) = @{$$arr};
90   is_same_sql_bind(
91     $query, \@bind,
92     "SELECT me.cdid, me.artistid, me.rank, me.charfield FROM cd me WHERE year = (SELECT MAX(inner.year) FROM cd inner WHERE artistid = me.artistid)",
93     [],
94   );
95 }
96
97 __END__