mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-21234 Server crashes in in setup_on_expr upon 3rd execution of SP
Versioned conditions in on_expr can not be rebuilt at optimization stage on non-conventional arena.
This commit is contained in:
@ -586,6 +586,30 @@ call p;
|
||||
i
|
||||
drop procedure p;
|
||||
drop table t1;
|
||||
#
|
||||
# MDEV-21234 Server crashes in in setup_on_expr upon 3rd execution of SP
|
||||
#
|
||||
create table t1 (a varchar(8));
|
||||
insert into t1 values ('foo'),('bar');
|
||||
create table t2 (b date);
|
||||
create procedure pr() insert into t2 select * from t1;
|
||||
call pr;
|
||||
ERROR 22007: Incorrect date value: 'foo' for column `test`.`t2`.`b` at row 1
|
||||
prepare stmt from 'insert into t2 select * from t1';
|
||||
execute stmt;
|
||||
ERROR 22007: Incorrect date value: 'foo' for column `test`.`t2`.`b` at row 1
|
||||
alter table t1 add system versioning;
|
||||
call pr;
|
||||
ERROR 22007: Incorrect date value: 'foo' for column `test`.`t2`.`b` at row 1
|
||||
call pr;
|
||||
ERROR 22007: Incorrect date value: 'foo' for column `test`.`t2`.`b` at row 1
|
||||
execute stmt;
|
||||
ERROR 22007: Incorrect date value: 'foo' for column `test`.`t2`.`b` at row 1
|
||||
execute stmt;
|
||||
ERROR 22007: Incorrect date value: 'foo' for column `test`.`t2`.`b` at row 1
|
||||
drop prepare stmt;
|
||||
drop procedure pr;
|
||||
drop table t1, t2;
|
||||
call verify_trt_dummy(34);
|
||||
No A B C D
|
||||
1 1 1 1 1
|
||||
|
@ -392,6 +392,35 @@ call p;
|
||||
drop procedure p;
|
||||
drop table t1;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-21234 Server crashes in in setup_on_expr upon 3rd execution of SP
|
||||
--echo #
|
||||
create table t1 (a varchar(8));
|
||||
insert into t1 values ('foo'),('bar');
|
||||
create table t2 (b date);
|
||||
|
||||
create procedure pr() insert into t2 select * from t1;
|
||||
--error ER_TRUNCATED_WRONG_VALUE
|
||||
call pr;
|
||||
prepare stmt from 'insert into t2 select * from t1';
|
||||
--error ER_TRUNCATED_WRONG_VALUE
|
||||
execute stmt;
|
||||
alter table t1 add system versioning;
|
||||
--error ER_TRUNCATED_WRONG_VALUE
|
||||
call pr;
|
||||
--error ER_TRUNCATED_WRONG_VALUE
|
||||
call pr;
|
||||
--error ER_TRUNCATED_WRONG_VALUE
|
||||
execute stmt;
|
||||
--error ER_TRUNCATED_WRONG_VALUE
|
||||
execute stmt;
|
||||
drop prepare stmt;
|
||||
|
||||
# cleanup
|
||||
drop procedure pr;
|
||||
drop table t1, t2;
|
||||
|
||||
|
||||
call verify_trt_dummy(34);
|
||||
|
||||
-- source suite/versioning/common_finish.inc
|
||||
|
@ -1713,7 +1713,20 @@ JOIN::optimize_inner()
|
||||
}
|
||||
}
|
||||
|
||||
conds= optimize_cond(this, conds, join_list, FALSE,
|
||||
bool ignore_on_expr= false;
|
||||
/*
|
||||
PS/SP note: on_expr of versioned table can not be reallocated
|
||||
(see build_equal_items() below) because it can be not rebuilt
|
||||
at second invocation.
|
||||
*/
|
||||
if (!thd->stmt_arena->is_conventional() && thd->mem_root != thd->stmt_arena->mem_root)
|
||||
for (TABLE_LIST *tbl= tables_list; tbl; tbl= tbl->next_local)
|
||||
if (tbl->table && tbl->on_expr && tbl->table->versioned())
|
||||
{
|
||||
ignore_on_expr= true;
|
||||
break;
|
||||
}
|
||||
conds= optimize_cond(this, conds, join_list, ignore_on_expr,
|
||||
&cond_value, &cond_equal, OPT_LINK_EQUAL_FIELDS);
|
||||
|
||||
if (thd->is_error())
|
||||
|
Reference in New Issue
Block a user