[Dbix-class] Fwd: MySQL query plan affecting DBIC structure (bug?)

Peter Rabbitson rabbit+dbic at rabbit.us
Thu Jan 21 08:34:47 GMT 2010


Paul Makepeace wrote:
> We've been debugging an awkward fail where the same query on the same
> DBIC version (8115) on the same mysql server is producing different
> results off two databases with very similar data (I'll expand on
> this).
> 
> The SQL that DBIC produces has mysql returning the same dataset but in
> a different order; verified on the command line. Now, if in our DBIC
> query we add in an order_by => [..., 'me.uid'] (PK) the output from
> mysql is identical, as is DBIC's returned result. I dug in and saw
> that the SQL query plan is quite different which would explain the
> ordering difference. It seems like DBIC is being sensitive to order
> where it shouldn't be.
> 
> Here's the query,
>      $c->model('DBIC_Readonly')->resultset('StoryCat')->search(
>      $search,
>      {
>        prefetch => [
>          'company',
>          'impact',
>          'favourability',
>          'topic',
>          {
>            'story' => [
>              { 'story_publication'  =>
>                [ 'region', 'publication_type' ]
>              },
>              { 'author_story' => 'author' }
>            ]
>          }
>        ],
>        order_by => 'story.date_time ASC',
>      });
> 
> The generated query is inserting its own "order by author_story.story_uid"
> 
> __PACKAGE__->table('author_story');
> __PACKAGE__->add_columns(qw/
> author_uid
> story_uid
> is_primary
> /);
> __PACKAGE__->set_primary_key(qw/author_uid story_uid/);
> __PACKAGE__->resultset_class('IDL::ResultSet::AuthorStory');
> __PACKAGE__->belongs_to(author => 'IDL::Schema::Author', 'author_uid');
> 
> Is DBIC attempting to do with "order by author_story.story_uid" what
> we're hacking with "me.uid"?
> 
> So what if anything can we do to help debug this? Is there an obvious
> mistake here? Do you need to see all the rels?

Not the rels, but the generated SQL itself. Also hilight *in the SQL*
what is bothering you. This is not a bug, but in order to explain to
you what happens and why I need the actual SQL.



More information about the DBIx-Class mailing list