Skip to content

Commit 5ba7722

Browse files
committed
MDEV-21028 Server crashes in Query_arena::set_query_arena upon SELECT from view
if the view has algorithm=temptable it is not updatable, so DEFAULT() for its fields is meaningless, and thus it's NULL or 0/'' for NOT NULL columns.
1 parent 9c5fd0f commit 5ba7722

File tree

3 files changed

+71
-1
lines changed

3 files changed

+71
-1
lines changed

mysql-test/r/func_default.result

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,5 +159,48 @@ a
159159
10
160160
DROP TABLE t1;
161161
#
162+
# MDEV-21028 Server crashes in Query_arena::set_query_arena upon SELECT from view
163+
#
164+
create table t1 (a datetime default current_timestamp);
165+
insert into t1 () values (),();
166+
create algorithm=temptable view v1 as select * from t1;
167+
create algorithm=merge view v2 as select * from t1;
168+
select default(a) = now() from v1;
169+
default(a) = now()
170+
NULL
171+
NULL
172+
select default(a) = now() from v2;
173+
default(a) = now()
174+
1
175+
1
176+
select table_name,is_updatable from information_schema.views;
177+
table_name is_updatable
178+
v1 NO
179+
v2 YES
180+
drop view v1, v2;
181+
drop table t1;
182+
create table t1 (v1 timestamp) select 'x';
183+
show create table t1;
184+
Table Create Table
185+
t1 CREATE TABLE `t1` (
186+
`v1` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
187+
`x` varchar(1) NOT NULL
188+
) ENGINE=MyISAM DEFAULT CHARSET=latin1
189+
select default(v1) from (select v1 from t1) dt;
190+
default(v1)
191+
2001-01-01 10:20:30
192+
select default(v1) from (select v1 from t1 group by v1) dt;
193+
default(v1)
194+
0000-00-00 00:00:00
195+
drop table t1;
196+
create table t1 (a text default '');
197+
create algorithm=temptable view v1 as select * from t1;
198+
insert into t1 values ('a');
199+
select default(a) from v1;
200+
default(a)
201+
NULL
202+
drop view v1;
203+
drop table t1;
204+
#
162205
# End of 10.2 tests
163206
#

mysql-test/t/func_default.test

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,32 @@ FROM t1;
139139
SELECT a FROM t1 WHERE CASE WHEN a THEN DEFAULT(a) END IS FALSE;
140140
DROP TABLE t1;
141141

142+
--echo #
143+
--echo # MDEV-21028 Server crashes in Query_arena::set_query_arena upon SELECT from view
144+
--echo #
145+
create table t1 (a datetime default current_timestamp);
146+
insert into t1 () values (),();
147+
create algorithm=temptable view v1 as select * from t1;
148+
create algorithm=merge view v2 as select * from t1;
149+
select default(a) = now() from v1;
150+
select default(a) = now() from v2;
151+
select table_name,is_updatable from information_schema.views;
152+
drop view v1, v2;
153+
drop table t1;
154+
155+
create table t1 (v1 timestamp) select 'x';
156+
show create table t1;
157+
select default(v1) from (select v1 from t1) dt;
158+
select default(v1) from (select v1 from t1 group by v1) dt;
159+
drop table t1;
160+
161+
create table t1 (a text default '');
162+
create algorithm=temptable view v1 as select * from t1;
163+
insert into t1 values ('a');
164+
select default(a) from v1;
165+
drop view v1;
166+
drop table t1;
167+
142168
--echo #
143169
--echo # End of 10.2 tests
144170
--echo #

sql/sql_select.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16333,7 +16333,8 @@ Field *create_tmp_field_from_field(THD *thd, Field *org_field,
1633316333
table->s->db_create_options|= HA_OPTION_PACK_RECORD;
1633416334
else if (org_field->type() == FIELD_TYPE_DOUBLE)
1633516335
((Field_double *) new_field)->not_fixed= TRUE;
16336-
new_field->vcol_info= 0;
16336+
new_field->vcol_info= new_field->default_value=
16337+
new_field->check_constraint= 0;
1633716338
new_field->cond_selectivity= 1.0;
1633816339
new_field->next_equal_field= NULL;
1633916340
new_field->option_list= NULL;

0 commit comments

Comments
 (0)