The joinClass property should include all tables defined by the definition method. However it only includes the 'top' table. Ie. if you use joinClass => 'WebGUI::Asset::Post::Thread', it only joins Thread, and not Thread and Post as it should.
To fix apply the attached patch to WebGUI::AssetLineage which changes:
# deal with custom joined tables if we must my $tables = "asset left join assetData on asset.assetId=assetData.assetId "; if (exists $rules->{joinClass}) { my $className = $rules->{joinClass}; my $cmd = "use ".$className; eval ($cmd); $self->session->errorHandler->fatal("Couldn't compile asset package: ".$className.". Root cause: ".$@) if ($@); foreach my $definition (@{$className->definition($self->session)}) { unless ($definition->{tableName} eq "asset") { my $tableName = $definition->{tableName}; $tables .= " left join $tableName on assetData.assetId=".$tableName.".assetId and assetData.revisionDate=".$tableName.".revisionDate"; } last; } }
into:
# deal with custom joined tables if we must my $tables = "asset left join assetData on asset.assetId=assetData.assetId "; if (exists $rules->{joinClass}) { my $className = $rules->{joinClass}; my $cmd = "use ".$className; eval ($cmd); $self->session->errorHandler->fatal("Couldn't compile asset package: ".$className.". Root cause: ".$@) if ($@); foreach my $definition (@{$className->definition($self->session)}) { unless ($definition->{tableName} eq "assetData") { my $tableName = $definition->{tableName}; $tables .= " left join $tableName on assetData.assetId=".$tableName.".assetId and assetData.revisionDate=".$tableName.".revisionDate"; } else { last; } } }
Fixed in 7.5.