Merge 'subquery' into 'count_distinct'
Peter Rabbitson [Wed, 6 May 2009 15:40:31 +0000 (15:40 +0000)]
Add subquery/from test by michaelr (copied from subquery branch r5742)

1  2 
t/search/subquery.t

diff --combined t/search/subquery.t
@@@ -7,7 -7,12 +7,7 @@@ use Data::Dumper
  
  use Test::More;
  
- plan ( tests => 7 );
 -BEGIN {
 -    eval "use SQL::Abstract 1.49";
 -    plan $@
 -        ? ( skip_all => "Needs SQLA 1.49+" )
 -        : ( tests => 8 );
 -}
++plan ( tests => 8 );
  
  use lib qw(t/lib);
  use DBICTest;
@@@ -26,7 -31,7 +26,7 @@@ my $cdrs = $schema->resultset('CD')
    my ($query, @bind) = @{$$arr};
    is_same_sql_bind(
      $query, \@bind,
 -    "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 )",
 +    "( 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 ) )",
      [],
    );
  }
@@@ -45,7 -50,7 +45,7 @@@
    my ($query, @bind) = @{$$arr};
    is_same_sql_bind(
      $query, \@bind,
 -    "SELECT (SELECT id FROM cd me LIMIT 1) FROM artist me",
 +    "( SELECT (SELECT id FROM cd me LIMIT 1) FROM artist me )",
      [],
    );
  }
@@@ -64,7 -69,7 +64,7 @@@
    my ($query, @bind) = @{$$arr};
    is_same_sql_bind(
      $query, \@bind,
 -    "SELECT me.artistid, me.name, me.rank, me.charfield, (SELECT id FROM cd me LIMIT 1) FROM artist me",
 +    "( SELECT me.artistid, me.name, me.rank, me.charfield, (SELECT id FROM cd me LIMIT 1) FROM artist me )",
      [],
    );
  }
    my ($query, @bind) = @{$$arr};
    is_same_sql_bind(
      $query, \@bind,
 -    "SELECT cd2.cdid, cd2.artist, cd2.title, cd2.year, cd2.genreid, cd2.single_track FROM (SELECT me.cdid,me.artist,me.title,me.year,me.genreid,me.single_track FROM cd me WHERE id > 20) cd2",
 -    [],
 +    "( SELECT cd2.cdid, cd2.artist, cd2.title, cd2.year, cd2.genreid, cd2.single_track FROM (SELECT me.cdid,me.artist,me.title,me.year,me.genreid,me.single_track FROM cd me WHERE id > ?) cd2 )",
 +    [
 +      [ 'id', 20 ]
 +    ],
    );
  }
  
    my ($query, @bind) = @{$$arr};
    is_same_sql_bind(
      $query, \@bind,
 -    "SELECT me.artistid, me.name, me.rank, me.charfield FROM artist me JOIN (SELECT me.artist as cds_artist FROM cd me) cds ON me.artistid = cds_artist", []
 +    "( SELECT me.artistid, me.name, me.rank, me.charfield FROM artist me JOIN (SELECT me.artist as cds_artist FROM cd me) cds ON me.artistid = cds_artist )", []
    );
  
  
    my ($query, @bind) = @{$$arr};
    is_same_sql_bind(
      $query, \@bind,
 -    "SELECT cd2.cdid, cd2.artist, cd2.title, cd2.year, cd2.genreid, cd2.single_track 
 +    "( SELECT cd2.cdid, cd2.artist, cd2.title, cd2.year, cd2.genreid, cd2.single_track 
        FROM 
          (SELECT cd3.cdid,cd3.artist,cd3.title,cd3.year,cd3.genreid,cd3.single_track 
            FROM 
              (SELECT me.cdid,me.artist,me.title,me.year,me.genreid,me.single_track 
 -              FROM cd me WHERE id < 40) cd3
 -          WHERE id > 20) cd2",
 -    [],
 +              FROM cd me WHERE id < ?) cd3
 +          WHERE id > ?) cd2
 +    )",
 +    [
 +      [ 'id', 40 ], 
 +      [ 'id', 20 ]
 +    ],
    );
  
  }
    my ($query, @bind) = @{$$arr};
    is_same_sql_bind(
      $query, \@bind,
 -    "SELECT me.cdid, me.artist, me.title, me.year, me.genreid, me.single_track FROM cd me WHERE year = (SELECT MAX(inner.year) FROM cd inner WHERE artistid = me.artistid)",
 +    "( SELECT me.cdid, me.artist, me.title, me.year, me.genreid, me.single_track FROM cd me WHERE year = (SELECT MAX(inner.year) FROM cd inner WHERE artistid = me.artistid) )",
      [],
    );
  }
  
+ {
+   my $rs = $cdrs->search(
+     {},
+     {
+       alias => 'cd2',
+       from => [
+         { cd2 => $cdrs->search({ title => 'Thriller' })->as_query },
+       ],
+     },
+   );
+   my $arr = $rs->as_query;
+   my ($query, @bind) = @{$$arr};
+   is_same_sql_bind(
+     $query, \@bind,
 -    "SELECT cd2.cdid, cd2.artist, cd2.title, cd2.year, cd2.genreid, cd2.single_track FROM (SELECT me.cdid,me.artist,me.title,me.year,me.genreid,me.single_track FROM cd me WHERE title = 'Thriller') cd2",
 -    [],
++    "(SELECT cd2.cdid, cd2.artist, cd2.title, cd2.year, cd2.genreid, cd2.single_track FROM (SELECT me.cdid,me.artist,me.title,me.year,me.genreid,me.single_track FROM cd me WHERE title = ?) cd2)",
++    ['Thriller'],
+   );
+ }
  __END__