1
0
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:
monty@narttu.mysql.fi
2003-05-19 16:35:49 +03:00
317 changed files with 6662 additions and 3466 deletions

View File

@ -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),