MDEV-10419: crash in mariadb 10.1.16-MariaDB-1~trusty
Fixed initialization and usage of THD reference in subselect engines.
This commit is contained in:
parent
c6aaa2adbe
commit
5fdb3cfcd4
@ -5520,6 +5520,21 @@ test.v1 check Error 'test.v1' is not BASE TABLE
|
|||||||
test.v1 check status Operation failed
|
test.v1 check status Operation failed
|
||||||
drop view v1;
|
drop view v1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
#
|
||||||
|
# MDEV-10419: crash in mariadb 10.1.16-MariaDB-1~trusty
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (c1 CHAR(13));
|
||||||
|
CREATE TABLE t2 (c2 CHAR(13));
|
||||||
|
CREATE FUNCTION f() RETURNS INT RETURN 0;
|
||||||
|
CREATE OR REPLACE VIEW v1 AS select f() from t1 where c1 in (select c2 from t2);
|
||||||
|
DROP FUNCTION f;
|
||||||
|
SHOW CREATE VIEW v1;
|
||||||
|
View Create View character_set_client collation_connection
|
||||||
|
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `f`() AS `f()` from `t1` where `test`.`t1`.`c1` in (select `test`.`t2`.`c2` from `t2`) latin1 latin1_swedish_ci
|
||||||
|
Warnings:
|
||||||
|
Warning 1356 View 'test.v1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
|
||||||
|
drop view v1;
|
||||||
|
drop table t1,t2;
|
||||||
# -----------------------------------------------------------------
|
# -----------------------------------------------------------------
|
||||||
# -- End of 5.5 tests.
|
# -- End of 5.5 tests.
|
||||||
# -----------------------------------------------------------------
|
# -----------------------------------------------------------------
|
||||||
|
@ -5490,6 +5490,21 @@ alter table v1 check partition p1;
|
|||||||
drop view v1;
|
drop view v1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-10419: crash in mariadb 10.1.16-MariaDB-1~trusty
|
||||||
|
--echo #
|
||||||
|
CREATE TABLE t1 (c1 CHAR(13));
|
||||||
|
CREATE TABLE t2 (c2 CHAR(13));
|
||||||
|
|
||||||
|
CREATE FUNCTION f() RETURNS INT RETURN 0;
|
||||||
|
CREATE OR REPLACE VIEW v1 AS select f() from t1 where c1 in (select c2 from t2);
|
||||||
|
DROP FUNCTION f;
|
||||||
|
|
||||||
|
SHOW CREATE VIEW v1;
|
||||||
|
|
||||||
|
drop view v1;
|
||||||
|
drop table t1,t2;
|
||||||
--echo # -----------------------------------------------------------------
|
--echo # -----------------------------------------------------------------
|
||||||
--echo # -- End of 5.5 tests.
|
--echo # -- End of 5.5 tests.
|
||||||
--echo # -----------------------------------------------------------------
|
--echo # -----------------------------------------------------------------
|
||||||
|
@ -3308,7 +3308,7 @@ int subselect_uniquesubquery_engine::scan_table()
|
|||||||
}
|
}
|
||||||
|
|
||||||
table->file->extra_opt(HA_EXTRA_CACHE,
|
table->file->extra_opt(HA_EXTRA_CACHE,
|
||||||
current_thd->variables.read_buff_size);
|
get_thd()->variables.read_buff_size);
|
||||||
table->null_row= 0;
|
table->null_row= 0;
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
@ -3746,7 +3746,7 @@ table_map subselect_union_engine::upper_select_const_tables()
|
|||||||
void subselect_single_select_engine::print(String *str,
|
void subselect_single_select_engine::print(String *str,
|
||||||
enum_query_type query_type)
|
enum_query_type query_type)
|
||||||
{
|
{
|
||||||
select_lex->print(thd, str, query_type);
|
select_lex->print(get_thd(), str, query_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -4276,6 +4276,7 @@ bitmap_init_memroot(MY_BITMAP *map, uint n_bits, MEM_ROOT *mem_root)
|
|||||||
|
|
||||||
bool subselect_hash_sj_engine::init(List<Item> *tmp_columns, uint subquery_id)
|
bool subselect_hash_sj_engine::init(List<Item> *tmp_columns, uint subquery_id)
|
||||||
{
|
{
|
||||||
|
THD *thd= get_thd();
|
||||||
select_union *result_sink;
|
select_union *result_sink;
|
||||||
/* Options to create_tmp_table. */
|
/* Options to create_tmp_table. */
|
||||||
ulonglong tmp_create_options= thd->variables.option_bits | TMP_TABLE_ALL_COLUMNS;
|
ulonglong tmp_create_options= thd->variables.option_bits | TMP_TABLE_ALL_COLUMNS;
|
||||||
@ -5500,6 +5501,7 @@ bool
|
|||||||
subselect_rowid_merge_engine::init(MY_BITMAP *non_null_key_parts,
|
subselect_rowid_merge_engine::init(MY_BITMAP *non_null_key_parts,
|
||||||
MY_BITMAP *partial_match_key_parts)
|
MY_BITMAP *partial_match_key_parts)
|
||||||
{
|
{
|
||||||
|
THD *thd= get_thd();
|
||||||
/* The length in bytes of the rowids (positions) of tmp_table. */
|
/* The length in bytes of the rowids (positions) of tmp_table. */
|
||||||
uint rowid_length= tmp_table->file->ref_length;
|
uint rowid_length= tmp_table->file->ref_length;
|
||||||
ha_rows row_count= tmp_table->file->stats.records;
|
ha_rows row_count= tmp_table->file->stats.records;
|
||||||
@ -6038,7 +6040,7 @@ bool subselect_table_scan_engine::partial_match()
|
|||||||
}
|
}
|
||||||
|
|
||||||
tmp_table->file->extra_opt(HA_EXTRA_CACHE,
|
tmp_table->file->extra_opt(HA_EXTRA_CACHE,
|
||||||
current_thd->variables.read_buff_size);
|
get_thd()->variables.read_buff_size);
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
error= tmp_table->file->ha_rnd_next(tmp_table->record[0]);
|
error= tmp_table->file->ha_rnd_next(tmp_table->record[0]);
|
||||||
|
@ -716,7 +716,8 @@ public:
|
|||||||
ROWID_MERGE_ENGINE, TABLE_SCAN_ENGINE};
|
ROWID_MERGE_ENGINE, TABLE_SCAN_ENGINE};
|
||||||
|
|
||||||
subselect_engine(Item_subselect *si,
|
subselect_engine(Item_subselect *si,
|
||||||
select_result_interceptor *res)
|
select_result_interceptor *res):
|
||||||
|
thd(NULL)
|
||||||
{
|
{
|
||||||
result= res;
|
result= res;
|
||||||
item= si;
|
item= si;
|
||||||
@ -732,7 +733,7 @@ public:
|
|||||||
Should be called before prepare().
|
Should be called before prepare().
|
||||||
*/
|
*/
|
||||||
void set_thd(THD *thd_arg);
|
void set_thd(THD *thd_arg);
|
||||||
THD * get_thd() { return thd; }
|
THD * get_thd() { return thd ? thd : current_thd; }
|
||||||
virtual int prepare(THD *)= 0;
|
virtual int prepare(THD *)= 0;
|
||||||
virtual void fix_length_and_dec(Item_cache** row)= 0;
|
virtual void fix_length_and_dec(Item_cache** row)= 0;
|
||||||
/*
|
/*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user