maria-developers team mailing list archive
-
maria-developers team
-
Mailing list archive
-
Message #11090
Re: [Commits] Mdev-15085 Rebased to latest 10.3
Hi serg!
On Tue, Jan 30, 2018 at 12:06 AM, Sergei Golubchik <serg@xxxxxxxxxxx> wrote:
> 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 :)
>
> Thanks for nice trick.
Patch updated.
> > }
> > else
> > value=v++;
>
> Regards,
> Sergei
> Chief Architect MariaDB
> and security@xxxxxxxxxxx
>
--
Regards
Sachin Setiya
Software Engineer at MariaDB
References