Merge 'trunk' into 'subquery'
[dbsrgits/DBIx-Class.git] / t / resultset / as_query.t
CommitLineData
59af6677 1#!/usr/bin/perl
2
3use strict;
4use warnings FATAL => 'all';
5
70eb901c 6use Data::Dumper;
7
59af6677 8use Test::More;
9use lib qw(t/lib);
10use DBICTest;
152d414d 11use DBIC::SqlMakerTest;
59af6677 12
36d80a6b 13plan tests => 5;
59af6677 14
4dc99a01 15my $schema = DBICTest->init_schema();
16my $art_rs = $schema->resultset('Artist');
17my $cdrs = $schema->resultset('CD');
59af6677 18
19{
20 my $arr = $art_rs->as_query;
4dc99a01 21 my ($query, @bind) = @{$$arr};
59af6677 22
152d414d 23 is_same_sql_bind(
24 $query, \@bind,
25 "SELECT me.artistid, me.name, me.rank, me.charfield FROM artist me", [],
26 );
59af6677 27}
28
29$art_rs = $art_rs->search({ name => 'Billy Joel' });
30
31{
32 my $arr = $art_rs->as_query;
4dc99a01 33 my ($query, @bind) = @{$$arr};
59af6677 34
152d414d 35 is_same_sql_bind(
36 $query, \@bind,
37 "SELECT me.artistid, me.name, me.rank, me.charfield FROM artist me WHERE ( name = ? )",
38 [ [ name => 'Billy Joel' ] ],
39 );
59af6677 40}
41
42$art_rs = $art_rs->search({ rank => 2 });
43
44{
03834f77 45 my $arr = $art_rs->as_query;
4dc99a01 46 my ($query, @bind) = @{$$arr};
59af6677 47
152d414d 48 is_same_sql_bind(
49 $query, \@bind,
03834f77 50 "SELECT me.artistid, me.name, me.rank, me.charfield FROM artist me WHERE ( ( rank = ? ) AND ( name = ? ) )",
152d414d 51 [ [ rank => 2 ], [ name => 'Billy Joel' ] ],
52 );
59af6677 53}
54
658fa250 55my $rscol = $art_rs->get_column( 'charfield' );
56
57{
03834f77 58 my $arr = $rscol->as_query;
4dc99a01 59 my ($query, @bind) = @{$$arr};
658fa250 60
152d414d 61 is_same_sql_bind(
62 $query, \@bind,
03834f77 63 "SELECT me.charfield FROM artist me WHERE ( ( ( rank = ? ) AND ( name = ? ) ) )",
152d414d 64 [ [ rank => 2 ], [ name => 'Billy Joel' ] ],
65 );
658fa250 66}
70eb901c 67
03834f77 68# This is an actual subquery.
4dc99a01 69{
36d80a6b 70 my $cdrs2 = $cdrs->search({
03834f77 71 artist_id => { 'in' => $art_rs->search({}, { rows => 1 })->get_column( 'id' )->as_query },
36d80a6b 72 });
73
4dc99a01 74 my $arr = $cdrs2->as_query;
75 my ($query, @bind) = @{$$arr};
36d80a6b 76 is_same_sql_bind(
77 $query, \@bind,
03834f77 78 "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 WHERE ( rank = ? ) AND ( name = ? ) LIMIT 1 )",
36d80a6b 79 [ [ rank => 2 ], [ name => 'Billy Joel' ] ],
80 );
4dc99a01 81}
82
59af6677 83__END__