Spellcheck (jawnsy++)
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / Storage / DBI / AmbiguousGlob.pm
1 package DBIx::Class::Storage::DBI::AmbiguousGlob;
2
3 use strict;
4 use warnings;
5
6 use base 'DBIx::Class::Storage::DBI';
7 use mro 'c3';
8
9 =head1 NAME
10
11 DBIx::Class::Storage::DBI::AmbiguousGlob - Storage component for RDBMS choking on count(*)
12
13 =head1 DESCRIPTION
14
15 Some servers choke on things like:
16
17   COUNT(*) FROM (SELECT tab1.col, tab2.col FROM tab1 JOIN tab2 ... )
18
19 claiming that col is a duplicate column (it loses the table specifiers by
20 the time it gets to the *). Thus for any subquery count we select only the
21 primary keys of the main table in the inner query. This hopefully still
22 hits the indexes and keeps the server happy.
23
24 At this point the only overridden method is C<_subq_count_select()>
25
26 =cut
27
28 sub _subq_count_select {
29   my ($self, $source, $rs_attrs) = @_;
30
31   return $rs_attrs->{group_by} if $rs_attrs->{group_by};
32
33   my @pcols = map { join '.', $rs_attrs->{alias}, $_ } ($source->primary_columns);
34   return @pcols ? \@pcols : [ 1 ];
35 }
36
37 =head1 AUTHORS
38
39 See L<DBIx::Class/CONTRIBUTORS>
40
41 =head1 LICENSE
42
43 You may distribute this code under the same terms as Perl itself.
44
45 =cut
46
47 1;