X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage%2FDBIHacks.pm;h=a54477e071b5251b90056b5a59699e8d59292d1d;hb=974fe5e894412569f1252a95cf62612fef5f687d;hp=c2e13da365a8d9a92b7e2622de4818ab686e25d6;hpb=bac6c4fb44d23391b40e5fcf53809c0ca0c75dc7;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Storage/DBIHacks.pm b/lib/DBIx/Class/Storage/DBIHacks.pm index c2e13da..a54477e 100644 --- a/lib/DBIx/Class/Storage/DBIHacks.pm +++ b/lib/DBIx/Class/Storage/DBIHacks.pm @@ -1,4 +1,5 @@ -package DBIx::Class::Storage::DBIHacks; +package #hide from PAUSE + DBIx::Class::Storage::DBIHacks; # # This module contains code that should never have seen the light of day, @@ -287,16 +288,16 @@ sub _resolve_ident_sources { # returns { $column_name => \%column_info, ... } # also note: this adds -result_source => $rsrc to the column info # -# usage: -# my $col_sources = $self->_resolve_column_info($ident, @column_names); +# If no columns_names are supplied returns info about *all* columns +# for all sources sub _resolve_column_info { my ($self, $ident, $colnames) = @_; my ($alias2src, $root_alias) = $self->_resolve_ident_sources($ident); my $sep = $self->_sql_maker_opts->{name_sep} || '.'; - $sep = "\Q$sep\E"; + my $qsep = quotemeta $sep; - my (%return, %seen_cols); + my (%return, %seen_cols, @auto_colnames); # compile a global list of column names, to be able to properly # disambiguate unqualified column names (if at all possible) @@ -304,12 +305,18 @@ sub _resolve_column_info { my $rsrc = $alias2src->{$alias}; for my $colname ($rsrc->columns) { push @{$seen_cols{$colname}}, $alias; + push @auto_colnames, "$alias$sep$colname" unless $colnames; } } + $colnames ||= [ + @auto_colnames, + grep { @{$seen_cols{$_}} == 1 } (keys %seen_cols), + ]; + COLUMN: foreach my $col (@$colnames) { - my ($alias, $colname) = $col =~ m/^ (?: ([^$sep]+) $sep)? (.+) $/x; + my ($alias, $colname) = $col =~ m/^ (?: ([^$qsep]+) $qsep)? (.+) $/x; unless ($alias) { # see if the column was seen exactly once (so we know which rsrc it came from)