module Queries.pm Multiple artists disappear from track data sub _addJiveSong { my $request = shift; # request my $loop = shift; # loop my $count = shift; # loop index my $index = shift; # playlist index my $track = shift || return; $log->debug('calling _songData with track:'); $log->debug(Data::Dump::dump($track)); my $songData = _songData( $request, $track, 'AalKNcx', # tags needed for our entities ); $log->debug('songdata dump:'); $log->debug(Data::Dump::dump($songData)); _songData calls sub _songDataFromHash { my ( $request, $res, $tags ) = @_; $log->debug('entering _songdataFromHash. Dump of $res parameter'); $log->debug(Data::Dump::dump($res)); # define an ordered hash for our results tie (my %returnHash, "Tie::IxHash"); $returnHash{id} = $res->{'tracks.id'}; $returnHash{title} = $res->{'tracks.title'}; # loop so that stuff is returned in the order given... for my $tag (split (//, $tags)) { my $tagref = $tagMap{$tag} or next; # Special case for A/S which return multiple keys if ( $tag eq 'A' ) { $log->debug("tag = $tag"); for my $role ( Slim::Schema::Contributor->contributorRoles ) { $role = lc $role; # $log->debug("role = $role"); if ( defined $res->{$role} ) { # $log->debug("role is in input: $res->{$role}"); $returnHash{$role} = $res->{$role}; } } $log->debug("now hash is:"); $log->debug(Data::Dump::dump(%returnHash)); } elsif ( $tag eq 'S' ) { $log->debug("tag = $tag"); for my $role ( Slim::Schema::Contributor->contributorRoles ) { $role = lc $role; if ( defined $res->{"${role}_ids"} ) { $returnHash{"${role}_ids"} = $res->{"${role}_ids"}; } } $log->debug("now hash is:"); $log->debug(Data::Dump::dump(%returnHash)); } else { $log->debug("tag is $tag"); my $map = $colMap{$tag}; my $value = ref $map eq 'CODE' ? $map->($res) : $res->{$map}; if (defined $value && $value ne '') { $returnHash{ $tagref->[0] } = $value; } $log->debug("now hash is:"); $log->debug(Data::Dump::dump(%returnHash)); } } $log->debug("now hash is:"); $log->debug(Data::Dump::dump(%returnHash)); return \%returnHash; because the tags are processed consecutively, tag a after tag A leads to overwriting of hash element 'artist'. If in tags a is followed by A, then the multiple artists are preserved. log file with tags 'AalKNcx' log file with tags 'aAlKNcx'