mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge with 4.0.13
This commit is contained in:
@ -466,8 +466,17 @@ JOIN::optimize()
|
||||
if (tables_list && tmp_table_param.sum_func_count && ! group_list)
|
||||
{
|
||||
int res;
|
||||
/*
|
||||
opt_sum_query() returns -1 if no rows match to the WHERE conditions,
|
||||
or 1 if all items were resolved, or 0, or an error number HA_ERR_...
|
||||
*/
|
||||
if ((res=opt_sum_query(tables_list, all_fields, conds)))
|
||||
{
|
||||
if (res > 1)
|
||||
{
|
||||
delete procedure;
|
||||
DBUG_RETURN(-1);
|
||||
}
|
||||
if (res < 0)
|
||||
{
|
||||
zero_result_cause= "No matching min/max row";
|
||||
@ -610,7 +619,17 @@ JOIN::optimize()
|
||||
select_distinct= 0;
|
||||
no_order= !order;
|
||||
if (all_order_fields_used)
|
||||
{
|
||||
if (order && skip_sort_order)
|
||||
{
|
||||
/*
|
||||
Force MySQL to read the table in sorted order to get result in
|
||||
ORDER BY order.
|
||||
*/
|
||||
join.tmp_table_param.quick_group=0;
|
||||
}
|
||||
order=0;
|
||||
}
|
||||
group=1; // For end_write_group
|
||||
}
|
||||
else
|
||||
@ -2379,7 +2398,10 @@ find_best(JOIN *join,table_map rest_tables,uint idx,double record_count,
|
||||
if (table->quick_keys & ((key_map) 1 << key))
|
||||
records= (double) table->quick_rows[key];
|
||||
else
|
||||
records= (double) s->records/rec; // quick_range couldn't use key!
|
||||
{
|
||||
/* quick_range couldn't use key! */
|
||||
records= (double) s->records/rec;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -3037,6 +3059,9 @@ make_join_select(JOIN *join,SQL_SELECT *select,COND *cond)
|
||||
join->unit->select_limit_cnt)) < 0)
|
||||
DBUG_RETURN(1); // Impossible range
|
||||
sel->cond=orig_cond;
|
||||
/* Fix for EXPLAIN */
|
||||
if (sel->quick)
|
||||
join->best_positions[i].records_read= sel->quick->records;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -7249,7 +7274,8 @@ setup_group(THD *thd, Item **ref_pointer_array, TABLE_LIST *tables,
|
||||
|
||||
while ((item=li++))
|
||||
{
|
||||
if (item->type() != Item::SUM_FUNC_ITEM && !item->marker)
|
||||
if (item->type() != Item::SUM_FUNC_ITEM && !item->marker &&
|
||||
!item->const_item())
|
||||
{
|
||||
my_printf_error(ER_WRONG_FIELD_WITH_GROUP,
|
||||
ER(ER_WRONG_FIELD_WITH_GROUP),
|
||||
|
Reference in New Issue
Block a user