maria-developers team mailing list archive
-
maria-developers team
-
Mailing list archive
-
Message #11087
Re: [Commits] Mdev-15085 Rebased to latest 10.3
Hi, Sachin!
On Jan 29, Sachin Setiya wrote:
> commit 905806689979ae91c89115f18b107ebacbc489e2
> Author: Sachin Setiya <sachin.setiya@xxxxxxxxxx>
> Date: Fri Jan 26 22:58:34 2018 +0530
>
> Mdev-15085 Invisible Column Non-constant Default value results...
>
> Problem:- If we create table field with dynamic default value then that
> field always gets NULL value.
>
> Analyze:- This is because in fill_record we simple continue at Invisible
> column because we though that share->default_values(default value is
> always copied into table->record[0] before insert) will have a default
> value for them(which is true for constant defaults , but not for dynamic
> defaults).
>
> Solution:- In case of invisible field we will assign default value to 'value'
> variable, but we do this only for columns which have non dynamic default value.
> We do not have to worry for Auto_increment field , storage engine will take
> of it.
>
> diff --git a/sql/sql_base.cc b/sql/sql_base.cc
> index 45efa63..17ff7eb 100644
> --- a/sql/sql_base.cc
> +++ b/sql/sql_base.cc
> @@ -8382,7 +8382,12 @@ fill_record(THD *thd, TABLE *table, Field **ptr,
> List<Item> &values,
>
> if (field->invisible)
> {
> - continue;
> + if(field->flags & AUTO_INCREMENT_FLAG ||
> + !field->default_value)
> + continue;
> + else
> + value= new (thd->mem_root) Item_default_value(thd,
> + &thd->lex->select_lex.context);
No-no, you cannot create items in fill_record(). It would create a new
item for every inserted row.
I think the only thing you need to do here (and it doesn't depend on
AUTO_INCREMENT_FLAG or field->default_value), you need to set
all_fields_have_values to false. Like
if (field->invisible)
{
all_fields_have_values= false;
continue;
}
Indeed, hidden columns did not get a value, so all_fields_have_values
should be false. I'd expect the rest will work automatically :)
> }
> else
> value=v++;
Regards,
Sergei
Chief Architect MariaDB
and security@xxxxxxxxxxx
Follow ups