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

Paul Makepeace paulm at paulm.com
Thu Jan 21 20:24:54 GMT 2010


On Thu, Jan 21, 2010 at 00:34, Peter Rabbitson <rabbit+dbic at rabbit.us> wrote:
> 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.

Here is a paste,
http://scsys.co.uk:8001/38408?tx=on&wr=on&submit=Format+it%21

Thanks,
Paul



More information about the DBIx-Class mailing list