[Dbix-class] order_by interfering with has_many fetch

Darin McBride darin.mcbride at shaw.ca
Mon Nov 16 05:20:33 GMT 2015


On Sunday November 15 2015 7:09:05 PM Darin McBride wrote:
> > Are you saying that you did:
> > 
> >
> > __PACKAGE__->add-unique_constraint( ... => [ 'name' ]);
> >
> > 
> >     AND
> > 
> >
> > The 'name' column is *NOT* marked as is_nullable => 1 in the DBIC metadata
> >
> > 
> >     AND
> > 
> >   you *still* got the warning?
> > 
> >
> > If this is the case - this is in fact a rather serious bug and I need to
> > investigate this further...
> 
> Please don't.  I must have done something wrong the first time.  When I try 
> again, because I have to reverify everything when I'm not 100% sure, I can
> add that unique constraint and remove the me.id on the order, and suddenly
> it works without a warning.  Sorry for the distress.

And I keep testing and I got this - helps if I turn off DBIC_TRACE, makes the 
other warnings show up better (i.e., not hide behind excess noise).

So, the column is:

__PACKAGE__->add_columns(
    name                    => { data_type => 'varchar', size => 30, 
is_nullable => 0 },

So, explicitly not nullable.

I've added this code as the next executable line after all the columns:

__PACKAGE__->add_unique_constraint(name => ['name']);

And now my search (which has grown since last time - I'm now prefetching 
sitterauths, too, since I'm going to need a field from there for each empire 
returned) looks like this:

        $planet_rs =
            Lacuna->db->resultset('Map::Body')->
            search(
                   {
                       'sitterauths.sitter_id' => $real_empire->id,
                       'me.class' => { '!=' => 
'Lacuna::DB::Result::Map::Body::Planet::Station' },
                   },
                   {
                       join => { empire => 'sitterauths' },
                       prefetch => { 'empire', 'sitterauths' },
                       order_by => ['me.name'],
                   });

And I still get the unable to properly collapse error.  Adding the 'me.id' 
back in as a secondary order_by key resolves that again.  (Perl 5.12.1, DBIC 
0.082810.)

I'm completely expecting that I'm doing something wrong here, though I do 
wonder what.

Thanks,



More information about the DBIx-Class mailing list