Commit f987de71 authored by Alexander Barkov's avatar Alexander Barkov

Merge remote-tracking branch 'origin/5.5' into 10.1

parents ecdacf72 ec1f195e
# #
# Start of 5.5 tests
#
#
# MDEV-15955 Assertion `field_types == 0 || field_types[field_pos] == MYSQL_TYPE_LONGLONG' failed in Protocol_text::store_longlong
#
CREATE TABLE t1 (a INT);
INSERT INTO t1 VALUES (1),(2);
SELECT @a := 1 FROM t1 ORDER BY STRCMP(STDDEV_SAMP(a), 'bar');
@a := 1
1
SELECT COALESCE(1) FROM t1 ORDER BY STRCMP(STDDEV_SAMP(a), 'bar');
COALESCE(1)
1
SELECT COALESCE(@a:=1) FROM t1 ORDER BY STRCMP(STDDEV_SAMP(a), 'bar');
COALESCE(@a:=1)
1
SELECT COALESCE(@a) FROM t1 ORDER BY STRCMP(STDDEV_SAMP(a), 'bar');
COALESCE(@a)
1
DROP TABLE t1;
#
# End of 5.5 tests
#
#
# Start of 10.1 tests # Start of 10.1 tests
# #
# #
......
--echo #
--echo # Start of 5.5 tests
--echo #
--echo #
--echo # MDEV-15955 Assertion `field_types == 0 || field_types[field_pos] == MYSQL_TYPE_LONGLONG' failed in Protocol_text::store_longlong
--echo #
CREATE TABLE t1 (a INT);
INSERT INTO t1 VALUES (1),(2);
SELECT @a := 1 FROM t1 ORDER BY STRCMP(STDDEV_SAMP(a), 'bar');
SELECT COALESCE(1) FROM t1 ORDER BY STRCMP(STDDEV_SAMP(a), 'bar');
SELECT COALESCE(@a:=1) FROM t1 ORDER BY STRCMP(STDDEV_SAMP(a), 'bar');
SELECT COALESCE(@a) FROM t1 ORDER BY STRCMP(STDDEV_SAMP(a), 'bar');
DROP TABLE t1;
--echo #
--echo # End of 5.5 tests
--echo #
--echo # --echo #
--echo # Start of 10.1 tests --echo # Start of 10.1 tests
--echo # --echo #
......
...@@ -16158,6 +16158,29 @@ static Field *create_tmp_field_from_item(THD *thd, Item *item, TABLE *table, ...@@ -16158,6 +16158,29 @@ static Field *create_tmp_field_from_item(THD *thd, Item *item, TABLE *table,
{ {
Field *UNINIT_VAR(new_field); Field *UNINIT_VAR(new_field);
DBUG_ASSERT(thd == table->in_use); DBUG_ASSERT(thd == table->in_use);
if (item->type() == Item::FUNC_ITEM &&
static_cast<Item_func*>(item)->functype() == Item_func::SUSERVAR_FUNC)
{
/*
A temporary solution for versions 5.5 .. 10.3.
This change should be null-merged to 10.4.
Item_func_set_user_var is special. It overrides make_field().
by adding a special branch `if (result_field)...`.
So it's important to preserve the exact data type here,
to avoid type mismatch in Protocol_text::store_longlong()
See MDEV-15955.
Other Item_func descendants are not affected by MDEV-15955.
They don't override make_field() so they don't use result_field
when initializing Send_field.
This is properly fixed in 10.4 in the method
Item_func_user_var::create_tmp_field_ex().
*/
new_field= item->tmp_table_field_from_field_type(table, false, true);
}
else
new_field= item->Item::create_tmp_field(false, table); new_field= item->Item::create_tmp_field(false, table);
if (copy_func && if (copy_func &&
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment