Skip to content

Commit

Permalink
Mdev-15085 Invisible Column Non-constant Default value results...
Browse files Browse the repository at this point in the history
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:- We simple set all_fields_have_value to null , and this will
make call to update_default_fields (in the case of dynamic default), And
default expr will be evaluted and value will be set in field.
  • Loading branch information
mariadb-SachinSetiya committed Feb 2, 2018
1 parent 782f8e7 commit 2d73b58
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 1 deletion.
11 changes: 11 additions & 0 deletions mysql-test/r/invisible_field.result
Original file line number Diff line number Diff line change
Expand Up @@ -524,3 +524,14 @@ a b c d
1 3 1 6
2 2 2 6
drop table t1;
create table t1(a int default 5 invisible, b int);
create table t2(a int default (b+11) invisible, b int);
insert into t1 values(1);
select a,b from t1;
a b
5 1
insert into t2 values(1);
select a,b from t2;
a b
12 1
drop table t1,t2;
10 changes: 9 additions & 1 deletion mysql-test/t/invisible_field.test
Original file line number Diff line number Diff line change
Expand Up @@ -213,4 +213,12 @@ execute insert_1;
set @a=2,@b=2, @c=2;
execute insert_2;
select a,b,c,d from t1 order by a;
drop table t1;
drop table t1;
#MDEV-15085 Non constant default getting Null values
create table t1(a int default 5 invisible, b int);
create table t2(a int default (b+11) invisible, b int);
insert into t1 values(1);
select a,b from t1;
insert into t2 values(1);
select a,b from t2;
drop table t1,t2;
1 change: 1 addition & 0 deletions sql/sql_base.cc
Original file line number Diff line number Diff line change
Expand Up @@ -8396,6 +8396,7 @@ fill_record(THD *thd, TABLE *table, Field **ptr, List<Item> &values,

if (field->invisible)
{
all_fields_have_values= false;
continue;
}
else
Expand Down

0 comments on commit 2d73b58

Please sign in to comment.