X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage%2FDBI%2FAmbiguousGlob.pm;h=2008c54bb9cc16b3b0bd5e28ea18cfe9479aecff;hb=b718fd0a54e55098bf7103e9af83de9db4b192ab;hp=c848fc10faa76a1da2451e995a7744aa347ce6e1;hpb=48fe908793f2a2141bb687946c18f9a54ae2c47f;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Storage/DBI/AmbiguousGlob.pm b/lib/DBIx/Class/Storage/DBI/AmbiguousGlob.pm index c848fc1..2008c54 100644 --- a/lib/DBIx/Class/Storage/DBI/AmbiguousGlob.pm +++ b/lib/DBIx/Class/Storage/DBI/AmbiguousGlob.pm @@ -1,43 +1,47 @@ -package DBIx::Class::Storage::DBI::AmbiguousGlob; - -use strict; -use warnings; - -use base 'DBIx::Class::Storage::DBI'; - -=head1 NAME - -DBIx::Class::Storage::DBI::AmbiguousGlob - Storage component for RDBMS supporting multicolumn in clauses - -=head1 DESCRIPTION - -Some servers choke on things like: - - COUNT(*) FROM (SELECT tab1.col, tab2.col FROM tab1 JOIN tab2 ... ) - -claiming that col is a duplicate column (it loses the table specifiers by -the time it gets to the *). Thus for any subquery count we select only the -primary keys of the main table in the inner query. This hopefully still -hits the indexes and keeps the server happy. - -At this point the only overriden method is C<_grouped_count_select()> - -=cut - -sub _grouped_count_select { - my ($self, $source, $rs_args) = @_; - my @pcols = map { join '.', $rs_args->{alias}, $_ } ($source->primary_columns); - return @pcols ? \@pcols : $rs_args->{group_by}; -} - -=head1 AUTHORS - -See L - -=head1 LICENSE - -You may distribute this code under the same terms as Perl itself. - -=cut - -1; +package DBIx::Class::Storage::DBI::AmbiguousGlob; + +use strict; +use warnings; + +use base 'DBIx::Class::Storage::DBI'; +use mro 'c3'; + +=head1 NAME + +DBIx::Class::Storage::DBI::AmbiguousGlob - Storage component for RDBMS choking on count(*) + +=head1 DESCRIPTION + +Some servers choke on things like: + + COUNT(*) FROM (SELECT tab1.col, tab2.col FROM tab1 JOIN tab2 ... ) + +claiming that col is a duplicate column (it loses the table specifiers by +the time it gets to the *). Thus for any subquery count we select only the +primary keys of the main table in the inner query. This hopefully still +hits the indexes and keeps the server happy. + +At this point the only overriden method is C<_subq_count_select()> + +=cut + +sub _subq_count_select { + my ($self, $source, $rs_attrs) = @_; + + return $rs_attrs->{group_by} if $rs_attrs->{group_by}; + + my @pcols = map { join '.', $rs_attrs->{alias}, $_ } ($source->primary_columns); + return @pcols ? \@pcols : [ 1 ]; +} + +=head1 AUTHORS + +See L + +=head1 LICENSE + +You may distribute this code under the same terms as Perl itself. + +=cut + +1;