← Back to team overview

maria-developers team mailing list archive

Re: [Commits] 72bb358: MDEV-7930 Assertion `table_share->tmp_table != NO_TMP_TABLE || m_lock_type != 2' failed in handler::ha_index_read_map

 

Hi Sanja,

Please find some cosmetic feedback below. 
Ok to push after it has been addressed.

On Mon, Oct 26, 2015 at 05:00:34PM +0100, sanja@xxxxxxxxxxx wrote:
> revision-id: 72bb358c2ba98e6e0d4a15b92af514a45751fe8d (mariadb-10.0.21-44-g72bb358)
> parent(s): 18f7dfed179204dcfc02a27790e22bb9cc4e2e32
> committer: Oleksandr Byelkin
> timestamp: 2015-10-26 16:59:40 +0100
> message:
> 
> MDEV-7930 Assertion `table_share->tmp_table != NO_TMP_TABLE || m_lock_type != 2' failed in  handler::ha_index_read_map
> 
> In optimizing aggregate function do not try to touch tables from outer
> query.
> 
...
> diff --git a/sql/opt_sum.cc b/sql/opt_sum.cc
> index fc3ce09..ad29229 100644
> --- a/sql/opt_sum.cc
> +++ b/sql/opt_sum.cc
> @@ -341,7 +341,8 @@ int opt_sum_query(THD *thd,
>            there are no outer joins.
>          */
>          if (!conds && !((Item_sum_count*) item)->get_arg(0)->maybe_null &&
> -            !outer_tables && maybe_exact_count)
> +            !outer_tables && maybe_exact_count &&
> +            ((item->used_tables() & OUTER_REF_TABLE_BIT) == 0))
>          {
>            if (!is_exact_count)
>            {
> @@ -369,7 +370,8 @@ int opt_sum_query(THD *thd,
>            indexes to find the key.
>          */
>          Item *expr=item_sum->get_arg(0);
> -        if (expr->real_item()->type() == Item::FIELD_ITEM)
> +        if (((expr->used_tables() & OUTER_REF_TABLE_BIT) == 0) &&
> +            expr->real_item()->type() == Item::FIELD_ITEM)
>          {
>            uchar key_buff[MAX_KEY_LENGTH];
>            TABLE_REF ref;
> @@ -394,16 +396,20 @@ int opt_sum_query(THD *thd,
>              const_result= 0;
>              break;
>            }
> +          /*
> +            Constant table is already read and the only row is the max
> +            and the min
> +          */
I think this comment is not relevant anymore? It's part of the first variant of
the fix, which is no longer in the patch.
Please remove it.

>            if (!(error= table->file->ha_index_init((uint) ref.key, 1)))
> -            error= (is_max ? 
> +            error= (is_max ?
>                      get_index_max_value(table, &ref, range_fl) :
>                      get_index_min_value(table, &ref, item_field, range_fl,
>                                          prefix_len));
>  
>            /* Verify that the read tuple indeed matches the search key */
> -	  if (!error && reckey_in_range(is_max, &ref, item_field->field, 
> -			                conds, range_fl, prefix_len))
> -	    error= HA_ERR_KEY_NOT_FOUND;
> +          if (!error && reckey_in_range(is_max, &ref, item_field->field,
> +                                        conds, range_fl, prefix_len))
> +            error= HA_ERR_KEY_NOT_FOUND;
These are just endspace changes. Can you remove them?

>            table->disable_keyread();
>            table->file->ha_index_end();
>            if (error)
> _______________________________________________
> commits mailing list
> commits@xxxxxxxxxxx
> https://lists.askmonty.org/cgi-bin/mailman/listinfo/commits

-- 
BR
 Sergei
-- 
Sergei Petrunia, Software Developer
MariaDB Corporation | Skype: sergefp | Blog: http://s.petrunia.net/blog