Comment 3 for bug 1165958

Revision history for this message
Yan Zhang (yan.zhang) wrote :

yes. I have checked the difference of 5.5 and 5.6. code path is big different. And I can't figure out the meaning of code now, so I just say "not on 5.6". I know it's not good for reasoning problem, but it will take a little bit long time for me to figure it out the root cause.

in 5.5, code is like
```
for (tables= *start; tables; tables= tables->next_global)
  {
    TABLE *tbl= tables->table;
  }
if (... && (*start)->table && (*start)->table->file->ht->db_type == DB_TYPE_MYISAM))
```

but in 5.5, code is like
```
for (tables= *start; tables; tables= tables->next_global)
  {
    TABLE *tbl= tables->table;
    if (... && (*start)->table && (*start)->table->file->ht->db_type == DB_TYPE_MYISAM))
  }
```

the 'if' condition is out the loop in 5.5, and in the loop in 5.6.

To my intuition, 5.6 is relatively righter than 5.5. But I think 5.6 would be wrong too. To my intuition, 'if' condition in 5.6 should be (tbl && tbl->file->ht->db_type == DB_TYPE_MYISAM) instead.