MDEV-10386 Assertion `fixed == 1' failed in virtual String* Item_func_conv_charset::val_str(String*)
The patch b96c196f1cd5d77e524cbf952539bdd33c65ffc1 added a new call for safe_charset_converter() without a corresponding fix_fields(). In case of a sub-query the created Item remained in non-fixed state. The problem did not show up with literal derived expressions, only subselects were affected. This patch adds a corresponding fix_fields() to the previously added safe_charset_converter().
This commit is contained in:
parent
ef82fd8ca3
commit
5e051bfa15
@ -7105,3 +7105,14 @@ group by round((select 1 from t1 limit 1));
|
|||||||
round((select 1 from t1 limit 1))
|
round((select 1 from t1 limit 1))
|
||||||
1
|
1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
#
|
||||||
|
# MDEV-10386 Assertion `fixed == 1' failed in virtual String* Item_func_conv_charset::val_str(String*)
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (f1 CHAR(3) CHARACTER SET utf8 NULL, f2 CHAR(3) CHARACTER SET latin1 NULL);
|
||||||
|
INSERT INTO t1 VALUES ('foo','bar');
|
||||||
|
SELECT * FROM t1 WHERE f2 >= SOME ( SELECT f1 FROM t1 );
|
||||||
|
f1 f2
|
||||||
|
SELECT * FROM t1 WHERE f2 <= SOME ( SELECT f1 FROM t1 );
|
||||||
|
f1 f2
|
||||||
|
foo bar
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -7102,6 +7102,17 @@ group by round((select 1 from t1 limit 1));
|
|||||||
round((select 1 from t1 limit 1))
|
round((select 1 from t1 limit 1))
|
||||||
1
|
1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
#
|
||||||
|
# MDEV-10386 Assertion `fixed == 1' failed in virtual String* Item_func_conv_charset::val_str(String*)
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (f1 CHAR(3) CHARACTER SET utf8 NULL, f2 CHAR(3) CHARACTER SET latin1 NULL);
|
||||||
|
INSERT INTO t1 VALUES ('foo','bar');
|
||||||
|
SELECT * FROM t1 WHERE f2 >= SOME ( SELECT f1 FROM t1 );
|
||||||
|
f1 f2
|
||||||
|
SELECT * FROM t1 WHERE f2 <= SOME ( SELECT f1 FROM t1 );
|
||||||
|
f1 f2
|
||||||
|
foo bar
|
||||||
|
DROP TABLE t1;
|
||||||
set optimizer_switch=default;
|
set optimizer_switch=default;
|
||||||
select @@optimizer_switch like '%materialization=on%';
|
select @@optimizer_switch like '%materialization=on%';
|
||||||
@@optimizer_switch like '%materialization=on%'
|
@@optimizer_switch like '%materialization=on%'
|
||||||
|
@ -7100,4 +7100,15 @@ group by round((select 1 from t1 limit 1));
|
|||||||
round((select 1 from t1 limit 1))
|
round((select 1 from t1 limit 1))
|
||||||
1
|
1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
#
|
||||||
|
# MDEV-10386 Assertion `fixed == 1' failed in virtual String* Item_func_conv_charset::val_str(String*)
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (f1 CHAR(3) CHARACTER SET utf8 NULL, f2 CHAR(3) CHARACTER SET latin1 NULL);
|
||||||
|
INSERT INTO t1 VALUES ('foo','bar');
|
||||||
|
SELECT * FROM t1 WHERE f2 >= SOME ( SELECT f1 FROM t1 );
|
||||||
|
f1 f2
|
||||||
|
SELECT * FROM t1 WHERE f2 <= SOME ( SELECT f1 FROM t1 );
|
||||||
|
f1 f2
|
||||||
|
foo bar
|
||||||
|
DROP TABLE t1;
|
||||||
set @optimizer_switch_for_subselect_test=null;
|
set @optimizer_switch_for_subselect_test=null;
|
||||||
|
@ -7111,6 +7111,17 @@ group by round((select 1 from t1 limit 1));
|
|||||||
round((select 1 from t1 limit 1))
|
round((select 1 from t1 limit 1))
|
||||||
1
|
1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
#
|
||||||
|
# MDEV-10386 Assertion `fixed == 1' failed in virtual String* Item_func_conv_charset::val_str(String*)
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (f1 CHAR(3) CHARACTER SET utf8 NULL, f2 CHAR(3) CHARACTER SET latin1 NULL);
|
||||||
|
INSERT INTO t1 VALUES ('foo','bar');
|
||||||
|
SELECT * FROM t1 WHERE f2 >= SOME ( SELECT f1 FROM t1 );
|
||||||
|
f1 f2
|
||||||
|
SELECT * FROM t1 WHERE f2 <= SOME ( SELECT f1 FROM t1 );
|
||||||
|
f1 f2
|
||||||
|
foo bar
|
||||||
|
DROP TABLE t1;
|
||||||
set optimizer_switch=default;
|
set optimizer_switch=default;
|
||||||
select @@optimizer_switch like '%subquery_cache=on%';
|
select @@optimizer_switch like '%subquery_cache=on%';
|
||||||
@@optimizer_switch like '%subquery_cache=on%'
|
@@optimizer_switch like '%subquery_cache=on%'
|
||||||
|
@ -7100,5 +7100,16 @@ group by round((select 1 from t1 limit 1));
|
|||||||
round((select 1 from t1 limit 1))
|
round((select 1 from t1 limit 1))
|
||||||
1
|
1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
#
|
||||||
|
# MDEV-10386 Assertion `fixed == 1' failed in virtual String* Item_func_conv_charset::val_str(String*)
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (f1 CHAR(3) CHARACTER SET utf8 NULL, f2 CHAR(3) CHARACTER SET latin1 NULL);
|
||||||
|
INSERT INTO t1 VALUES ('foo','bar');
|
||||||
|
SELECT * FROM t1 WHERE f2 >= SOME ( SELECT f1 FROM t1 );
|
||||||
|
f1 f2
|
||||||
|
SELECT * FROM t1 WHERE f2 <= SOME ( SELECT f1 FROM t1 );
|
||||||
|
f1 f2
|
||||||
|
foo bar
|
||||||
|
DROP TABLE t1;
|
||||||
set @optimizer_switch_for_subselect_test=null;
|
set @optimizer_switch_for_subselect_test=null;
|
||||||
set @join_cache_level_for_subselect_test=NULL;
|
set @join_cache_level_for_subselect_test=NULL;
|
||||||
|
@ -5988,3 +5988,13 @@ from t1
|
|||||||
group by round((select 1 from t1 limit 1));
|
group by round((select 1 from t1 limit 1));
|
||||||
|
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-10386 Assertion `fixed == 1' failed in virtual String* Item_func_conv_charset::val_str(String*)
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1 (f1 CHAR(3) CHARACTER SET utf8 NULL, f2 CHAR(3) CHARACTER SET latin1 NULL);
|
||||||
|
INSERT INTO t1 VALUES ('foo','bar');
|
||||||
|
SELECT * FROM t1 WHERE f2 >= SOME ( SELECT f1 FROM t1 );
|
||||||
|
SELECT * FROM t1 WHERE f2 <= SOME ( SELECT f1 FROM t1 );
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -1164,7 +1164,8 @@ Item *Item_cache::safe_charset_converter(CHARSET_INFO *tocs)
|
|||||||
if (conv == example)
|
if (conv == example)
|
||||||
return this;
|
return this;
|
||||||
Item_cache *cache;
|
Item_cache *cache;
|
||||||
if (!conv || !(cache= new Item_cache_str(conv)))
|
if (!conv || conv->fix_fields(current_thd, (Item **) NULL) ||
|
||||||
|
!(cache= new Item_cache_str(conv)))
|
||||||
return NULL; // Safe conversion is not possible, or OEM
|
return NULL; // Safe conversion is not possible, or OEM
|
||||||
cache->setup(conv);
|
cache->setup(conv);
|
||||||
cache->fixed= false; // Make Item::fix_fields() happy
|
cache->fixed= false; // Make Item::fix_fields() happy
|
||||||
|
Loading…
x
Reference in New Issue
Block a user