Restore ability to handle underdefined root (t/prefetch/incomplete.t)
[dbsrgits/DBIx-Class.git] / t / resultset / as_query.t
CommitLineData
59af6677 1use strict;
be83e9ec 2use warnings;
59af6677 3
4use Test::More;
d0a3e4e2 5
59af6677 6use lib qw(t/lib);
7use DBICTest;
152d414d 8use DBIC::SqlMakerTest;
59af6677 9
4dc99a01 10my $schema = DBICTest->init_schema();
11my $art_rs = $schema->resultset('Artist');
12my $cdrs = $schema->resultset('CD');
59af6677 13
14{
152d414d 15 is_same_sql_bind(
af6aac2d 16 $art_rs->as_query,
45594863 17 "(SELECT me.artistid, me.name, me.rank, me.charfield FROM artist me)", [],
152d414d 18 );
59af6677 19}
20
21$art_rs = $art_rs->search({ name => 'Billy Joel' });
22
0e773352 23my $name_resolved_bind = [
24 { sqlt_datatype => 'varchar', sqlt_size => 100, dbic_colname => 'name' }
25 => 'Billy Joel'
26];
27
59af6677 28{
152d414d 29 is_same_sql_bind(
af6aac2d 30 $art_rs->as_query,
45594863 31 "(SELECT me.artistid, me.name, me.rank, me.charfield FROM artist me WHERE ( name = ? ))",
0e773352 32 [ $name_resolved_bind ],
152d414d 33 );
59af6677 34}
35
36$art_rs = $art_rs->search({ rank => 2 });
37
0e773352 38my $rank_resolved_bind = [
39 { sqlt_datatype => 'integer', dbic_colname => 'rank' }
40 => 2
41];
42
59af6677 43{
152d414d 44 is_same_sql_bind(
af6aac2d 45 $art_rs->as_query,
45594863 46 "(SELECT me.artistid, me.name, me.rank, me.charfield FROM artist me WHERE ( ( ( rank = ? ) AND ( name = ? ) ) ) )",
0e773352 47 [ $rank_resolved_bind, $name_resolved_bind ],
152d414d 48 );
59af6677 49}
50
658fa250 51my $rscol = $art_rs->get_column( 'charfield' );
52
53{
152d414d 54 is_same_sql_bind(
af6aac2d 55 $rscol->as_query,
45594863 56 "(SELECT me.charfield FROM artist me WHERE ( ( ( rank = ? ) AND ( name = ? ) ) ) )",
0e773352 57 [ $rank_resolved_bind, $name_resolved_bind ],
152d414d 58 );
658fa250 59}
70eb901c 60
5a825e67 61{
62 my $rs = $schema->resultset("CD")->search(
63 { 'artist.name' => 'Caterwauler McCrae' },
64 { join => [qw/artist/]}
65 );
66 my $subsel_rs = $schema->resultset("CD")->search( { cdid => { IN => $rs->get_column('cdid')->as_query } } );
67 is($subsel_rs->count, $rs->count, 'Subselect on PK got the same row count');
4abc8be6 68}
1bffc6b8 69
70
71is_same_sql_bind($schema->resultset('Artist')->search({
72 rank => 1,
73}, {
74 from => $schema->resultset('Artist')->search({ 'name' => 'frew'})->as_query,
75})->as_query,
76 '(SELECT me.artistid, me.name, me.rank, me.charfield FROM (
77 SELECT me.artistid, me.name, me.rank, me.charfield FROM
78 artist me
79 WHERE (
80 ( name = ? )
81 )
82 ) WHERE (
83 ( rank = ? )
84 )
85 )',
86 [
87 [{ dbic_colname => 'name', sqlt_datatype => 'varchar', sqlt_size => 100 }, 'frew'],
88 [{ dbic_colname => 'rank' }, 1],
89 ],
90 'from => ...->as_query works'
91);
92
93done_testing;