Bug#54568: create view cause Assertion failed: 0,
file .\item_subselect.cc, line 836 IN quantified predicates are never executed directly. They are rather wrapped inside nodes called IN Optimizers (Item_in_optimizer) which take care of the execution. However, this is not done during query preparation. Unfortunately the LIKE predicate pre-evaluates constant right-hand side arguments even during name resolution. Likely this is meant as an optimization. Fixed by not pre-evaluating LIKE arguments in view prepare mode.
This commit is contained in:
parent
84686593ad
commit
f77996950a
@ -59,3 +59,24 @@ FROM t3 WHERE 1 = 0 GROUP BY 1;
|
|||||||
(SELECT 1 FROM t1,t2 WHERE t2.b > t3.b)
|
(SELECT 1 FROM t1,t2 WHERE t2.b > t3.b)
|
||||||
DROP TABLE t1,t2,t3;
|
DROP TABLE t1,t2,t3;
|
||||||
End of 5.0 tests.
|
End of 5.0 tests.
|
||||||
|
#
|
||||||
|
# Bug#54568: create view cause Assertion failed: 0,
|
||||||
|
# file .\item_subselect.cc, line 836
|
||||||
|
#
|
||||||
|
EXPLAIN SELECT 1 LIKE ( 1 IN ( SELECT 1 ) );
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
|
Warnings:
|
||||||
|
Note 1249 Select 2 was reduced during optimization
|
||||||
|
DESCRIBE SELECT 1 LIKE ( 1 IN ( SELECT 1 ) );
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
|
Warnings:
|
||||||
|
Note 1249 Select 2 was reduced during optimization
|
||||||
|
# None of the below should crash
|
||||||
|
CREATE VIEW v1 AS SELECT 1 LIKE ( 1 IN ( SELECT 1 ) );
|
||||||
|
CREATE VIEW v2 AS SELECT 1 LIKE '%' ESCAPE ( 1 IN ( SELECT 1 ) );
|
||||||
|
DROP VIEW v1, v2;
|
||||||
|
#
|
||||||
|
# End of 5.1 tests.
|
||||||
|
#
|
||||||
|
@ -62,3 +62,19 @@ FROM t3 WHERE 1 = 0 GROUP BY 1;
|
|||||||
DROP TABLE t1,t2,t3;
|
DROP TABLE t1,t2,t3;
|
||||||
|
|
||||||
--echo End of 5.0 tests.
|
--echo End of 5.0 tests.
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#54568: create view cause Assertion failed: 0,
|
||||||
|
--echo # file .\item_subselect.cc, line 836
|
||||||
|
--echo #
|
||||||
|
EXPLAIN SELECT 1 LIKE ( 1 IN ( SELECT 1 ) );
|
||||||
|
DESCRIBE SELECT 1 LIKE ( 1 IN ( SELECT 1 ) );
|
||||||
|
--echo # None of the below should crash
|
||||||
|
CREATE VIEW v1 AS SELECT 1 LIKE ( 1 IN ( SELECT 1 ) );
|
||||||
|
CREATE VIEW v2 AS SELECT 1 LIKE '%' ESCAPE ( 1 IN ( SELECT 1 ) );
|
||||||
|
DROP VIEW v1, v2;
|
||||||
|
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # End of 5.1 tests.
|
||||||
|
--echo #
|
||||||
|
@ -4606,7 +4606,7 @@ bool Item_func_like::fix_fields(THD *thd, Item **ref)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (escape_item->const_item())
|
if (escape_item->const_item() && !thd->lex->view_prepare_mode)
|
||||||
{
|
{
|
||||||
/* If we are on execution stage */
|
/* If we are on execution stage */
|
||||||
String *escape_str= escape_item->val_str(&cmp.value1);
|
String *escape_str= escape_item->val_str(&cmp.value1);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user