diff options
Diffstat (limited to 'sql')
-rw-r--r-- | sql/opt_subselect.h | 2 | ||||
-rw-r--r-- | sql/sql_select.cc | 10 |
2 files changed, 9 insertions, 3 deletions
diff --git a/sql/opt_subselect.h b/sql/opt_subselect.h index 571fcbaa935..823b09a1f73 100644 --- a/sql/opt_subselect.h +++ b/sql/opt_subselect.h @@ -170,7 +170,7 @@ public: PREV_BITS(ulonglong, s->emb_sj_nest->sj_in_exprs) && // (2) (PREV_BITS(key_part_map, max_loose_keypart+1) & // (3) (found_part | loose_scan_keyparts)) == // (3) - (found_part | loose_scan_keyparts) && // (3) + PREV_BITS(key_part_map, max_loose_keypart+1) && // (3) !key_uses_partial_cols(s->table, key)) { /* Ok, can use the strategy */ diff --git a/sql/sql_select.cc b/sql/sql_select.cc index f6207e7c39a..6b2c89de00e 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -14782,9 +14782,15 @@ do_select(JOIN *join,List<Item> *fields,TABLE *table,Procedure *procedure) { /* HAVING will be checked after processing aggregate functions, - But WHERE should checkd here (we alredy have read tables) + But WHERE should checkd here (we alredy have read tables). + If there is join->exec_const_cond, and all tables are constant, then it + is equivalent to join->conds. exec_const_cond is already checked in the + beginning of JOIN::exec. If it is false, JOIN::exec returns zero + result already there, therefore execution reaches this point only if + exec_const_cond is TRUE. Since it is equvalent to join->conds, then + join->conds is also TRUE. */ - if (!join->conds || join->conds->val_int()) + if (!join->conds || join->exec_const_cond || join->conds->val_int()) { error= (*end_select)(join, 0, 0); if (error == NESTED_LOOP_OK || error == NESTED_LOOP_QUERY_LIMIT) |