[Dbix-class] Help needed to get a much needed feature into DBIC (low barrier to entry)

Peter Rabbitson rabbit+dbic at rabbit.us
Fri Jan 10 06:51:23 GMT 2014


On Fri, Jan 10, 2014 at 05:35:25PM +1100, neil.lunn wrote:
> On 10/01/2014 5:11 PM, Peter Rabbitson wrote:
> >On Fri, Jan 10, 2014 at 04:47:56PM +1100, neil.lunn wrote:
> >>On 10/01/2014 3:55 PM, Peter Rabbitson wrote:
> >>Current test cases are showing an expected result of : [{ artist
> >>=> { '-foo' => 1 }}] and getting a result of: [{ artist => [ {
> >>'-foo' => [ 1 ] } ]}]
> >I must be blind - I do not see a test like this. Please tell me which line.
> Actually the first test. '-foo' => [ 1 ] appears to be the erroneous
> munging of the supplied element into a list.

I feel dumber and dumber... I can't find the test you are talking about:
git show 84163bb8945:t/91merge_joinpref_attr.t | grep -P '\[\s*1\s*\]'

> 
> One more thing just from the last two tests:
> 
> {
>   my $a = [ { 'artist' => 'manager' }, 'cd' ];
>   my $b = [ 'artist', { 'artist' => 'manager' } ];
>   my $expected = [ { 'artist' => 'manager' }, 'cd', { 'artist' =>
> 'manager' } ];
>   my $result = $rs->_merge_joinpref_attr($a, $b);
>   is_deeply( $result, $expected );
> }

This test is 100% correct

> 
> {
>   my $a = [{ artist => [{ -join_type => 123 }, 'manager' ] }, 'cd' ];
>   my $b = [{ artist => { -join_type => 123 } }, { artist => [{
> -join_type => 123 }, 'manager'] } ];
>   my $expected = [ { artist => [{ -join_type => 123 }, 'manager'] },
> 'cd', { artist => [{ -join_type => 123 }, 'manager'] } ];
>   my $result = $rs->_merge_joinpref_attr($a, $b);
>   is_deeply( $result, $expected );
> }
> 

This one is a bit tricky but appears to be correct:
$a = [
  { artist_with_same_options => "manager" },  #a1
  "cd",
];

$b = [
  "artist_with_same_options",                 #b1
  { artist_with_same_options => "manager" }   #b2
];

It is reasonable to expect [
  { artist_with_same_options => "manager" }, # merge #a1+b1 (because option bags match, otherwise we'd throw)
  "cd",
  { artist_with_same_options => "manager" }, # b2
]


> Assuming the expected is merging *left to right* where the first
> element is considered matching the existing key and the following
> list element is pushed onto the list. Just trying to word out the
> algorithm in order to visualize it.

It is left-to-right when everything else is equal yes.



More information about the DBIx-Class mailing list